]> granicus.if.org Git - vim/commitdiff
patch 8.1.1953: more functions can be used as a method v8.1.1953
authorBram Moolenaar <Bram@vim.org>
Sat, 31 Aug 2019 19:17:39 +0000 (21:17 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 31 Aug 2019 19:17:39 +0000 (21:17 +0200)
Problem:    More functions can be used as a method.
Solution:   Allow more functions to be used as a method.

13 files changed:
runtime/doc/eval.txt
src/evalfunc.c
src/testdir/test_blob.vim
src/testdir/test_breakindent.vim
src/testdir/test_delete.vim
src/testdir/test_functions.vim
src/testdir/test_getcwd.vim
src/testdir/test_history.vim
src/testdir/test_listdict.vim
src/testdir/test_syn_attr.vim
src/testdir/test_termcodes.vim
src/testdir/test_true_false.vim
src/version.c

index 1c792e27a16dfaf10e44ad1904b67708e6cccf02..ea4eb71c58976432e078140a37ff706661b4346d 100644 (file)
@@ -5774,6 +5774,9 @@ haslocaldir([{winnr} [, {tabnr}]])                        *haslocaldir()*
                        " tab page m
                        :echo haslocaldir(-1, m)
 <
+               Can also be used as a |method|: >
+                       GetWinnr()->haslocaldir()
+
 hasmapto({what} [, {mode} [, {abbr}]])                 *hasmapto()*
                The result is a Number, which is 1 if there is a mapping that
                contains {what} in somewhere in the rhs (what it is mapped to)
@@ -5802,6 +5805,9 @@ hasmapto({what} [, {mode} [, {abbr}]])                    *hasmapto()*
 <              This installs the mapping to "\ABCdoit" only if there isn't
                already a mapping to "\ABCdoit".
 
+               Can also be used as a |method|: >
+                       GetRHS()->hasmapto()
+
 histadd({history}, {item})                             *histadd()*
                Add the String {item} to the history {history} which can be
                one of:                                 *hist-names*
@@ -5823,6 +5829,10 @@ histadd({history}, {item})                               *histadd()*
                        :let date=input("Enter date: ")
 <              This function is not available in the |sandbox|.
 
+               Can also be used as a |method|, the base is used for the
+               second argument: >
+                       GetPattern()->histadd('search')
+
 histdel({history} [, {item}])                          *histdel()*
                Clear {history}, i.e. delete all its entries.  See |hist-names|
                for the possible values of {history}.
@@ -5854,6 +5864,9 @@ histdel({history} [, {item}])                             *histdel()*
                the "n" command and 'hlsearch': >
                        :call histdel("search", -1)
                        :let @/ = histget("search", -1)
+<
+               Can also be used as a |method|: >
+                       GetHistory()->histdel()
 
 histget({history} [, {index}])                         *histget()*
                The result is a String, the entry with Number {index} from
@@ -5870,6 +5883,9 @@ histget({history} [, {index}])                            *histget()*
                the {num}th entry from the output of |:history|. >
                        :command -nargs=1 H execute histget("cmd", 0+<args>)
 <
+               Can also be used as a |method|: >
+                       GetHistory()->histget()
+
 histnr({history})                                      *histnr()*
                The result is the Number of the current entry in {history}.
                See |hist-names| for the possible values of {history}.
@@ -5877,6 +5893,9 @@ histnr({history})                                 *histnr()*
 
                Example: >
                        :let inp_index = histnr("expr")
+
+<              Can also be used as a |method|: >
+                       GetHistory()->histnr()
 <
 hlexists({name})                                       *hlexists()*
                The result is a Number, which is non-zero if a highlight group
@@ -5887,6 +5906,9 @@ hlexists({name})                                  *hlexists()*
                                                        *highlight_exists()*
                Obsolete name: highlight_exists().
 
+               Can also be used as a |method|: >
+                       GetName()->hlexists()
+<
                                                        *hlID()*
 hlID({name})   The result is a Number, which is the ID of the highlight group
                with name {name}.  When the highlight group doesn't exist,
@@ -5898,6 +5920,9 @@ hlID({name})      The result is a Number, which is the ID of the highlight group
 <                                                      *highlightID()*
                Obsolete name: highlightID().
 
+               Can also be used as a |method|: >
+                       GetName()->hlID()
+
 hostname()                                             *hostname()*
                The result is a String, which is the name of the machine on
                which Vim is currently running.  Machine names greater than
@@ -5922,6 +5947,9 @@ iconv({expr}, {from}, {to})                               *iconv()*
                from/to UCS-2 is automatically changed to use UTF-8.  You
                cannot use UCS-2 in a string anyway, because of the NUL bytes.
 
+               Can also be used as a |method|: >
+                       GetText()->iconv('latin1', 'utf-8')
+<
                                                        *indent()*
 indent({lnum}) The result is a Number, which is indent of line {lnum} in the
                current buffer.  The indent is counted in spaces, the value
@@ -5929,6 +5957,8 @@ indent({lnum})    The result is a Number, which is indent of line {lnum} in the
                |getline()|.
                When {lnum} is invalid -1 is returned.
 
+               Can also be used as a |method|: >
+                       GetLnum()->indent()
 
 index({object}, {expr} [, {start} [, {ic}]])                   *index()*
                If {object} is a |List| return the lowest index where the item
@@ -5949,6 +5979,8 @@ index({object}, {expr} [, {start} [, {ic}]])                      *index()*
                        :let idx = index(words, "the")
                        :if index(numbers, 123) >= 0
 
+<              Can also be used as a |method|: >
+                       GetObject()->index(what)
 
 input({prompt} [, {text} [, {completion}]])            *input()*
                The result is a String, which is whatever the user typed on
@@ -5995,6 +6027,9 @@ input({prompt} [, {text} [, {completion}]])               *input()*
                        :  call inputrestore()
                        :endfunction
 
+<              Can also be used as a |method|: >
+                       GetPrompt()->input()
+
 inputdialog({prompt} [, {text} [, {cancelreturn}]])            *inputdialog()*
                Like |input()|, but when the GUI is running and text dialogs
                are supported, a dialog window pops up to input the text.
@@ -6009,6 +6044,9 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]])               *inputdialog()*
                <Esc> works like pressing the Cancel button.
                NOTE: Command-line completion is not supported.
 
