]> granicus.if.org Git - vim/commitdiff
patch 8.1.1925: more functions can be used as methods v8.1.1925
authorBram Moolenaar <Bram@vim.org>
Sat, 24 Aug 2019 20:58:31 +0000 (22:58 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 24 Aug 2019 20:58:31 +0000 (22:58 +0200)
Problem:    More functions can be used as methods.
Solution:   Make various functions usable as a method.

15 files changed:
runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_bufline.vim
src/testdir/test_bufwintabinfo.vim
src/testdir/test_cd.vim
src/testdir/test_changelist.vim
src/testdir/test_cmdline.vim
src/testdir/test_edit.vim
src/testdir/test_environ.vim
src/testdir/test_file_perm.vim
src/testdir/test_getvar.vim
src/testdir/test_jumplist.vim
src/testdir/test_put.vim
src/testdir/test_stat.vim
src/version.c

index 9a00dd3295ce464d74f648be519d11f22cdbe0d3..3162a2417ee2ade228fca441e2885a737c4f008a 100644 (file)
@@ -2450,7 +2450,7 @@ getbufline({expr}, {lnum} [, {end}])
                                List    lines {lnum} to {end} of buffer {expr}
 getbufvar({expr}, {varname} [, {def}])
                                any     variable {varname} in buffer {expr}
-getchangelist({expr})          List    list of change list items
+getchangelist([{expr}])                List    list of change list items
 getchar([expr])                        Number  get one character from the user
 getcharmod()                   Number  modifiers for the last typed character
 getcharsearch()                        Dict    last character search
@@ -4816,6 +4816,9 @@ getbufline({expr}, {lnum} [, {end}])
                Example: >
                        :let lines = getbufline(bufnr("myfile"), 1, "$")
 
+<              Can also be used as a |method|: >
+                       GetBufnr()->getbufline(lnum)
+
 getbufvar({expr}, {varname} [, {def}])                         *getbufvar()*
                The result is the value of option or local buffer variable
                {varname} in buffer {expr}.  Note that the name without "b:"
@@ -4835,8 +4838,11 @@ getbufvar({expr}, {varname} [, {def}])                           *getbufvar()*
                Examples: >
                        :let bufmodified = getbufvar(1, "&mod")
                        :echo "todo myvar = " . getbufvar("todo", "myvar")
+
+<              Can also be used as a |method|: >
+                       GetBufnr()->getbufvar(varname)
 <
-getchangelist({expr})                                  *getchangelist()*
+getchangelist([{expr}])                                        *getchangelist()*
                Returns the |changelist| for the buffer {expr}. For the use
                of {expr}, see |bufname()| above. If buffer {expr} doesn't
                exist, an empty list is returned.
@@ -4852,6 +4858,9 @@ getchangelist({expr})                                     *getchangelist()*
                position refers to the position in the list. For other
                buffers, it is set to the length of the list.
 
+               Can also be used as a |method|: >
+                       GetBufnr()->getchangelist()
+
 getchar([expr])                                                *getchar()*
                Get a single character from the user or input stream.
                If [expr] is omitted, wait until a character is available.
@@ -5051,6 +5060,9 @@ getcompletion({pat}, {type} [, {filtered}])               *getcompletion()*
                If there are no matches, an empty list is returned.  An
                invalid value for {type} produces an error.
 
+               Can also be used as a |method|: >
+                       GetPattern()->getcompletion('color')
+<
                                                        *getcurpos()*
 getcurpos()    Get the position of the cursor.  This is like getpos('.'), but
                includes an extra item in the list:
@@ -5097,6 +5109,9 @@ getcwd([{winnr} [, {tabnr}]])
                        :echo getcwd(-1, 3)
                        " Get the working directory of current tabpage
                        :echo getcwd(-1, 0)
+
+<              Can also be used as a |method|: >
+                       GetWinnr()->getcwd()
 <
 getenv({name})                                         *getenv()*
                Return the value of environment variable {name}.
@@ -5105,6 +5120,9 @@ getenv({name})                                            *getenv()*
                some systems interpret the empty value as the variable being
                deleted.  See also |expr-env|.
 
+               Can also be used as a |method|: >
+                       GetVarname()->getenv()
+
 getfontname([{name}])                                  *getfontname()*
                Without an argument returns the name of the normal font being
                used.  Like what is used for the Normal highlight group
@@ -5134,6 +5152,9 @@ getfperm({fname})                                 *getfperm()*
 <              This will hopefully (from a security point of view) display
                the string "rw-r--r--" or even "rw-------".
 
+               Can also be used as a |method|: >
+                       GetFilename()->getfperm()
+<
                For setting permissions use |setfperm()|.
 
 getfsize({fname})                                      *getfsize()*
@@ -5144,6 +5165,9 @@ getfsize({fname})                                 *getfsize()*
                If the size of {fname} is too big to fit in a Number then -2
                is returned.
 
+               Can also be used as a |method|: >
+                       GetFilename()->getfsize()
+
 getftime({fname})                                      *getftime()*
                The result is a Number, which is the last modification time of
                the given file {fname}.  The value is measured as seconds
@@ -5151,6 +5175,9 @@ getftime({fname})                                 *getftime()*
                |localtime()| and |strftime()|.
                If the file {fname} can't be found -1 is returned.
 
+               Can also be used as a |method|: >
+                       GetFilename()->getftime()
+
 getftype({fname})                                      *getftype()*
                The result is a String, which is a description of the kind of
                file of the given file {fname}.
@@ -5172,6 +5199,9 @@ getftype({fname})                                 *getftype()*
                "file" are returned.  On MS-Windows a symbolic link to a
                directory returns "dir" instead of "link".
 
+               Can also be used as a |method|: >
+                       GetFilename()->getftype()
+
 getjumplist([{winnr} [, {tabnr}]])                     *getjumplist()*
                Returns the |jumplist| for the specified window.
 
@@ -5191,7 +5221,10 @@ getjumplist([{winnr} [, {tabnr}]])                       *getjumplist()*
                        filename        filename if available
                        lnum            line number
 
-                                                       *getline()*
+               Can also be used as a |method|: >
+                       GetWinnr()->getjumplist()
+
+<                                                      *getline()*
 getline({lnum} [, {end}])
                Without {end} the result is a String, which is line {lnum}
                from the current buffer.  Example: >
@@ -5214,6 +5247,9 @@ getline({lnum} [, {end}])
                        :let end = search("^$") - 1
                        :let lines = getline(start, end)
 
+<              Can also be used as a |method|: >
+                       ComputeLnum()->getline()
+
 <              To get lines from another buffer see |getbufline()|
 
 getloclist({nr} [, {what}])                            *getloclist()*
@@ -5289,6 +5325,9 @@ getpos({expr})    Get the position for {expr}.  For possible values of {expr}
                        call setpos("'a", save_a_mark)
 <              Also see |getcurpos()| and |setpos()|.
 
+               Can also be used as a |method|: >
+                       GetMark()->getpos()
+
 
 getqflist([{what}])                                    *getqflist()*
                Returns a list with all the current quickfix errors.  Each
@@ -5405,6 +5444,9 @@ getreg([{regname} [, 1 [, {list}]]])                      *getreg()*
 
                If {regname} is not specified, |v:register| is used.
 
+               Can also be used as a |method|: >
+                       GetRegname()->getreg()
+
 
 getregtype([{regname}])                                        *getregtype()*
                The result is a String, which is type of register {regname}.
@@ -5416,6 +5458,9 @@ getregtype([{regname}])                                   *getregtype()*
                <CTRL-V> is one character with value 0x16.
                If {regname} is not specified, |v:register| is used.
 
+               Can also be used as a |method|: >
+                       GetRegname()->getregtype()
+
 gettabinfo([{arg}])                                    *gettabinfo()*
                If {arg} is not specified, then information about all the tab
                pages is returned as a List. Each List item is a Dictionary.
@@ -5429,6 +5474,9 @@ gettabinfo([{arg}])                                       *gettabinfo()*
                                        tabpage-local variables
                        windows         List of |window-ID|s in the tab page.
 
+               Can also be used as a |method|: >
+                       GetTabnr()->gettabinfo()
+
 gettabvar({tabnr}, {varname} [, {def}])                                *gettabvar()*
                Get the value of a tab-local variable {varname} in tab page
                {tabnr}. |t:var|
@@ -5439,6 +5487,9 @@ gettabvar({tabnr}, {varname} [, {def}])                           *gettabvar()*
                When the tab or variable doesn't exist {def} or an empty
                string is returned, there is no error message.
 
+               Can also be used as a |method|: >
+                       GetTabnr()->gettabvar(varname)
+
 gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])            *gettabwinvar()*
                Get the value of window-local variable {varname} in window
                {winnr} in tab page {tabnr}.
