]> granicus.if.org Git - vim/commitdiff
patch 8.1.1984: more functions can be used as methods v8.1.1984
authorBram Moolenaar <Bram@vim.org>
Wed, 4 Sep 2019 18:05:59 +0000 (20:05 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 4 Sep 2019 18:05:59 +0000 (20:05 +0200)
Problem:    More functions can be used as methods.
Solution:   Make various functions usable as a method.

runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_functions.vim
src/testdir/test_perl.vim
src/testdir/test_prompt_buffer.vim
src/testdir/test_python2.vim
src/testdir/test_python3.vim
src/testdir/test_pyx2.vim
src/version.c

index a85bcfbdbce48e866b2422e4abe794a972f21c31..89eac20f4292cf243f6a49164d583e7d39c20566 100644 (file)
@@ -7120,6 +7120,9 @@ nextnonblank({lnum})                                      *nextnonblank()*
                below it, zero is returned.
                See also |prevnonblank()|.
 
+               Can also be used as a |method|: >
+                       GetLnum()->nextnonblank()
+
 nr2char({expr} [, {utf8}])                             *nr2char()*
                Return a string with a single character, which has the number
                value {expr}.  Examples: >
@@ -7138,6 +7141,8 @@ nr2char({expr} [, {utf8}])                                *nr2char()*
                    let str = join(map(list, {_, val -> nr2char(val)}), '')
 <              Result: "ABC"
 
+               Can also be used as a |method|: >
+                       GetNumber()->nr2char()
 
 or({expr}, {expr})                                     *or()*
                Bitwise OR on the two arguments.  The arguments are converted
@@ -7157,6 +7162,9 @@ pathshorten({expr})                                       *pathshorten()*
 <                      ~/.v/a/myfile.vim ~
                It doesn't matter if the path exists or not.
 
+               Can also be used as a |method|: >
+                       GetDirectories()->pathshorten()
+
 perleval({expr})                                       *perleval()*
                Evaluate Perl expression {expr} in scalar context and return
                its result converted to Vim data structures. If value can't be
@@ -7166,7 +7174,11 @@ perleval({expr})                                 *perleval()*
                Example: >
                        :echo perleval('[1 .. 4]')
 <                      [1, 2, 3, 4]
-               {only available when compiled with the |+perl| feature}
+
+               Can also be used as a |method|: >
+                       GetExpr()->perleval()
+
+<              {only available when compiled with the |+perl| feature}
 
 
 popup_ functions are documented here: |popup-functions|.
@@ -7196,6 +7208,8 @@ prevnonblank({lnum})                                      *prevnonblank()*
                above it, zero is returned.
                Also see |nextnonblank()|.
 
+               Can also be used as a |method|: >
+                       GetLnum()->prevnonblank()
 
 printf({fmt}, {expr1} ...)                             *printf()*
                Return a String with {fmt}, where "%" items are replaced by
@@ -7424,6 +7438,10 @@ prompt_setcallback({buf}, {expr})                        *prompt_setcallback()*
                     endif
                   endfunc
 
+<              Can also be used as a |method|: >
+                       GetBuffer()->prompt_setcallback(callback)
+
+
 prompt_setinterrupt({buf}, {expr})                     *prompt_setinterrupt()*
                Set a callback for buffer {buf} to {expr}.  When {expr} is an
                empty string the callback is removed.  This has only effect if
@@ -7433,6 +7451,9 @@ prompt_setinterrupt({buf}, {expr})                        *prompt_setinterrupt()*
                mode.  Without setting a callback Vim will exit Insert mode,
                as in any buffer.
 
+               Can also be used as a |method|: >
+                       GetBuffer()->prompt_setinterrupt(callback)
+
 prompt_setprompt({buf}, {text})                                *prompt_setprompt()*
                Set prompt for buffer {buf} to {text}.  You most likely want
                {text} to end in a space.
@@ -7440,6 +7461,9 @@ prompt_setprompt({buf}, {text})                           *prompt_setprompt()*
                "prompt".  Example: >
                        call prompt_setprompt(bufnr(), 'command: ')
 <
+               Can also be used as a |method|: >
+                       GetBuffer()->prompt_setprompt('command: ')
+
 prop_ functions are documented here: |text-prop-functions|.
 
 pum_getpos()                                           *pum_getpos()*
@@ -7471,7 +7495,11 @@ py3eval({expr})                                          *py3eval()*
                Lists are represented as Vim |List| type.
                Dictionaries are represented as Vim |Dictionary| type with
                keys converted to strings.
-               {only available when compiled with the |+python3| feature}
+
+               Can also be used as a |method|: >
+                       GetExpr()->py3eval()
+
+<              {only available when compiled with the |+python3| feature}
 
                                                        *E858* *E859*
 pyeval({expr})                                         *pyeval()*
@@ -7482,14 +7510,22 @@ pyeval({expr})                                          *pyeval()*
                Lists are represented as Vim |List| type.
                Dictionaries are represented as Vim |Dictionary| type,
                non-string keys result in error.
-               {only available when compiled with the |+python| feature}
+
+               Can also be used as a |method|: >
+                       GetExpr()->pyeval()
+
+<              {only available when compiled with the |+python| feature}
 
 pyxeval({expr})                                                *pyxeval()*
                Evaluate Python expression {expr} and return its result
                converted to Vim data structures.
                Uses Python 2 or 3, see |python_x| and 'pyxversion'.
                See also: |pyeval()|, |py3eval()|
-               {only available when compiled with the |+python| or the
+
+               Can also be used as a |method|: >
+                       GetExpr()->pyxeval()
+
+<              {only available when compiled with the |+python| or the
                |+python3| feature}
 
                                                        *E726* *E727*
index 784132f5ae6cc605cc11b1687298bc5b63a2a038..3e8c48b7a20019e2cb25f44b3cd899fdee24c474 100644 (file)
@@ -625,12 +625,12 @@ static funcentry_T global_functions[] =
 #ifdef FEAT_MZSCHEME
     {"mzeval",         1, 1, FEARG_1,    f_mzeval},
 #endif
-    {"nextnonblank",   1, 1, 0,          f_nextnonblank},
-    {"nr2char",                1, 2, 0,          f_nr2char},
+    {"nextnonblank",   1, 1, FEARG_1,    f_nextnonblank},
+    {"nr2char",                1, 2, FEARG_1,    f_nr2char},
     {"or",             2, 2, FEARG_1,    f_or},
-    {"pathshorten",    1, 1, 0,          f_pathshorten},
+    {"pathshorten",    1, 1, FEARG_1,    f_pathshorten},
 #ifdef FEAT_PERL
-    {"perleval",       1, 1, 0,          f_perleval},
+    {"perleval",       1, 1, FEARG_1,    f_perleval},
 #endif
 #ifdef FEAT_TEXT_PROP
     {"popup_atcursor", 2, 2, FEARG_1,    f_popup_atcursor},
@@ -657,12 +657,12 @@ static funcentry_T global_functions[] =
 #ifdef FEAT_FLOAT
     {"pow",            2, 2, FEARG_1,    f_pow},
 #endif
-    {"prevnonblank",   1, 1, 0,          f_prevnonblank},
+    {"prevnonblank",   1, 1, FEARG_1,    f_prevnonblank},
     {"printf",         1, 19, FEARG_2,   f_printf},
 #ifdef FEAT_JOB_CHANNEL
-    {"prompt_setcallback", 2, 2, 0,      f_prompt_setcallback},
-    {"prompt_setinterrupt", 2, 2, 0,     f_prompt_setinterrupt},
-    {"prompt_setprompt", 2, 2, 0,        f_prompt_setprompt},
+    {"prompt_setcallback", 2, 2, FEARG_1,  f_prompt_setcallback},
+    {"prompt_setinterrupt", 2, 2, FEARG_1, f_prompt_setinterrupt},
+    {"prompt_setprompt", 2, 2, FEARG_1,           f_prompt_setprompt},
 #endif
 #ifdef FEAT_TEXT_PROP
     {"prop_add",       3, 3, 0,          f_prop_add},
@@ -678,13 +678,13 @@ static funcentry_T global_functions[] =
     {"pum_getpos",     0, 0, 0,          f_pum_getpos},
     {"pumvisible",     0, 0, 0,          f_pumvisible},
 #ifdef FEAT_PYTHON3
-    {"py3eval",                1, 1, 0,          f_py3eval},
+    {"py3eval",                1, 1, FEARG_1,    f_py3eval},
 #endif
 #ifdef FEAT_PYTHON
-    {"pyeval",         1, 1, 0,          f_pyeval},
+    {"pyeval",         1, 1, FEARG_1,    f_pyeval},
 #endif
 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
-    {"pyxeval",                1, 1, 0,          f_pyxeval},
+    {"pyxeval",                1, 1, FEARG_1,    f_pyxeval},
 #endif
     {"range",          1, 3, 0,          f_range},
     {"readdir",                1, 2, 0,          f_readdir},
index d5ce5f02bf75b6fb76a509cbcf71498cbd6ca9b1..fc22bcd3208281c0d2398d4dbc7938e4fbd9b5c4 100644 (file)
@@ -400,10 +400,10 @@ endfunc
 func Test_pathshorten()
   call assert_equal('', pathshorten(''))
   call assert_equal('foo', pathshorten('foo'))
-  call assert_equal('/foo', pathshorten('/foo'))
+  call assert_equal('/foo', '/foo'->pathshorten())
   call assert_equal('f/', pathshorten('foo/'))
   call assert_equal('f/bar', pathshorten('foo/bar'))
-  call assert_equal('f/b/foobar', pathshorten('foo/bar/foobar'))
+  call assert_equal('f/b/foobar', 'foo/bar/foobar'->pathshorten())
   call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar'))
   call assert_equal('.f/bar', pathshorten('.foo/bar'))
   call assert_equal('~f/bar', pathshorten('~foo/bar'))
@@ -847,21 +847,21 @@ Test
   call assert_equal(0, nextnonblank(-1))
   call assert_equal(0, nextnonblank(0))
   call assert_equal(1, nextnonblank(1))
-  call assert_equal(4, nextnonblank(2))
+  call assert_equal(4, 2->nextnonblank())
   call assert_equal(4, nextnonblank(3))
   call assert_equal(4, nextnonblank(4))
   call assert_equal(6, nextnonblank(5))
   call assert_equal(6, nextnonblank(6))
   call assert_equal(7, nextnonblank(7))
-  call assert_equal(0, nextnonblank(8))
+  call assert_equal(0, 8->nextnonblank())
 
   call assert_equal(0, prevnonblank(-1))
   call assert_equal(0, prevnonblank(0))
-  call assert_equal(1, prevnonblank(1))
+  call assert_equal(1, 1->prevnonblank())
   call assert_equal(1, prevnonblank(2))
   call assert_equal(1, prevnonblank(3))
   call assert_equal(4, prevnonblank(4))
-  call assert_equal(4, prevnonblank(5))
+  call assert_equal(4, 5->prevnonblank())
   call assert_equal(6, prevnonblank(6))
   call assert_equal(7, prevnonblank(7))
   call assert_equal(0, prevnonblank(8))
@@ -1220,7 +1220,7 @@ func Test_trim()
   call assert_equal("a", trim("a", ""))
   call assert_equal("", trim("", "a"))
 
-  let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '')
+  let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
   call assert_equal("x", trim(chars . "x" . chars))
 endfunc
 
index 8f23f2c136bdce823f79cdb39ca0af74e551e5eb..b4df0ba26d038f487f132070b8f74b68cc216cc0 100644 (file)
@@ -30,7 +30,7 @@ endfunc
 
 funct Test_VIM_Blob()
   call assert_equal('0z',         perleval('VIM::Blob("")'))
-  call assert_equal('0z31326162', perleval('VIM::Blob("12ab")'))
+  call assert_equal('0z31326162', 'VIM::Blob("12ab")'->perleval())
   call assert_equal('0z00010203', perleval('VIM::Blob("\x00\x01\x02\x03")'))
   call assert_equal('0z8081FEFF', perleval('VIM::Blob("\x80\x81\xfe\xff")'))
 endfunc
index 028f3371e3ad4d99139146eab234addbf7fdc64a..199c1c29847fc3e3766feb12058469680f7056d7 100644 (file)
@@ -48,6 +48,7 @@ func WriteScript(name)
        \ 'new',
        \ 'set buftype=prompt',
        \ 'call prompt_setcallback(bufnr(""), function("TextEntered"))',
+       \ 'eval bufnr("")->prompt_setprompt("cmd: ")',
        \ 'startinsert',
        \ ], a:name)
 endfunc