+               Can also be used as a |method|: >
+                       GetPrompt()->inputdialog()
+
 inputlist({textlist})                                  *inputlist()*
                {textlist} must be a |List| of strings.  This |List| is
                displayed, one string per line.  The user will be prompted to
@@ -6025,6 +6063,9 @@ inputlist({textlist})                                     *inputlist()*
                        let color = inputlist(['Select color:', '1. red',
                                \ '2. green', '3. blue'])
 
+<              Can also be used as a |method|: >
+                       GetChoices()->inputlist()
+
 inputrestore()                                         *inputrestore()*
                Restore typeahead that was saved with a previous |inputsave()|.
                Should be called the same number of times inputsave() is
@@ -6050,6 +6091,9 @@ inputsecret({prompt} [, {text}])                  *inputsecret()*
                typed on the command-line in response to the issued prompt.
                NOTE: Command-line completion is not supported.
 
+               Can also be used as a |method|: >
+                       GetPrompt()->inputsecret()
+
 insert({object}, {item} [, {idx}])                     *insert()*
                When {object} is a |List| or a |Blob| insert {item} at the start
                of it.
@@ -6083,6 +6127,9 @@ isdirectory({directory})                          *isdirectory()*
                exist, or isn't a directory, the result is |FALSE|.  {directory}
                is any expression, which is used as a String.
 
+               Can also be used as a |method|: >
+                       GetName()->isdirectory()
+
 isinf({expr})                                          *isinf()*
                Return 1 if {expr} is a positive infinity, or -1 a negative
                infinity, otherwise 0. >
@@ -6109,6 +6156,9 @@ islocked({expr})                                  *islocked()* *E786*
 <              When {expr} is a variable that does not exist you get an error
                message.  Use |exists()| to check for existence.
 
+               Can also be used as a |method|: >
+                       GetName()->islocked()
+
 isnan({expr})                                          *isnan()*
                Return |TRUE| if {expr} is a float with value NaN. >
                        echo isnan(0.0 / 0.0)
index 4561f08a341392914fa72b5b6d3c840a2b52e128..dda98748a288f2f9e689d3eeefee22ee20b91946 100644 (file)
@@ -595,33 +595,33 @@ static funcentry_T global_functions[] =
     {"globpath",       2, 5, FEARG_2,    f_globpath},
     {"has",            1, 1, 0,          f_has},
     {"has_key",                2, 2, FEARG_1,    f_has_key},
