]> granicus.if.org Git - vim/commitdiff
patch 8.1.1987: more functions can be used as methods v8.1.1987
authorBram Moolenaar <Bram@vim.org>
Wed, 4 Sep 2019 20:29:14 +0000 (22:29 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 4 Sep 2019 20:29:14 +0000 (22:29 +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_clientserver.vim
src/testdir/test_eval_stuff.vim
src/testdir/test_functions.vim
src/testdir/test_reltime.vim
src/testdir/test_rename.vim
src/version.c

index 89eac20f4292cf243f6a49164d583e7d39c20566..8d51ab0e156177d5bedf33c0e04f2efbb49a6c96 100644 (file)
@@ -1,4 +1,4 @@
-*eval.txt*     For Vim version 8.1.  Last change: 2019 Aug 31
+*eval.txt*     For Vim version 8.1.  Last change: 2019 Sep 04
 
 
                  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -2547,7 +2547,7 @@ keys({dict})                      List    keys in {dict}
 len({expr})                    Number  the length of {expr}
 libcall({lib}, {func}, {arg})  String  call {func} in library {lib} with {arg}
 libcallnr({lib}, {func}, {arg})        Number  idem, but return a Number
-line({expr})                   Number  line nr of cursor, last line or mark
+line({expr} [, {winid}])       Number  line nr of cursor, last line or mark
 line2byte({lnum})              Number  byte count of line {lnum}
 lispindent({lnum})             Number  Lisp indent for line {lnum}
 list2str({list} [, {utf8}])    String  turn numbers in {list} into a String
@@ -5688,8 +5688,8 @@ glob2regpat({expr})                                        *glob2regpat()*
                        GetExpr()->glob2regpat()
 <                                                              *globpath()*
 globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
-               Perform glob() on all directories in {path} and concatenate
-               the results.  Example: >
+               Perform glob() for {expr} on all directories in {path} and
+               concatenate the results.  Example: >
                        :echo globpath(&rtp, "syntax/c.vim")
 <
                {path} is a comma-separated list of directory names.  Each
@@ -5790,7 +5790,9 @@ hasmapto({what} [, {mode} [, {abbr}]])                    *hasmapto()*
                If no matching mapping is found 0 is returned.
                The following characters are recognized in {mode}:
                        n       Normal mode
-                       v       Visual mode
+                       v       Visual and Select mode
+                       x       Visual mode
+                       s       Select mode
                        o       Operator-pending mode
                        i       Insert mode
                        l       Language-Argument ("r", "f", "t", etc.)
@@ -6376,8 +6378,9 @@ libcallnr({libname}, {funcname}, {argument})
                the argument to the called function: >
                        GetValue()->libcallnr("libc.so", "printf")
 <
-                                                       *line()*
-line({expr})   The result is a Number, which is the line number of the file
+
+line({expr} [, {winid}])                               *line()*
+               The result is a Number, which is the line number of the file
                position given with {expr}.  The accepted positions are:
                    .       the cursor position
                    $       the last line in the current buffer
@@ -6395,8 +6398,11 @@ line({expr})     The result is a Number, which is the line number of the file
                then applies to another buffer.
                To get the column number use |col()|.  To get both use
                |getpos()|.
+               With the optional {winid} argument the values are obtained for
+               that window instead of the current window.
                Examples: >
                        line(".")               line number of the cursor
+                       line(".", winid)        idem, in window "winid"
                        line("'t")              line number of mark t
                        line("'" . marker)      line number of mark marker
 <
@@ -7546,6 +7552,9 @@ range({expr} [, {max} [, {stride}]])                              *range()*
                        range(2, -2, -1)        " [2, 1, 0, -1, -2]
                        range(0)                " []
                        range(2, 0)             " error!
+<
+               Can also be used as a |method|: >
+                       GetExpr()->range()
 <
                                                        *readdir()*
 readdir({directory} [, {expr}])
@@ -7575,6 +7584,9 @@ readdir({directory} [, {expr}])
                      \          {x : s:tree(a:dir . '/' . x)} : x})}
                   endfunction
                   echo s:tree(".")