@@ -5465,6 +5516,9 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])               *gettabwinvar()*
                To obtain all window-local variables use: >
                        gettabwinvar({tabnr}, {winnr}, '&')
 
+<              Can also be used as a |method|: >
+                       GetTabnr()->gettabvar(winnr, varname)
+
 gettagstack([{nr}])                                    *gettagstack()*
                The result is a Dict, which is the tag stack of window {nr}.
                {nr} can be the window number or the |window-ID|.
@@ -8006,6 +8060,9 @@ setfperm({fname}, {mode})                         *setfperm()* *chmod*
 
                Returns non-zero for success, zero for failure.
 
+               Can also be used as a |method|: >
+                       GetFilename()->setfperm(mode)
+<
                To read permissions see |getfperm()|.
 
 
index 07e5993de600d7d8fb5b0a2e88fee8ba9822ec76..498e87f0d8a2f7ba27050c9e69c267df69830382 100644 (file)
@@ -561,9 +561,9 @@ static funcentry_T global_functions[] =
     {"garbagecollect", 0, 1, 0,          f_garbagecollect},
     {"get",            2, 3, FEARG_1,    f_get},
     {"getbufinfo",     0, 1, 0,          f_getbufinfo},
-    {"getbufline",     2, 3, 0,          f_getbufline},
-    {"getbufvar",      2, 3, 0,          f_getbufvar},
-    {"getchangelist",  1, 1, 0,          f_getchangelist},
+    {"getbufline",     2, 3, FEARG_1,    f_getbufline},
+    {"getbufvar",      2, 3, FEARG_1,    f_getbufvar},
+    {"getchangelist",  0, 1, FEARG_1,    f_getchangelist},
     {"getchar",                0, 1, 0,          f_getchar},
     {"getcharmod",     0, 0, 0,          f_getcharmod},
     {"getcharsearch",  0, 0, 0,          f_getcharsearch},
