]> granicus.if.org Git - vim/commitdiff
patch 8.1.1888: more functions can be used as methods v8.1.1888
authorBram Moolenaar <Bram@vim.org>
Sun, 18 Aug 2019 21:01:56 +0000 (23:01 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 18 Aug 2019 21:01:56 +0000 (23:01 +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_arglist.vim
src/testdir/test_balloon_gui.vim
src/testdir/test_functions.vim
src/testdir/test_hide.vim
src/testdir/test_popup.vim
src/testdir/test_vimscript.vim
src/version.c

index be1ea8503a63b5e5e375c59cfcd5cba773c47529..e1f72c76b75104c526aaa521f65562f7081b63e2 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*     For Vim version 8.1.  Last change: 2019 Aug 17
+*eval.txt*     For Vim version 8.1.  Last change: 2019 Aug 18
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2937,6 +2937,8 @@ and({expr}, {expr})                                       *and()*
                to a number.  A List, Dict or Float argument causes an error.
                Example: >
                        :let flag = and(bits, 0x80)
+<              Can also be used as a |method|: >
+                       :let flag = bits->and(0x80)
 
 
 append({lnum}, {text})                                 *append()*
@@ -3088,6 +3090,8 @@ balloon_show({expr})                                      *balloon_show()*
                        func BalloonCallback(result)
                          call balloon_show(a:result)
                        endfunc
+<              Can also be used as a |method|: >
+                       GetText()->balloon_show()
 <
                The intended use is that fetching the content of the balloon
                is initiated from 'balloonexpr'.  It will invoke an
@@ -3105,7 +3109,10 @@ balloon_split({msg})                                     *balloon_split()*
                splits are made for the current window size and optimize to
                show debugger output.
                Returns a |List| with the split lines.
-               {only available when compiled with the |+balloon_eval_term|
+               Can also be used as a |method|: >
+                       GetText()->balloon_split()->balloon_show()
+
+<              {only available when compiled with the |+balloon_eval_term|
                feature}
 
                                                        *browse()*
@@ -3117,8 +3124,8 @@ browse({save}, {title}, {initdir}, {default})
                    {title}     title for the requester
                    {initdir}   directory to start browsing in
                    {default}   default file name
-               When the "Cancel" button is hit, something went wrong, or
-               browsing is not possible, an empty string is returned.
+               An empty string is returned when the "Cancel" button is hit,
+               something went wrong, or browsing is not possible.
 
                                                        *browsedir()*
 browsedir({title}, {initdir})
@@ -3144,6 +3151,8 @@ bufadd({name})                                            *bufadd()*
                        let bufnr = bufadd('someName')
                        call bufload(bufnr)
                        call setbufline(bufnr, 1, ['some', 'text'])
+<              Can also be used as a |method|: >
+                       let bufnr = 'somename'->bufadd()
 
 bufexists({expr})                                      *bufexists()*
                The result is a Number, which is |TRUE| if a buffer called
@@ -3166,14 +3175,20 @@ bufexists({expr})                                       *bufexists()*
                for MS-Windows 8.3 names in the form "c:\DOCUME~1"
                Use "bufexists(0)" to test for the existence of an alternate
                file name.
-                                                       *buffer_exists()*
-               Obsolete name: buffer_exists().
+
+               Can also be used as a |method|: >
+                       let exists = 'somename'->bufexists()
+<
+               Obsolete name: buffer_exists().         *buffer_exists()*
 
 buflisted({expr})                                      *buflisted()*
                The result is a Number, which is |TRUE| if a buffer called
                {expr} exists and is listed (has the 'buflisted' option set).
                The {expr} argument is used like with |bufexists()|.
 
+               Can also be used as a |method|: >
+                       let listed = 'somename'->buflisted()
+
 bufload({expr})                                                *bufload()*
                Ensure the buffer {expr} is loaded.  When the buffer name
                refers to an existing file then the file is read.  Otherwise
@@ -3183,11 +3198,17 @@ bufload({expr})                                         *bufload()*
                there will be no dialog, the buffer will be loaded anyway.
                The {expr} argument is used like with |bufexists()|.
 
+               Can also be used as a |method|: >
+                       eval 'somename'->bufload()
+
 bufloaded({expr})                                      *bufloaded()*
                The result is a Number, which is |TRUE| if a buffer called
                {expr} exists and is loaded (shown in a window or hidden).
                The {expr} argument is used like with |bufexists()|.
 
+               Can also be used as a |method|: >
+                       let loaded = 'somename'->bufloaded()
+
 bufname({expr})                                                *bufname()*
                The result is the name of a buffer, as it is displayed by the
                ":ls" command.
@@ -3209,6 +3230,9 @@ bufname({expr})                                           *bufname()*
                If the {expr} is a String, but you want to use it as a buffer
                number, force it to be a Number by adding zero to it: >
                        :echo bufname("3" + 0)
+<              Can also be used as a |method|: >
+                       echo bufnr->bufname()
+
 <              If the buffer doesn't exist, or doesn't have a name, an empty
                string is returned. >
        bufname("#")            alternate buffer name
@@ -3232,8 +3256,11 @@ bufnr({expr} [, {create}])
                of existing buffers.  Note that not all buffers with a smaller
                number necessarily exist, because ":bwipeout" may have removed
                them.  Use bufexists() to test for the existence of a buffer.
-                                                       *buffer_number()*
-               Obsolete name: buffer_number().
+
+               Can also be used as a |method|: >
+                       echo bufref->bufnr()
+<
+               Obsolete name: buffer_number().         *buffer_number()*
                                                        *last_buffer_nr()*
                Obsolete name for bufnr("$"): last_buffer_nr().
 
@@ -5834,6 +5861,8 @@ invert({expr})                                            *invert()*
                Bitwise invert.  The argument is converted to a number.  A
                List, Dict or Float argument causes an error.  Example: >
                        :let bits = invert(bits)
+<              Can also be used as a |method|: >
+                       :let bits = bits->invert()
 
 isdirectory({directory})                               *isdirectory()*
                The result is a Number, which is |TRUE| when a directory
@@ -6762,11 +6791,14 @@ nr2char({expr} [, {utf8}])                              *nr2char()*
                    let str = join(map(list, {_, val -> nr2char(val)}), '')
 <              Result: "ABC"
 
+
 or({expr}, {expr})                                     *or()*
                Bitwise OR on the two arguments.  The arguments are converted
                to a number.  A List, Dict or Float argument causes an error.
                Example: >
                        :let bits = or(bits, 0x80)
+<              Can also be used as a |method|: >
+                       :let bits = bits->or(0x80)
 
 
 pathshorten({expr})                                    *pathshorten()*
@@ -9689,6 +9721,8 @@ xor({expr}, {expr})                                       *xor()*
                to a number.  A List, Dict or Float argument causes an error.
                Example: >
                        :let bits = xor(bits, 0x80)
+<              Can also be used as a |method|: >
+                       :let bits = bits->xor(0x80)
 <
 
 
index a2964286fc36f962e72b0f882878dbebb34334e0..2f66b173a966ce90edad846aa5fc47d7a17621c8 100644 (file)
@@ -419,7 +419,7 @@ static funcentry_T global_functions[] =
     {"acos",           1, 1, FEARG_1,    f_acos},      // WJMc
 #endif
     {"add",            2, 2, FEARG_1,    f_add},
-    {"and",            2, 2, 0,          f_and},
+    {"and",            2, 2, FEARG_1,    f_and},
     {"append",         2, 2, FEARG_LAST, f_append},
     {"appendbufline",  3, 3, FEARG_LAST, f_appendbufline},
     {"argc",           0, 1, 0,          f_argc},
@@ -447,23 +447,23 @@ static funcentry_T global_functions[] =
 #endif
 #ifdef FEAT_BEVAL
     {"balloon_gettext",        0, 0, 0,          f_balloon_gettext},
-    {"balloon_show",   1, 1, 0,          f_balloon_show},
+    {"balloon_show",   1, 1, FEARG_1,    f_balloon_show},
 # if defined(FEAT_BEVAL_TERM)
-    {"balloon_split",  1, 1, 0,          f_balloon_split},
+    {"balloon_split",  1, 1, FEARG_1,    f_balloon_split},
 # endif
 #endif
     {"browse",         4, 4, 0,          f_browse},
     {"browsedir",      2, 2, 0,          f_browsedir},
-    {"bufadd",         1, 1, 0,          f_bufadd},
-    {"bufexists",      1, 1, 0,          f_bufexists},
-    {"buffer_exists",  1, 1, 0,          f_bufexists}, // obsolete
+    {"bufadd",         1, 1, FEARG_1,    f_bufadd},
+    {"bufexists",      1, 1, FEARG_1,    f_bufexists},
+    {"buffer_exists",  1, 1, FEARG_1,    f_bufexists}, // obsolete
     {"buffer_name",    1, 1, 0,          f_bufname},   // obsolete
     {"buffer_number",  1, 1, 0,          f_bufnr},     // obsolete
-    {"buflisted",      1, 1, 0,          f_buflisted},
-    {"bufload",                1, 1, 0,          f_bufload},
-    {"bufloaded",      1, 1, 0,          f_bufloaded},
-    {"bufname",                1, 1, 0,          f_bufname},
-    {"bufnr",          1, 2, 0,          f_bufnr},
+    {"buflisted",      1, 1, FEARG_1,    f_buflisted},
+    {"bufload",                1, 1, FEARG_1,    f_bufload},
+    {"bufloaded",      1, 1, FEARG_1,    f_bufloaded},
+    {"bufname",                1, 1, FEARG_1,    f_bufname},
+    {"bufnr",          1, 2, FEARG_1,    f_bufnr},
     {"bufwinid",       1, 1, 0,          f_bufwinid},
     {"bufwinnr",       1, 1, 0,          f_bufwinnr},
     {"byte2line",      1, 1, 0,          f_byte2line},
@@ -626,7 +626,7 @@ static funcentry_T global_functions[] =
     {"inputsave",      0, 0, 0,          f_inputsave},
     {"inputsecret",    1, 2, 0,          f_inputsecret},
     {"insert",         2, 3, FEARG_1,    f_insert},
-    {"invert",         1, 1, 0,          f_invert},
+    {"invert",         1, 1, FEARG_1,    f_invert},
     {"isdirectory",    1, 1, 0,          f_isdirectory},
 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
     {"isinf",          1, 1, FEARG_1,    f_isinf},
@@ -690,7 +690,7 @@ static funcentry_T global_functions[] =
 #endif
     {"nextnonblank",   1, 1, 0,          f_nextnonblank},
     {"nr2char",                1, 2, 0,          f_nr2char},
-    {"or",             2, 2, 0,          f_or},
+    {"or",             2, 2, FEARG_1,    f_or},
     {"pathshorten",    1, 1, 0,          f_pathshorten},
 #ifdef FEAT_PERL
     {"perleval",       1, 1, 0,          f_perleval},
@@ -976,7 +976,7 @@ static funcentry_T global_functions[] =
     {"winwidth",       1, 1, 0,          f_winwidth},
     {"wordcount",      0, 0, 0,          f_wordcount},
     {"writefile",      2, 3, 0,          f_writefile},
-    {"xor",            2, 2, 0,          f_xor},
+    {"xor",            2, 2, FEARG_1,    f_xor},
 };
 
 /*
index fc086fa434dd05bd0c7f3914e1fc65694f4e42c2..a382a1a549cbab8ef4e1f3f5ee7cdfb3b6b70859 100644 (file)
@@ -90,8 +90,8 @@ func Test_argadd_empty_curbuf()
   call assert_equal('', bufname('%'))
   call assert_equal(1, line('$'))
   rew
-  call assert_notequal(curbuf, bufnr('%'))
-  call assert_equal('Xargadd', bufname('%'))
+  call assert_notequal(curbuf, '%'->bufnr())
+  call assert_equal('Xargadd', '%'->bufname())
   call assert_equal(2, line('$'))
 
   call delete('Xargadd')
index 5b486c0b73f81994b5e2456368ebef2863e80656..70a88f36f167ddf5c40121d88c1302a80f44fec1 100644 (file)
@@ -12,7 +12,7 @@ func Test_balloon_show_gui()
   call balloon_show('')
 
   let msg = 'that that'
-  call balloon_show(msg)
+  eval msg->balloon_show()
   call assert_equal(msg, balloon_gettext())
   sleep 10m
   call balloon_show('')
index 474e6384e8f1758c539aefcbb97350bb963388fe..5249d4e946ac3598e61144ea00b19c66191433fe 100644 (file)
@@ -1537,12 +1537,12 @@ func Test_bufadd_bufload()
 
   let curbuf = bufnr('')
   call writefile(['some', 'text'], 'XotherName')
-  let buf = bufadd('XotherName')
+  let buf = 'XotherName'->bufadd()
   call assert_notequal(0, buf)
-  call assert_equal(1, bufexists('XotherName'))
+  eval 'XotherName'->bufexists()->assert_equal(1)
   call assert_equal(0, getbufvar(buf, '&buflisted'))
   call assert_equal(0, bufloaded(buf))
-  call bufload(buf)
+  eval buf->bufload()
   call assert_equal(1, bufloaded(buf))
   call assert_equal(['some', 'text'], getbufline(buf, 1, '$'))
   call assert_equal(curbuf, bufnr(''))
index 128b8ff945edd735a7043e62100fb8d1faa1ed89..41b1a4ad7c392e85c0c5ee45d9cb807a69c110e1 100644 (file)
@@ -37,7 +37,7 @@ function Test_hide()
   " :hide as a command
   hide
   call assert_equal([orig_bname, orig_winnr], [bufname(''), winnr('$')])
-  call assert_equal([1, 1], [buflisted('Xf1'), bufloaded('Xf1')])
+  call assert_equal([1, 1], ['Xf1'->buflisted(), 'Xf1'->bufloaded()])
   bwipeout! Xf1
 
   new Xf1
index d9f561bc7f6c2ff8fbe06d3d37e5dcc4d142812a..6c86d6936ae9de0e5e3db25682d601e501a905dd 100644 (file)
@@ -758,9 +758,8 @@ func Test_popup_and_previewwindow_dump()
 endfunc
 
 func Test_balloon_split()
-  if !exists('*balloon_split')
-    return
-  endif
+  CheckFunction balloon_split
+
   call assert_equal([
         \ 'tempname: 0x555555e380a0 "/home/mool/.viminfz.tmp"',
         \ ], balloon_split(
@@ -771,13 +770,14 @@ func Test_balloon_split()
         \ ], balloon_split(
         \ 'one two three four one two three four one two three four'))
 
-  call assert_equal([
-        \ 'struct = {',
-        \ '  one = 1,',
-        \ '  two = 2,',
-        \ '  three = 3}',
-        \ ], balloon_split(
-        \ 'struct = {one = 1, two = 2, three = 3}'))
+  eval 'struct = {one = 1, two = 2, three = 3}'
+        \ ->balloon_split()
+        \ ->assert_equal([
+        \   'struct = {',
+        \   '  one = 1,',
+        \   '  two = 2,',
+        \   '  three = 3}',
+        \ ])
 
   call assert_equal([
         \ 'struct = {',
index 69a2ebafda08534491425da1b7d99d21c9805d15..dc4df4448f00555d406e40feb52ef7962b7c3549 100644 (file)
@@ -1330,6 +1330,7 @@ func Test_bitwise_functions()
     " and
     call assert_equal(127, and(127, 127))
     call assert_equal(16, and(127, 16))
+    eval 127->and(16)->assert_equal(16)
     call assert_equal(0, and(127, 128))
     call assert_fails("call and(1.0, 1)", 'E805:')
     call assert_fails("call and([], 1)", 'E745:')
@@ -1340,6 +1341,7 @@ func Test_bitwise_functions()
     " or
     call assert_equal(23, or(16, 7))
     call assert_equal(15, or(8, 7))
+    eval 8->or(7)->assert_equal(15)
     call assert_equal(123, or(0, 123))
     call assert_fails("call or(1.0, 1)", 'E805:')
     call assert_fails("call or([], 1)", 'E745:')
@@ -1350,6 +1352,7 @@ func Test_bitwise_functions()
     " xor
     call assert_equal(0, xor(127, 127))
     call assert_equal(111, xor(127, 16))
+    eval 127->xor(16)->assert_equal(111)
     call assert_equal(255, xor(127, 128))
     call assert_fails("call xor(1.0, 1)", 'E805:')
     call assert_fails("call xor([], 1)", 'E745:')
@@ -1359,6 +1362,7 @@ func Test_bitwise_functions()
     call assert_fails("call xor(1, {})", 'E728:')
     " invert
     call assert_equal(65408, and(invert(127), 65535))
+    eval 127->invert()->and(65535)->assert_equal(65408)
     call assert_equal(65519, and(invert(16), 65535))
     call assert_equal(65407, and(invert(128), 65535))
     call assert_fails("call invert(1.0)", 'E805:')
index eb4106fcfe321b73d282f04f86b089e4cec6b7ed..85d481a32a2f7a629ae9ddc7698682982b6de4c0 100644 (file)
@@ -765,6 +765,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1888,
 /**/
     1887,
 /**/