+<
+               Can also be used as a |method|: >
+                       GetDirName()->readdir()
 <
                                                        *readfile()*
 readfile({fname} [, {type} [, {max}]])
@@ -7610,6 +7622,9 @@ readfile({fname} [, {type} [, {max}]])
                the result is an empty list.
                Also see |writefile()|.
 
+               Can also be used as a |method|: >
+                       GetFileName()->readfile()
+
 reg_executing()                                                *reg_executing()*
                Returns the single letter name of the register being executed.
                Returns an empty string when no register is being executed.
@@ -7631,6 +7646,10 @@ reltime([{start} [, {end}]])                             *reltime()*
                and {end}.
                The {start} and {end} arguments must be values returned by
                reltime().
+
+               Can also be used as a |method|: >
+                       GetStart()->reltime()
+<
                {only available when compiled with the |+reltime| feature}
 
 reltimefloat({time})                           *reltimefloat()*
@@ -7641,7 +7660,11 @@ reltimefloat({time})                             *reltimefloat()*
                        let seconds = reltimefloat(reltime(start))
 <              See the note of reltimestr() about overhead.
                Also see |profiling|.
-               {only available when compiled with the |+reltime| feature}
+
+               Can also be used as a |method|: >
+                       reltime(start)->reltimefloat()
+
+<              {only available when compiled with the |+reltime| feature}
 
 reltimestr({time})                             *reltimestr()*
                Return a String that represents the time value of {time}.
@@ -7656,7 +7679,11 @@ reltimestr({time})                               *reltimestr()*
                can use split() to remove it. >
                        echo split(reltimestr(reltime(start)))[0]
 <              Also see |profiling|.
-               {only available when compiled with the |+reltime| feature}
+
+               Can also be used as a |method|: >
+                       reltime(start)->reltimestr()
+
+<              {only available when compiled with the |+reltime| feature}
 
                                                        *remote_expr()* *E449*
 remote_expr({server}, {string} [, {idvar} [, {timeout}]])
@@ -7685,6 +7712,8 @@ remote_expr({server}, {string} [, {idvar} [, {timeout}]])
                        :echo remote_expr("gvim", "2+2")
                        :echo remote_expr("gvim1", "b:current_syntax")
 <
+               Can also be used as a |method|: >
+                       ServerName()->remote_expr(expr)
 
 remote_foreground({server})                            *remote_foreground()*
                Move the Vim server with the name {server} to the foreground.
@@ -7696,7 +7725,11 @@ remote_foreground({server})                              *remote_foreground()*
                Note: This does not restore the window if it was minimized,
                like foreground() does.
                This function is not available in the |sandbox|.