@@ -571,27 +571,27 @@ static funcentry_T global_functions[] =
     {"getcmdpos",      0, 0, 0,          f_getcmdpos},
     {"getcmdtype",     0, 0, 0,          f_getcmdtype},
     {"getcmdwintype",  0, 0, 0,          f_getcmdwintype},
-    {"getcompletion",  2, 3, 0,          f_getcompletion},
+    {"getcompletion",  2, 3, FEARG_1,    f_getcompletion},
     {"getcurpos",      0, 0, 0,          f_getcurpos},
-    {"getcwd",         0, 2, 0,          f_getcwd},
-    {"getenv",         1, 1, 0,          f_getenv},
+    {"getcwd",         0, 2, FEARG_1,    f_getcwd},
+    {"getenv",         1, 1, FEARG_1,    f_getenv},
     {"getfontname",    0, 1, 0,          f_getfontname},
-    {"getfperm",       1, 1, 0,          f_getfperm},
-    {"getfsize",       1, 1, 0,          f_getfsize},
-    {"getftime",       1, 1, 0,          f_getftime},
-    {"getftype",       1, 1, 0,          f_getftype},
-    {"getjumplist",    0, 2, 0,          f_getjumplist},
-    {"getline",                1, 2, 0,          f_getline},
+    {"getfperm",       1, 1, FEARG_1,    f_getfperm},
+    {"getfsize",       1, 1, FEARG_1,    f_getfsize},
+    {"getftime",       1, 1, FEARG_1,    f_getftime},
+    {"getftype",       1, 1, FEARG_1,    f_getftype},
+    {"getjumplist",    0, 2, FEARG_1,    f_getjumplist},
+    {"getline",                1, 2, FEARG_1,    f_getline},
     {"getloclist",     1, 2, 0,          f_getloclist},
     {"getmatches",     0, 1, 0,          f_getmatches},
     {"getpid",         0, 0, 0,          f_getpid},