-    {"haslocaldir",    0, 2, 0,          f_haslocaldir},
-    {"hasmapto",       1, 3, 0,          f_hasmapto},
-    {"highlightID",    1, 1, 0,          f_hlID},      // obsolete
-    {"highlight_exists",1, 1, 0,         f_hlexists},  // obsolete
-    {"histadd",                2, 2, 0,          f_histadd},
-    {"histdel",                1, 2, 0,          f_histdel},
-    {"histget",                1, 2, 0,          f_histget},
-    {"histnr",         1, 1, 0,          f_histnr},
-    {"hlID",           1, 1, 0,          f_hlID},
-    {"hlexists",       1, 1, 0,          f_hlexists},
+    {"haslocaldir",    0, 2, FEARG_1,    f_haslocaldir},
+    {"hasmapto",       1, 3, FEARG_1,    f_hasmapto},
+    {"highlightID",    1, 1, FEARG_1,    f_hlID},      // obsolete
+    {"highlight_exists",1, 1, FEARG_1,   f_hlexists},  // obsolete
+    {"histadd",                2, 2, FEARG_2,    f_histadd},
+    {"histdel",                1, 2, FEARG_1,    f_histdel},
+    {"histget",                1, 2, FEARG_1,    f_histget},
+    {"histnr",         1, 1, FEARG_1,    f_histnr},
+    {"hlID",           1, 1, FEARG_1,    f_hlID},
+    {"hlexists",       1, 1, FEARG_1,    f_hlexists},
     {"hostname",       0, 0, 0,          f_hostname},
-    {"iconv",          3, 3, 0,          f_iconv},
-    {"indent",         1, 1, 0,          f_indent},
+    {"iconv",          3, 3, FEARG_1,    f_iconv},
+    {"indent",         1, 1, FEARG_1,    f_indent},
     {"index",          2, 4, FEARG_1,    f_index},
-    {"input",          1, 3, 0,          f_input},
-    {"inputdialog",    1, 3, 0,          f_inputdialog},
-    {"inputlist",      1, 1, 0,          f_inputlist},
+    {"input",          1, 3, FEARG_1,    f_input},
+    {"inputdialog",    1, 3, FEARG_1,    f_inputdialog},
+    {"inputlist",      1, 1, FEARG_1,    f_inputlist},
     {"inputrestore",   0, 0, 0,          f_inputrestore},
     {"inputsave",      0, 0, 0,          f_inputsave},
-    {"inputsecret",    1, 2, 0,          f_inputsecret},
+    {"inputsecret",    1, 2, FEARG_1,    f_inputsecret},
     {"insert",         2, 3, FEARG_1,    f_insert},
     {"invert",         1, 1, FEARG_1,    f_invert},
-    {"isdirectory",    1, 1, 0,          f_isdirectory},
+    {"isdirectory",    1, 1, FEARG_1,    f_isdirectory},
 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
     {"isinf",          1, 1, FEARG_1,    f_isinf},
 #endif
-    {"islocked",       1, 1, 0,          f_islocked},
+    {"islocked",       1, 1, FEARG_1,    f_islocked},
 #if defined(FEAT_FLOAT) && defined(HAVE_MATH_H)
     {"isnan",          1, 1, FEARG_1,    f_isnan},
 #endif
index 273465d53101a1bf4cd9f3e69b4e8f561e8c67a8..a4e9bea304d32728a4d591d2449d63df40193fec 100644 (file)
@@ -278,7 +278,7 @@ func Test_blob_index()
   call assert_equal(2, index(0zDEADBEEF, 0xBE))
   call assert_equal(-1, index(0zDEADBEEF, 0))
   call assert_equal(2, index(0z11111111, 0x11, 2))
-  call assert_equal(3, index(0z11110111, 0x11, 2))
+  call assert_equal(3, 0z11110111->index(0x11, 2))
   call assert_equal(2, index(0z11111111, 0x11, -2))
   call assert_equal(3, index(0z11110111, 0x11, -2))
 
index 5b8971e7ec1f560b1a2b6e321f82e48ef5bb8f41..65e258af54144da177078f0baa47b8b60c0de4ce 100644 (file)
@@ -411,7 +411,7 @@ func Test_breakindent11()
   " test strdisplaywidth()
   call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
   let text = getline(2)
-  let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
+  let width = strlen(text[1:]) + indent(2) + strlen(&sbr) * 3 " text wraps 3 times
   call assert_equal(width, strdisplaywidth(text))
   call s:close_windows('set sbr=')
 endfunc