-               {only in the Win32, Athena, Motif and GTK GUI versions and the
+
+               Can also be used as a |method|: >
+                       ServerName()->remote_foreground()
+
+<              {only in the Win32, Athena, Motif and GTK GUI versions and the
                Win32 console version}
 
 
@@ -7714,6 +7747,9 @@ remote_peek({serverid} [, {retvar}])              *remote_peek()*
                        :let repl = ""
                        :echo "PEEK: ".remote_peek(id, "repl").": ".repl
 
+<              Can also be used as a |method|: >
+                       ServerId()->remote_peek()
+
 remote_read({serverid}, [{timeout}])                   *remote_read()*
                Return the oldest available reply from {serverid} and consume
                it.  Unless a {timeout} in seconds is given, it blocks until a
@@ -7723,6 +7759,9 @@ remote_read({serverid}, [{timeout}])                      *remote_read()*
                {only available when compiled with the |+clientserver| feature}
                Example: >
                        :echo remote_read(id)
+
+<              Can also be used as a |method|: >
+                       ServerId()->remote_read()
 <
                                                        *remote_send()* *E241*
 remote_send({server}, {string} [, {idvar}])
@@ -7746,12 +7785,19 @@ remote_send({server}, {string} [, {idvar}])
                 \ echo remote_read(expand("<amatch>"))
                :echo remote_send("gvim", ":sleep 10 | echo ".
                 \ 'server2client(expand("<client>"), "HELLO")<CR>')
+<
+               Can also be used as a |method|: >
+                       ServerName()->remote_send(keys)
 <
                                        *remote_startserver()* *E941* *E942*
 remote_startserver({name})
                Become the server {name}.  This fails if already running as a
                server, when |v:servername| is not empty.
-               {only available when compiled with the |+clientserver| feature}
+
+               Can also be used as a |method|: >
+                       ServerName()->remote_startserver()
+
+<              {only available when compiled with the |+clientserver| feature}
 
 remove({list}, {idx} [, {end}])                                *remove()*
                Without {end}: Remove the item at {idx} from |List| {list} and
@@ -7795,6 +7841,9 @@ rename({from}, {to})                                      *rename()*
                NOTE: If {to} exists it is overwritten without warning.
                This function is not available in the |sandbox|.
 
+               Can also be used as a |method|: >
+                       GetOldName()->rename(newname)
+
 repeat({expr}, {count})                                        *repeat()*
                Repeat {expr} {count} times and return the concatenated
                result.  Example: >
@@ -7824,6 +7873,8 @@ resolve({filename})                                       *resolve()* *E655*
                current directory (provided the result is still a relative
                path name) and also keeps a trailing path separator.
 
+               Can also be used as a |method|: >
+                       GetName()->resolve()
 
 reverse({object})                                      *reverse()*
                Reverse the order of items in {object} in-place.
@@ -7861,7 +7912,11 @@ rubyeval({expr})                                 *rubyeval()*
                Hashes are represented as Vim |Dictionary| type.
                Other objects are represented as strings resulted from their
                "Object#to_s" method.
-               {only available when compiled with the |+ruby| feature}
+
+               Can also be used as a |method|: >
+                       GetRubyExpr()->rubyeval()
+
+<              {only available when compiled with the |+ruby| feature}
 
 screenattr({row}, {col})                                       *screenattr()*
                Like |screenchar()|, but return the attribute.  This is a rather
@@ -10231,6 +10286,7 @@ macunix                 Synonym for osxdarwin
 menu                   Compiled with support for |:menu|.
 mksession              Compiled with support for |:mksession|.
 modify_fname           Compiled with file name modifiers. |filename-modifiers|
+                       (always true)
 mouse                  Compiled with support mouse.
 mouse_dec              Compiled with support for Dec terminal mouse.
 mouse_gpm              Compiled with support for gpm (Linux console mouse)
index 13326e32b9d1331698cf1bb41d8c4c127207f5e6..676f0376a49f9bb6b6a2f1720558fcbd4220fb34 100644 (file)
@@ -684,32 +684,32 @@ static funcentry_T global_functions[] =
 #if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
     {"pyxeval",                1, 1, FEARG_1,    f_pyxeval},
 #endif
-    {"range",          1, 3, 0,          f_range},
-    {"readdir",                1, 2, 0,          f_readdir},
-    {"readfile",       1, 3, 0,          f_readfile},
+    {"range",          1, 3, FEARG_1,    f_range},
+    {"readdir",                1, 2, FEARG_1,    f_readdir},
+    {"readfile",       1, 3, FEARG_1,    f_readfile},
     {"reg_executing",  0, 0, 0,          f_reg_executing},
     {"reg_recording",  0, 0, 0,          f_reg_recording},
-    {"reltime",                0, 2, 0,          f_reltime},
+    {"reltime",                0, 2, FEARG_1,    f_reltime},
 #ifdef FEAT_FLOAT
-    {"reltimefloat",   1, 1, 0,          f_reltimefloat},
-#endif
-    {"reltimestr",     1, 1, 0,          f_reltimestr},
-    {"remote_expr",    2, 4, 0,          f_remote_expr},
-    {"remote_foreground", 1, 1, 0,       f_remote_foreground},
-    {"remote_peek",    1, 2, 0,          f_remote_peek},
-    {"remote_read",    1, 2, 0,          f_remote_read},
-    {"remote_send",    2, 3, 0,          f_remote_send},
-    {"remote_startserver", 1, 1, 0,      f_remote_startserver},
+    {"reltimefloat",   1, 1, FEARG_1,    f_reltimefloat},
+#endif
+    {"reltimestr",     1, 1, FEARG_1,    f_reltimestr},
+    {"remote_expr",    2, 4, FEARG_1,    f_remote_expr},
+    {"remote_foreground", 1, 1, FEARG_1,  f_remote_foreground},
+    {"remote_peek",    1, 2, FEARG_1,    f_remote_peek},
+    {"remote_read",    1, 2, FEARG_1,    f_remote_read},
+    {"remote_send",    2, 3, FEARG_1,    f_remote_send},
+    {"remote_startserver", 1, 1, FEARG_1,  f_remote_startserver},
     {"remove",         2, 3, FEARG_1,    f_remove},
-    {"rename",         2, 2, 0,          f_rename},
+    {"rename",         2, 2, FEARG_1,    f_rename},
     {"repeat",         2, 2, FEARG_1,    f_repeat},
-    {"resolve",                1, 1, 0,          f_resolve},
+    {"resolve",                1, 1, FEARG_1,    f_resolve},
     {"reverse",                1, 1, FEARG_1,    f_reverse},
 #ifdef FEAT_FLOAT
     {"round",          1, 1, FEARG_1,    f_round},
 #endif
 #ifdef FEAT_RUBY
-    {"rubyeval",       1, 1, 0,          f_rubyeval},
+    {"rubyeval",       1, 1, FEARG_1,    f_rubyeval},
 #endif
     {"screenattr",     2, 2, 0,          f_screenattr},
     {"screenchar",     2, 2, 0,          f_screenchar},
index 385ff912968767306969c292b4261e52efe73eb5..2e4a66ef8665de567785fc855d0d7d96a52737a4 100644 (file)
@@ -34,7 +34,7 @@ func Test_client_server()
   " When using valgrind it takes much longer.
   call WaitForAssert({-> assert_match(name, serverlist())})
 
-  call remote_foreground(name)
+  eval name->remote_foreground()
 
   call remote_send(name, ":let testvar = 'yes'\<CR>")
   call WaitFor('remote_expr("' . name . '", "exists(\"testvar\") ? testvar : \"\"", "", 1) == "yes"')
@@ -53,7 +53,7 @@ func Test_client_server()
     endif
     " Wait for the server to be up and answering requests.
     sleep 100m
-    call WaitForAssert({-> assert_true(remote_expr(name, "v:version", "", 1) != "")})
+    call WaitForAssert({-> assert_true(name->remote_expr("v:version", "", 1) != "")})
 
     call remote_send(name, ":let testvar = 'maybe'\<CR>")
     call WaitForAssert({-> assert_equal('maybe', remote_expr(name, "testvar", "", 2))})
@@ -63,7 +63,7 @@ func Test_client_server()
 
   " Expression evaluated locally.
   if v:servername == ''
-    call remote_startserver('MYSELF')
+    eval 'MYSELF'->remote_startserver()
     " May get MYSELF1 when running the test again.
     call assert_match('MYSELF', v:servername)
   endif
@@ -71,11 +71,11 @@ func Test_client_server()
   call assert_equal('myself', remote_expr(v:servername, 'testvar'))
 
   call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
-  call assert_equal('got it', remote_read(g:myserverid, 2))
+  call assert_equal('got it', g:myserverid->remote_read(2))
 
   call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid')
   let peek_result = 'nothing'
-  let r = remote_peek(g:myserverid, 'peek_result')
+  let r = g:myserverid->remote_peek('peek_result')
   " unpredictable whether the result is already available.
   if r > 0
     call assert_equal('another', peek_result)
@@ -89,7 +89,7 @@ func Test_client_server()
   call assert_equal('another', g:peek_result)
   call assert_equal('another', remote_read(g:myserverid, 2))
 
-  call remote_send(name, ":qa!\<CR>")
+  eval name->remote_send(":qa!\<CR>")
   try
     call WaitForAssert({-> assert_equal("dead", job_status(job))})
   finally
index 82f9cac243e61da4b3b158a56b91a260a99038f8..b518f5ae6b3712c64524ed42ee6fa15705f0182e 100644 (file)
@@ -75,7 +75,7 @@ func Test_readfile_binary()
   call setline(1, ['one', 'two', 'three'])
   setlocal ff=dos
   write XReadfile
-  let lines = readfile('XReadfile')
+  let lines = 'XReadfile'->readfile()
   call assert_equal(['one', 'two', 'three'], lines)
   let lines = readfile('XReadfile', '', 2)
   call assert_equal(['one', 'two'], lines)
index fc22bcd3208281c0d2398d4dbc7938e4fbd9b5c4..dfd6a933bd17a613745016344965fc4d0b46d9aa 100644 (file)
@@ -253,7 +253,7 @@ func Test_resolve_unix()
   call delete('Xlink')
 
   silent !ln -s -f Xlink2/ Xlink1
-  call assert_equal('Xlink2', resolve('Xlink1'))
+  call assert_equal('Xlink2', 'Xlink1'->resolve())
   call assert_equal('Xlink2/', resolve('Xlink1/'))
   call delete('Xlink1')
 
@@ -1413,7 +1413,7 @@ func Test_func_range_with_edit()
   " is invalid in that buffer.
   call writefile(['just one line'], 'Xfuncrange2')
   new
-  call setline(1, range(10))
+  call setline(1, 10->range())
   write Xfuncrange1
   call assert_fails('5,8call EditAnotherFile()', 'E16:')
 
@@ -1544,7 +1544,7 @@ func Test_readdir()
   call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
 
   " Only results containing "f"
-  let files = readdir('Xdir', { x -> stridx(x, 'f') !=- 1 })
+  let files = 'Xdir'->readdir({ x -> stridx(x, 'f') !=- 1 })
   call assert_equal(['foo.txt'], sort(files))
 
   " Only .txt files
index 404ea3f7aa3f0273605634dbb9fa6791a548384a..e25c3cede4a9844c32a6a62eff25f09b9ef53c1a 100644 (file)
@@ -8,11 +8,11 @@ func Test_reltime()
   let now = reltime()
   sleep 10m
   let later = reltime()
-  let elapsed = reltime(now)
+  let elapsed = now->reltime()
   call assert_true(reltimestr(elapsed) =~ '0\.0')
-  call assert_true(reltimestr(elapsed) != '0.0')
+  call assert_true(elapsed->reltimestr() != '0.0')
   call assert_true(reltimefloat(elapsed) < 0.1)
-  call assert_true(reltimefloat(elapsed) > 0.0)
+  call assert_true(elapsed->reltimefloat() > 0.0)
 
   let same = reltime(now, now)
   call assert_equal('0.000', split(reltimestr(same))[0][:4])
index 2311caf790adbc2b0fe73f45595249e5904e35e1..3887fcfabfb355a5f494bafaf90fe3fbdee088ed 100644 (file)
@@ -25,7 +25,7 @@ func Test_rename_file_ignore_case()
   set fileignorecase
   call writefile(['foo'], 'Xrename')
 
-  call assert_equal(0, rename('Xrename', 'XRENAME'))
+  call assert_equal(0, 'Xrename'->rename('XRENAME'))
 
   call assert_equal(['foo'], readfile('XRENAME'))
 
index d61b59c47cfe686bc04a3bbd8d11ec250f22710f..420d1ff5255d320175d075392d7b7912581e66e7 100644 (file)
@@ -757,6 +757,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1987,
 /**/
     1986,
 /**/