-    {"getpos",         1, 1, 0,          f_getpos},
+    {"getpos",         1, 1, FEARG_1,    f_getpos},
     {"getqflist",      0, 1, 0,          f_getqflist},
-    {"getreg",         0, 3, 0,          f_getreg},
-    {"getregtype",     0, 1, 0,          f_getregtype},
-    {"gettabinfo",     0, 1, 0,          f_gettabinfo},
-    {"gettabvar",      2, 3, 0,          f_gettabvar},
-    {"gettabwinvar",   3, 4, 0,          f_gettabwinvar},
+    {"getreg",         0, 3, FEARG_1,    f_getreg},
+    {"getregtype",     0, 1, FEARG_1,    f_getregtype},
+    {"gettabinfo",     0, 1, FEARG_1,    f_gettabinfo},
+    {"gettabvar",      2, 3, FEARG_1,    f_gettabvar},
+    {"gettabwinvar",   3, 4, FEARG_1,    f_gettabwinvar},
     {"gettagstack",    0, 1, 0,          f_gettagstack},
     {"getwininfo",     0, 1, 0,          f_getwininfo},
     {"getwinpos",      0, 1, 0,          f_getwinpos},
@@ -793,7 +793,7 @@ static funcentry_T global_functions[] =
     {"setcharsearch",  1, 1, 0,          f_setcharsearch},
     {"setcmdpos",      1, 1, 0,          f_setcmdpos},
     {"setenv",         2, 2, 0,          f_setenv},
-    {"setfperm",       2, 2, 0,          f_setfperm},
+    {"setfperm",       2, 2, FEARG_1,    f_setfperm},
     {"setline",                2, 2, 0,          f_setline},
     {"setloclist",     2, 4, 0,          f_setloclist},
     {"setmatches",     1, 2, 0,          f_setmatches},
@@ -4477,10 +4477,15 @@ f_getchangelist(typval_T *argvars, typval_T *rettv)
        return;
 
 #ifdef FEAT_JUMPLIST
-    (void)tv_get_number(&argvars[0]);      /* issue errmsg if type error */
-    ++emsg_off;
-    buf = tv_get_buf(&argvars[0], FALSE);
-    --emsg_off;
+    if (argvars[0].v_type == VAR_UNKNOWN)
+       buf = curbuf;
+    else
+    {
+       (void)tv_get_number(&argvars[0]);    // issue errmsg if type error
+       ++emsg_off;
+       buf = tv_get_buf(&argvars[0], FALSE);
+       --emsg_off;
+    }
     if (buf == NULL)
        return;
 
index 183a186c457f20348dabc9df933cb694eaa980fc..50f7275df1a10032c521a9b1b84e01723ea12757 100644 (file)
@@ -22,7 +22,7 @@ func Test_setbufline_getbufline()
   call assert_equal(1, setbufline(b, 5, ['x']))
   call assert_equal(1, setbufline(bufnr('$') + 1, 1, ['x']))
   call assert_equal(0, setbufline(b, 4, ['d', 'e']))
-  call assert_equal(['c'], getbufline(b, 3))
+  call assert_equal(['c'], b->getbufline(3))
   call assert_equal(['d'], getbufline(b, 4))
   call assert_equal(['e'], getbufline(b, 5))
   call assert_equal([], getbufline(b, 6))
index 7f0a6ceb4393f9bac3184db0b7e20a87e797384b..d9b3691e414908d9bd893243bfa6584238785efa 100644 (file)
@@ -88,7 +88,7 @@ function Test_getbufwintabinfo()
     call assert_equal(2, tablist[1].tabnr)
     call assert_equal('build', tablist[0].variables.space)
     call assert_equal(w2_id, tablist[0].windows[0])
-    call assert_equal([], gettabinfo(3))
+    call assert_equal([], 3->gettabinfo())
 
     tabonly | only
 
@@ -106,7 +106,7 @@ function Test_getbufwintabinfo()
 endfunction
 
 function Test_get_buf_options()