@@ -60,10 +61,10 @@ func Test_prompt_basic()
   call WriteScript(scriptName)
 
   let buf = RunVimInTerminal('-S ' . scriptName, {})
-  call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))})
 
   call term_sendkeys(buf, "hello\<CR>")
-  call WaitForAssert({-> assert_equal('% hello', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd: hello', term_getline(buf, 1))})
   call WaitForAssert({-> assert_equal('Command: "hello"', term_getline(buf, 2))})
   call WaitForAssert({-> assert_equal('Result: "hello"', term_getline(buf, 3))})
 
@@ -82,19 +83,19 @@ func Test_prompt_editing()
   call WriteScript(scriptName)
 
   let buf = RunVimInTerminal('-S ' . scriptName, {})
-  call WaitForAssert({-> assert_equal('%', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd:', term_getline(buf, 1))})
 
   let bs = "\<BS>"
   call term_sendkeys(buf, "hello" . bs . bs)
-  call WaitForAssert({-> assert_equal('% hel', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd: hel', term_getline(buf, 1))})
 
   let left = "\<Left>"
   call term_sendkeys(buf, left . left . left . bs . '-')
-  call WaitForAssert({-> assert_equal('% -hel', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd: -hel', term_getline(buf, 1))})
 
   let end = "\<End>"
   call term_sendkeys(buf, end . "x")
-  call WaitForAssert({-> assert_equal('% -helx', term_getline(buf, 1))})
+  call WaitForAssert({-> assert_equal('cmd: -helx', term_getline(buf, 1))})
 
   call term_sendkeys(buf, "\<C-U>exit\<CR>")
   call WaitForAssert({-> assert_equal('other buffer', term_getline(buf, 1))})
@@ -113,8 +114,8 @@ func Test_prompt_garbage_collect()
 
   new
   set buftype=prompt
-  call prompt_setcallback(bufnr(''), function('MyPromptCallback', [{}]))
-  call prompt_setinterrupt(bufnr(''), function('MyPromptInterrupt', [{}]))
+  eval bufnr('')->prompt_setcallback(function('MyPromptCallback', [{}]))
+  eval bufnr('')->prompt_setinterrupt(function('MyPromptInterrupt', [{}]))
   call test_garbagecollect_now()
   " Must not crash
   call feedkeys("\<CR>\<C-C>", 'xt')
index 61cf959bad2e9cb6becbae7ecfdcd26dbc02c2af..de5b0c94ac081e6332e196dd5570ac644fb37dd0 100644 (file)
@@ -54,7 +54,7 @@ func Test_vim_function()
 
   try
     py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()'))
-    call assert_equal(name, pyeval('f.name'))
+    call assert_equal(name, 'f.name'->pyeval())
   catch
     call assert_false(v:exception)
   endtry
index 7f486192093202b38755e348112fa7d465c47f66..d66e54f9d718c0cab28ae74aba94e15df923f71b 100644 (file)
@@ -54,7 +54,7 @@ func Test_vim_function()
 
   try
     py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode())
-    call assert_equal(name, py3eval('f.name'))
+    call assert_equal(name, 'f.name'->py3eval())
   catch
     call assert_false(v:exception)
   endtry
index 40e93c227b49531c6ac009ff84ac38e27b5d075c..20199a4f742b37bb0e27005c59b1b4cc50ff0b20 100644 (file)
@@ -34,7 +34,7 @@ endfunc
 
 func Test_pyxeval()
   pyx import sys
-  call assert_match(s:py2pattern, split(pyxeval('sys.version'))[0])
+  call assert_match(s:py2pattern, split('sys.version'->pyxeval())[0])
 endfunc
 
 
index bf67e38c75b68738300987de591988a4ecdcc135..7715bc80ce16ab42dbd4bfca08016e0e860377b1 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1984,
 /**/
     1983,
 /**/