@@ -423,7 +423,7 @@ func Test_breakindent11_vartabs()
   " test strdisplaywidth()
   call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
   let text = getline(2)
-  let width = strlen(text[1:])+indent(2)+strlen(&sbr)*3 " text wraps 3 times
+  let width = strlen(text[1:]) + 2->indent() + strlen(&sbr) * 3 " text wraps 3 times
   call assert_equal(width, strdisplaywidth(text))
   call s:close_windows('set sbr= vts&')
 endfunc
index b3e153e5b768b52cfd665b7a7602c79016e5e8ac..0ab516489ab0bf058b0b5e7e0e47f2360ca75298 100644 (file)
@@ -32,7 +32,7 @@ func Test_recursive_delete()
   call assert_equal(['a', 'b'], readfile('Xdir1/Xfile'))
   call assert_true(isdirectory('Xdir1/subdir'))
   call assert_equal(['a', 'b'], readfile('Xdir1/subdir/Xfile'))
-  call assert_true(isdirectory('Xdir1/empty'))
+  call assert_true('Xdir1/empty'->isdirectory())
   call assert_equal(0, delete('Xdir1', 'rf'))
   call assert_false(isdirectory('Xdir1'))
   call assert_equal(-1, delete('Xdir1', 'd'))
index 1352eaa5df88533341d87d324af38425c2f66fc7..2ffdc24fb721caf889948635e7c88de756b920f7 100644 (file)
@@ -1069,7 +1069,7 @@ endfunc
 
 func Test_hlexists()
   call assert_equal(0, hlexists('does_not_exist'))
-  call assert_equal(0, hlexists('Number'))
+  call assert_equal(0, 'Number'->hlexists())
   call assert_equal(0, highlight_exists('does_not_exist'))
   call assert_equal(0, highlight_exists('Number'))
   syntax on
@@ -1102,7 +1102,7 @@ endfunc
 func Test_inputlist()
   call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx')
   call assert_equal(1, c)
-  call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>2\<cr>", 'tx')
+  call feedkeys(":let c = ['Select color:', '1. red', '2. green', '3. blue']->inputlist()\<cr>2\<cr>", 'tx')
   call assert_equal(2, c)
   call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx')
   call assert_equal(3, c)
@@ -1279,7 +1279,7 @@ func Test_reg_executing_and_recording()
   let g:regs = []
   func TestFunc() abort
     let g:regs += [reg_executing()]
-    let g:typed = input('?')
+    let g:typed = '?'->input()
     let g:regs += [reg_executing()]
   endfunc
   call feedkeys("@qy\<CR>", 'xt')
@@ -1295,6 +1295,25 @@ func Test_reg_executing_and_recording()
   unlet s:reg_stat
 endfunc
 
+func Test_inputsecret()
+  map W :call TestFunc()<CR>
+  let @q = "W"
+  let g:typed1 = ''
+  let g:typed2 = ''
+  let g:regs = []
+  func TestFunc() abort
+    let g:typed1 = '?'->inputsecret()
+    let g:typed2 = inputsecret('password: ')
+  endfunc
+  call feedkeys("@qsomething\<CR>else\<CR>", 'xt')
+  call assert_equal("something", g:typed1)
+  call assert_equal("else", g:typed2)
+  delfunc TestFunc
+  unmap W
+  unlet g:typed1
+  unlet g:typed2
+endfunc
+
 func Test_libcall_libcallnr()
   if !has('libcall')
     return
index 50c940febee38fd17f93fbdbfadb3c858c9d965f..e7325466118b6130e97a18c003e8f1fc98977ef2 100644 (file)
@@ -17,7 +17,7 @@ func GetCwdInfo(win, tab)
     let lflag = haslocaldir(a:win)
   else
     let dirname = fnamemodify(getcwd(a:win, a:tab), mod)
-    let lflag = haslocaldir(a:win, a:tab)
+    let lflag = a:win->haslocaldir(a:tab)
   endif
   return bufname . ' ' . dirname . ' ' . lflag
 endfunc
index 215fc0a55a76953053a64fed4167f90562acdd38..2d53474bb38467a522d54066bdd9c64eb8af2950 100644 (file)
@@ -12,7 +12,7 @@ function History_Tests(hist)
   call assert_equal(-1, histnr(a:hist))
   call assert_equal('', histget(a:hist))
 