-  let opts = getbufvar(bufnr('%'), '&')
+  let opts = bufnr()->getbufvar('&')
   call assert_equal(v:t_dict, type(opts))
   call assert_equal(8, opts.tabstop)
 endfunc
index e0dedfbf08bcde55713be5ceeaa96fed574b6790..c3589b45f0d49e6648d40cc087c5609de953cb51 100644 (file)
@@ -83,7 +83,7 @@ func Test_chdir_func()
   tabfirst
   call chdir('..')
   call assert_equal('y', fnamemodify(getcwd(1, 2), ':t'))
-  call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
+  call assert_equal('z', fnamemodify(3->getcwd(2), ':t'))
   tabnext | wincmd t
   eval '..'->chdir()
   call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t'))
index dd6ea9600c0fa47f52432a5f7eb3e94da76b5655..ce77c1f3c71dd45006a7e9102fc8fedc411fc954 100644 (file)
@@ -8,8 +8,8 @@ func Test_getchangelist()
 
   bwipe!
   enew
-  call assert_equal([], getchangelist(10))
-  call assert_equal([[], 0], getchangelist('%'))
+  call assert_equal([], 10->getchangelist())
+  call assert_equal([[], 0], getchangelist())
 
   call writefile(['line1', 'line2', 'line3'], 'Xfile1.txt')
   call writefile(['line1', 'line2', 'line3'], 'Xfile2.txt')
index f0d83c62d0229767da8e558297467b241b6b6fa5..6ed7848a2f4e13e9558690011c2373812f0ae6bf 100644 (file)
@@ -209,7 +209,7 @@ func Test_getcompletion()
   endif
   let groupcount = len(getcompletion('', 'event'))
   call assert_true(groupcount > 0)
-  let matchcount = len(getcompletion('File', 'event'))
+  let matchcount = len('File'->getcompletion('event'))
   call assert_true(matchcount > 0)
   call assert_true(groupcount > matchcount)
 
index 32569b6254e7964bba7424998d4c93ba733accfc..799642d3db95abcd5b0e005672e68718ee75dbdd 100644 (file)
@@ -199,11 +199,11 @@ func Test_edit_07()
   endfu
   au InsertCharPre <buffer> :call DoIt()
   call feedkeys("A\<f5>\<c-p>u\<cr>\<c-l>\<cr>", 'tx')
-  call assert_equal(["Jan\<c-l>",''], getline(1,'$'))
+  call assert_equal(["Jan\<c-l>",''], 1->getline('$'))
   %d
   call setline(1, 'J')
   call feedkeys("A\<f5>\<c-p>u\<down>\<c-l>\<cr>", 'tx')
-  call assert_equal(["January"], getline(1,'$'))
+  call assert_equal(["January"], 1->getline('$'))
 
   delfu ListMonths
   delfu DoIt
@@ -345,7 +345,7 @@ func Test_edit_12()
   call cursor(2, 4)
   call feedkeys("R^\<c-d>", 'tnix')
   call assert_equal(["\tabc", "def"], getline(1, '$'))
-  call assert_equal([0, 2, 2, 0], getpos('.'))
+  call assert_equal([0, 2, 2, 0], '.'->getpos())
   %d
   call setline(1, ["\tabc", "\t\tdef"])
   call cursor(2, 2)
index 21bb09a690189ea0c1cdb66ff32dc1a2f2b59001..ba61b17d5ca9e8a5d10b89f458001867f7ed3898 100644 (file)
@@ -11,7 +11,7 @@ endfunc
 
 func Test_getenv()
   unlet! $TESTENV
-  call assert_equal(v:null, getenv('TESTENV'))
+  call assert_equal(v:null, 'TESTENV'->getenv())
   let $TESTENV = 'foo'
   call assert_equal('foo', getenv('TESTENV'))
 endfunc
index 0dba6a708ac66f5b46dd839f7513e1b63bc73d79..39501684f0f2fc7532da421916288e3cbd007c54 100644 (file)
@@ -2,10 +2,10 @@
 
 func Test_file_perm()
   call assert_equal('', getfperm('Xtest'))
-  call assert_equal(0, setfperm('Xtest', 'r--------'))
+  call assert_equal(0, 'Xtest'->setfperm('r--------'))
 
   call writefile(['one'], 'Xtest')
-  call assert_true(len(getfperm('Xtest')) == 9)
+  call assert_true(len('Xtest'->getfperm()) == 9)
 
   call assert_equal(1, setfperm('Xtest', 'rwx------'))
   if has('win32')
index 3b61d68ebce09d9192660f73f7acf987601c8995..e9868c78873071ecef6f3112c939c91e1db6fe83 100644 (file)
@@ -31,7 +31,7 @@ func Test_var()
   let t:other = 777
   let def_list = [4, 5, 6, 7]
   tabrewind
-  call assert_equal([1, 2, 3], gettabvar(3, 'var_list'))
+  call assert_equal([1, 2, 3], 3->gettabvar('var_list'))
   call assert_equal([1, 2, 3], gettabvar(3, 'var_list', def_list))
   call assert_equal({'var_list': [1, 2, 3], 'other': 777}, gettabvar(3, ''))
   call assert_equal({'var_list': [1, 2, 3], 'other': 777},
@@ -61,7 +61,7 @@ func Test_var()
   let def_dict = {'dict2': 'newval'}
   wincmd b
   tabrewind
-  call assert_equal({'dict': 'tabwin'}, gettabwinvar(2, 3, 'var_dict'))
+  call assert_equal({'dict': 'tabwin'}, 2->gettabwinvar(3, 'var_dict'))
   call assert_equal({'dict': 'tabwin'},
                                \ gettabwinvar(2, 3, 'var_dict', def_dict))
   call assert_equal({'var_dict': {'dict': 'tabwin'}}, gettabwinvar(2, 3, ''))
index be1af5e705f829592dde15abefde20ba642e33e8..9cfbbe2029edb07906b5da7c30d369a6f58e4b30 100644 (file)
@@ -39,7 +39,7 @@ func Test_getjumplist()
   " Traverse the jump list and verify the results
   5
   exe "normal \<C-O>"
-  call assert_equal(2, getjumplist(1)[1])
+  call assert_equal(2, 1->getjumplist()[1])
   exe "normal 2\<C-O>"
   call assert_equal(0, getjumplist(1, 1)[1])
   exe "normal 3\<C-I>"
index 80d2a268603a43d7980b77847cc99d995a9d05d2..afe82f9a60e00342b8dfcdaff522e1bc56fbf75d 100644 (file)
@@ -22,7 +22,7 @@ endfunc
 
 func Test_put_char_block2()
   new
-  let a = [ getreg('a'), getregtype('a') ]
+  let a = [ 'a'->getreg(), 'a'->getregtype() ]
   call setreg('a', ' one ', 'v')
   call setline(1, ['Line 1', '', 'Line 3', ''])
   " visually select the first 3 lines and put register a over it
index e48e8876680f4965c023a0c6281f615f2ec0dfa5..8ec2a42c2456492cbd5698f64391190268511831 100644 (file)
@@ -10,7 +10,7 @@ func CheckFileTime(doSleep)
   let fl = ['Hello World!']
   for fname in fnames
     call writefile(fl, fname)
-    call add(times, getftime(fname))
+    call add(times, fname->getftime())
     if a:doSleep
       sleep 1
     endif
@@ -19,8 +19,8 @@ func CheckFileTime(doSleep)
   let time_correct = (times[0] <= times[1] && times[1] <= times[2])
   if a:doSleep || time_correct
     call assert_true(time_correct, printf('Expected %s <= %s <= %s', times[0], times[1], times[2]))
-    call assert_equal(strlen(fl[0] . "\n"), getfsize(fnames[0]))
-    call assert_equal('file', getftype(fnames[0]))
+    call assert_equal(strlen(fl[0] . "\n"), fnames[0]->getfsize())
+    call assert_equal('file', fnames[0]->getftype())
     call assert_equal('rw-', getfperm(fnames[0])[0:2])
     let result = 1
   endif
index cab79da1f5d77ef0f591382200dce44be774646d..8501ae0247c58a3a3ce8cc8089f9462a7f5e8007 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1925,
 /**/
     1924,
 /**/