-  call assert_true(histadd(a:hist, 'ls'))
+  call assert_true('ls'->histadd(a:hist))
   call assert_true(histadd(a:hist, 'buffers'))
   call assert_equal('buffers', histget(a:hist))
   call assert_equal('ls', histget(a:hist, -2))
@@ -21,14 +21,14 @@ function History_Tests(hist)
   call assert_equal('', histget(a:hist, -5))
   call assert_equal(2, histnr(a:hist))
   call assert_true(histdel(a:hist, 2))
-  call assert_false(histdel(a:hist, 7))
+  call assert_false(a:hist->histdel(7))
   call assert_equal(1, histnr(a:hist))
   call assert_equal('ls', histget(a:hist, -1))
 
   call assert_true(histadd(a:hist, 'buffers'))
   call assert_true(histadd(a:hist, 'ls'))
-  call assert_equal('ls', histget(a:hist, -1))
-  call assert_equal(4, histnr(a:hist))
+  call assert_equal('ls', a:hist->histget(-1))
+  call assert_equal(4, a:hist->histnr())
 
   let a=execute('history ' . a:hist)
   call assert_match("^\n      #  \\S* history\n      3  buffers\n>     4  ls$", a)
index 961f27469ba02f013ca5dd256a330ac4744f38c0..557687b822a51ed61a17a46dc2a4d95fb724d431 100644 (file)
@@ -565,7 +565,7 @@ func Test_lockvar_script_autoload()
   set rtp+=./sautest
   lockvar g:footest#x
   unlockvar g:footest#x
-  call assert_equal(-1, islocked('g:footest#x'))
+  call assert_equal(-1, 'g:footest#x'->islocked())
   call assert_equal(0, exists('g:footest#x'))
   call assert_equal(1, g:footest#x)
   let &rtp = old_rtp
index 27f9fc0dde69ca6342f2bb64c0cfc4a26fb0aca8..cc2067818c98394fcc34166b1619bcbf3e7ac005 100644 (file)
@@ -3,7 +3,7 @@
 func Test_missing_attr()
   hi Mine term=bold cterm=italic
   call assert_equal('Mine', synIDattr(hlID("Mine"), "name"))
-  call assert_equal('', synIDattr(hlID("Mine"), "bg", 'term'))
+  call assert_equal('', synIDattr("Mine"->hlID(), "bg", 'term'))
   call assert_equal('1', synIDattr(hlID("Mine"), "bold", 'term'))
   call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm'))
   hi Mine term=reverse cterm=inverse
@@ -12,7 +12,7 @@ func Test_missing_attr()
   hi Mine term=underline cterm=standout gui=undercurl
   call assert_equal('1', synIDattr(hlID("Mine"), "underline", 'term'))
   call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm'))
-  call assert_equal('1', synIDattr(hlID("Mine"), "undercurl", 'gui'))
+  call assert_equal('1', synIDattr("Mine"->hlID(), "undercurl", 'gui'))
   hi Mine term=NONE cterm=NONE gui=NONE
   call assert_equal('', synIDattr(hlID("Mine"), "bold", 'term'))
   call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm'))
index 75eaa7b8d731936e8a73e87e7e8c431f2c6961d3..7b71d60ae9aea70aec1ffbbbd4a74ef340de4ab6 100644 (file)
@@ -33,7 +33,7 @@ func TerminalEscapeCode(code, row, col, m)
     " need to use byte encoding here.
     let str = list2str([a:code + 0x20, a:col + 0x20, a:row + 0x20])
     if has('iconv')
-      let bytes = iconv(str, 'utf-8', 'latin1')
+      let bytes = str->iconv('utf-8', 'latin1')
     else
       " Hopefully the numbers are not too big.
       let bytes = str
index a23f2cc4b130d4915ed8a2cce680a62dad5ac8c9..346b43243b60140ce06a90a850390ef39a4de894 100644 (file)
@@ -100,7 +100,7 @@ func Test_true_false_arg()
   call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff")
   call Try_arg_true_false('FilterMapArg(maparg("asdf", "i", 1, %v%))', "asdff", {'rhs': 'asdff'})
 
-  call Try_arg_true_false('hasmapto("asdf", "i", %v%)', 0, 1)
+  call Try_arg_true_false('"asdf"->hasmapto("i", %v%)', 0, 1)
 
   new colored
   call setline(1, '<here>')
index 067e176d813a4c3754cda6cf59f08e07c4c8517a..aec889d56a7fc81e8584d3b3417c134c3ff10ccb 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1953,
 /**/
     1952,
 /**/