Patch 8.1.1961
Problem:    More functions can be used as a method.
Solution:   Allow more functions to be used as a method.  Add a test for
            mapcheck().
Files:      runtime/doc/eval.txt, src/evalfunc.c, src/testdir/test70.in,
            src/testdir/test_functions.vim, src/testdir/test_getcwd.vim,
            src/testdir/test_maparg.vim, src/testdir/test_match.vim


*** ../vim-8.1.1960/runtime/doc/eval.txt        2019-08-31 22:16:30.770127033 
+0200
--- runtime/doc/eval.txt        2019-09-01 19:13:56.334609314 +0200
***************
*** 6691,6696 ****
--- 6699,6706 ----
                mapped, and have it do the original mapping too.  Sketch: >
                        exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
  
+ <             Can also be used as a |method|: >
+                       GetKey()->maparg('n')
  
  mapcheck({name} [, {mode} [, {abbr}]])                        *mapcheck()*
                Check if there is a mapping that matches with {name} in mode
***************
*** 6725,6730 ****
--- 6735,6743 ----
  <             This avoids adding the "_vv" mapping when there already is a
                mapping for "_v" or for "_vvv".
  
+               Can also be used as a |method|: >
+                       GetKey()->mapcheck('n')
+ 
  match({expr}, {pat} [, {start} [, {count}]])                  *match()*
                When {expr} is a |List| then this returns the index of the
                first item where {pat} matches.  Each item is used as a
***************
*** 6783,6788 ****
--- 6796,6804 ----
                the pattern.  'smartcase' is NOT used.  The matching is always
                done like 'magic' is set and 'cpoptions' is empty.
  
+               Can also be used as a |method|: >
+                       GetList()->match('word')
+ <
                                *matchadd()* *E798* *E799* *E801* *E957*
  matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
                Defines a pattern to be highlighted in the current window (a
***************
*** 6838,6843 ****
--- 6854,6862 ----
                available from |getmatches()|.  All matches can be deleted in
                one operation by |clearmatches()|.
  
+               Can also be used as a |method|: >
+                       GetGroup()->matchadd('TODO')
+ <
                                                        *matchaddpos()*
  matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
                Same as |matchadd()|, but requires a list of positions {pos}
***************
*** 6872,6877 ****
--- 6891,6899 ----
                |getmatches()| with an entry "pos1", "pos2", etc., with the
                value a list like the {pos} item.
  
+               Can also be used as a |method|: >
+                       GetGroup()->matchaddpos([23, 11])
+ 
  matcharg({nr})                                                        
*matcharg()*
                Selects the {nr} match item, as set with a |:match|,
                |:2match| or |:3match| command.
***************
*** 6884,6889 ****
--- 6906,6914 ----
                Highlighting matches using the |:match| commands are limited
                to three matches. |matchadd()| does not have this limitation.
  
+               Can also be used as a |method|: >
+                       GetMatch()->matcharg()
+ 
  matchdelete({id} [, {win})                   *matchdelete()* *E802* *E803*
                Deletes a match with ID {id} previously defined by |matchadd()|
                or one of the |:match| commands.  Returns 0 if successful,
***************
*** 6892,6897 ****
--- 6917,6925 ----
                If {win} is specified, use the window with this number or
                window ID instead of the current window.
  
+               Can also be used as a |method|: >
+                       GetMatch()->matchdelete()
+ 
  matchend({expr}, {pat} [, {start} [, {count}]])                       
*matchend()*
                Same as |match()|, but return the index of first character
                after the match.  Example: >
***************
*** 6911,6916 ****
--- 6939,6947 ----
  <             result is "-1".
                When {expr} is a |List| the result is equal to |match()|.
  
+               Can also be used as a |method|: >
+                       GetText()->matchend('word')
+ 
  matchlist({expr}, {pat} [, {start} [, {count}]])              *matchlist()*
                Same as |match()|, but return a |List|.  The first item in the
                list is the matched string, same as what matchstr() would
***************
*** 6921,6926 ****
--- 6952,6960 ----
  <             Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
                When there is no match an empty list is returned.
  
+               Can also be used as a |method|: >
+                       GetList()->matchlist('word')
+ 
  matchstr({expr}, {pat} [, {start} [, {count}]])                       
*matchstr()*
                Same as |match()|, but return the matched string.  Example: >
                        :echo matchstr("testing", "ing")
***************
*** 6934,6939 ****
--- 6968,6976 ----
                When {expr} is a |List| then the matching item is returned.
                The type isn't changed, it's not necessarily a String.
  
+               Can also be used as a |method|: >
+                       GetText()->matchstr('word')
+ 
  matchstrpos({expr}, {pat} [, {start} [, {count}]])            *matchstrpos()*
                Same as |matchstr()|, but return the matched string, the start
                position and the end position of the match.  Example: >
***************
*** 6952,6957 ****
--- 6989,6996 ----
  <             result is ["x", 1, 2, 3].
                The type isn't changed, it's not necessarily a String.
  
+               Can also be used as a |method|: >
+                       GetText()->matchstrpos('word')
                                                        *max()*
  max({expr})   Return the maximum value of all items in {expr}.
                {expr} can be a list or a dictionary.  For a dictionary,
***************
*** 7002,7007 ****
--- 7041,7049 ----
  
                Not available on all systems.  To check use: >
                        :if exists("*mkdir")
+ 
+ <             Can also be used as a |method|: >
+                       GetName()->mkdir()
  <
                                                        *mode()*
  mode([expr])  Return a string that indicates the current mode.
***************
*** 7047,7052 ****
--- 7089,7097 ----
                the leading character(s).
                Also see |visualmode()|.
  
+               Can also be used as a |method|: >
+                       DoFull()->mode()
+ 
  mzeval({expr})                                                        
*mzeval()*
                Evaluate MzScheme expression {expr} and return its result
                converted to Vim data structures.
***************
*** 7062,7067 ****
--- 7107,7115 ----
                    :echo mzeval("l")
                    :echo mzeval("h")
  <
+               Can also be used as a |method|: >
+                       GetExpr()->mzeval()
+ <
                {only available when compiled with the |+mzscheme| feature}
  
  nextnonblank({lnum})                                  *nextnonblank()*
*** ../vim-8.1.1960/src/evalfunc.c      2019-09-01 17:52:27.334698921 +0200
--- src/evalfunc.c      2019-09-01 19:15:00.406353348 +0200
***************
*** 655,677 ****
      {"luaeval",               1, 2, FEARG_1,    f_luaeval},
  #endif
      {"map",           2, 2, FEARG_1,    f_map},
!     {"maparg",                1, 4, 0,          f_maparg},
!     {"mapcheck",      1, 3, 0,          f_mapcheck},
!     {"match",         2, 4, 0,          f_match},
!     {"matchadd",      2, 5, 0,          f_matchadd},
!     {"matchaddpos",   2, 5, 0,          f_matchaddpos},
!     {"matcharg",      1, 1, 0,          f_matcharg},
!     {"matchdelete",   1, 2, 0,          f_matchdelete},
!     {"matchend",      2, 4, 0,          f_matchend},
!     {"matchlist",     2, 4, 0,          f_matchlist},
!     {"matchstr",      2, 4, 0,          f_matchstr},
!     {"matchstrpos",   2, 4, 0,          f_matchstrpos},
      {"max",           1, 1, FEARG_1,    f_max},
      {"min",           1, 1, FEARG_1,    f_min},
!     {"mkdir",         1, 3, 0,          f_mkdir},
!     {"mode",          0, 1, 0,          f_mode},
  #ifdef FEAT_MZSCHEME
!     {"mzeval",                1, 1, 0,          f_mzeval},
  #endif
      {"nextnonblank",  1, 1, 0,          f_nextnonblank},
      {"nr2char",               1, 2, 0,          f_nr2char},
--- 655,677 ----
      {"luaeval",               1, 2, FEARG_1,    f_luaeval},
  #endif
      {"map",           2, 2, FEARG_1,    f_map},
!     {"maparg",                1, 4, FEARG_1,    f_maparg},
!     {"mapcheck",      1, 3, FEARG_1,    f_mapcheck},
!     {"match",         2, 4, FEARG_1,    f_match},
!     {"matchadd",      2, 5, FEARG_1,    f_matchadd},
!     {"matchaddpos",   2, 5, FEARG_1,    f_matchaddpos},
!     {"matcharg",      1, 1, FEARG_1,    f_matcharg},
!     {"matchdelete",   1, 2, FEARG_1,    f_matchdelete},
!     {"matchend",      2, 4, FEARG_1,    f_matchend},
!     {"matchlist",     2, 4, FEARG_1,    f_matchlist},
!     {"matchstr",      2, 4, FEARG_1,    f_matchstr},
!     {"matchstrpos",   2, 4, FEARG_1,    f_matchstrpos},
      {"max",           1, 1, FEARG_1,    f_max},
      {"min",           1, 1, FEARG_1,    f_min},
!     {"mkdir",         1, 3, FEARG_1,    f_mkdir},
!     {"mode",          0, 1, FEARG_1,    f_mode},
  #ifdef FEAT_MZSCHEME
!     {"mzeval",                1, 1, FEARG_1,    f_mzeval},
  #endif
      {"nextnonblank",  1, 1, 0,          f_nextnonblank},
      {"nr2char",               1, 2, 0,          f_nr2char},
*** ../vim-8.1.1960/src/testdir/test70.in       2013-01-31 21:00:06.000000000 
+0100
--- src/testdir/test70.in       2019-09-01 19:14:34.254458433 +0200
***************
*** 25,31 ****
  :mz (vim-set-buff-line (vim-eval "line('.')") "1 changed line 1")
  :" scalar test
  :let tmp_string = mzeval('"string"')
! :let tmp_1000 = mzeval('1000')
  :if tmp_string . tmp_1000 == "string1000"
  :let scalar_res = "OK"
  :else
--- 25,31 ----
  :mz (vim-set-buff-line (vim-eval "line('.')") "1 changed line 1")
  :" scalar test
  :let tmp_string = mzeval('"string"')
! :let tmp_1000 = '1000'->mzeval()
  :if tmp_string . tmp_1000 == "string1000"
  :let scalar_res = "OK"
  :else
*** ../vim-8.1.1960/src/testdir/test_functions.vim      2019-08-31 
22:16:30.774127008 +0200
--- src/testdir/test_functions.vim      2019-09-01 19:13:15.846768301 +0200
***************
*** 655,662 ****
    exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u"
    call assert_equal('R-Rc', g:current_modes)
  
!   call assert_equal('n', mode(0))
!   call assert_equal('n', mode(1))
  
    " i_CTRL-O
    exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
--- 655,662 ----
    exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u"
    call assert_equal('R-Rc', g:current_modes)
  
!   call assert_equal('n', 0->mode())
!   call assert_equal('n', 1->mode())
  
    " i_CTRL-O
    exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
***************
*** 793,799 ****
  
  func Test_match_func()
    call assert_equal(4,  match('testing', 'ing'))
!   call assert_equal(4,  match('testing', 'ing', 2))
    call assert_equal(-1, match('testing', 'ing', 5))
    call assert_equal(-1, match('testing', 'ing', 8))
    call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing'))
--- 793,799 ----
  
  func Test_match_func()
    call assert_equal(4,  match('testing', 'ing'))
!   call assert_equal(4,  'testing'->match('ing', 2))
    call assert_equal(-1, match('testing', 'ing', 5))
    call assert_equal(-1, match('testing', 'ing', 8))
    call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing'))
***************
*** 802,808 ****
  
  func Test_matchend()
    call assert_equal(7,  matchend('testing', 'ing'))
!   call assert_equal(7,  matchend('testing', 'ing', 2))
    call assert_equal(-1, matchend('testing', 'ing', 5))
    call assert_equal(-1, matchend('testing', 'ing', 8))
    call assert_equal(match(['vim', 'testing', 'execute'], 'ing'), 
matchend(['vim', 'testing', 'execute'], 'ing'))
--- 802,808 ----
  
  func Test_matchend()
    call assert_equal(7,  matchend('testing', 'ing'))
!   call assert_equal(7,  'testing'->matchend('ing', 2))
    call assert_equal(-1, matchend('testing', 'ing', 5))
    call assert_equal(-1, matchend('testing', 'ing', 8))
    call assert_equal(match(['vim', 'testing', 'execute'], 'ing'), 
matchend(['vim', 'testing', 'execute'], 'ing'))
***************
*** 811,823 ****
  
  func Test_matchlist()
    call assert_equal(['acd', 'a', '', 'c', 'd', '', '', '', '', ''],  
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)'))
!   call assert_equal(['d', '', '', '', 'd', '', '', '', '', ''],  
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2))
    call assert_equal([],  matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4))
  endfunc
  
  func Test_matchstr()
    call assert_equal('ing',  matchstr('testing', 'ing'))
!   call assert_equal('ing',  matchstr('testing', 'ing', 2))
    call assert_equal('', matchstr('testing', 'ing', 5))
    call assert_equal('', matchstr('testing', 'ing', 8))
    call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing'))
--- 811,823 ----
  
  func Test_matchlist()
    call assert_equal(['acd', 'a', '', 'c', 'd', '', '', '', '', ''],  
matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)'))
!   call assert_equal(['d', '', '', '', 'd', '', '', '', '', ''],  
'acd'->matchlist('\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2))
    call assert_equal([],  matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4))
  endfunc
  
  func Test_matchstr()
    call assert_equal('ing',  matchstr('testing', 'ing'))
!   call assert_equal('ing',  'testing'->matchstr('ing', 2))
    call assert_equal('', matchstr('testing', 'ing', 5))
    call assert_equal('', matchstr('testing', 'ing', 8))
    call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing'))
***************
*** 826,832 ****
  
  func Test_matchstrpos()
    call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
!   call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing', 2))
    call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 5))
    call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8))
    call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing', 
'execute'], 'ing'))
--- 826,832 ----
  
  func Test_matchstrpos()
    call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
!   call assert_equal(['ing', 4, 7], 'testing'->matchstrpos('ing', 2))
    call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 5))
    call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8))
    call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing', 
'execute'], 'ing'))
*** ../vim-8.1.1960/src/testdir/test_getcwd.vim 2019-08-31 21:17:35.594131454 
+0200
--- src/testdir/test_getcwd.vim 2019-09-01 19:11:24.179194084 +0200
***************
*** 35,41 ****
    " we start from a clean state.
    call delete("Xtopdir", "rf")
    new
!   call mkdir('Xtopdir')
    cd Xtopdir
    let g:topdir = getcwd()
    call mkdir('Xdir1')
--- 35,41 ----
    " we start from a clean state.
    call delete("Xtopdir", "rf")
    new
!   eval 'Xtopdir'->mkdir()
    cd Xtopdir
    let g:topdir = getcwd()
    call mkdir('Xdir1')
*** ../vim-8.1.1960/src/testdir/test_maparg.vim 2019-07-27 21:05:16.683942730 
+0200
--- src/testdir/test_maparg.vim 2019-09-01 18:54:54.285025681 +0200
***************
*** 1,5 ****
--- 1,6 ----
  " Tests for maparg().
  " Also test utf8 map with a 0x80 byte.
+ " Also test mapcheck()
  
  function s:SID()     
    return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
***************
*** 22,28 ****
    call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
          \ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
        \ 'rhs': 'isbar', 'buffer': 1},
!         \ maparg('bar', '', 0, 1))
    let lnum = expand('<sflnum>')
    map <buffer> <nowait> foo bar
    call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
--- 23,29 ----
    call assert_equal({'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v',
          \ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
        \ 'rhs': 'isbar', 'buffer': 1},
!         \ 'bar'->maparg('', 0, 1))
    let lnum = expand('<sflnum>')
    map <buffer> <nowait> foo bar
    call assert_equal({'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ',
***************
*** 46,51 ****
--- 47,91 ----
    unmap abc
  endfunction
  
+ func Test_mapcheck()
+   call assert_equal('', mapcheck('a'))
+   call assert_equal('', mapcheck('abc'))
+   call assert_equal('', mapcheck('ax'))
+   call assert_equal('', mapcheck('b'))
+ 
+   map a something
+   call assert_equal('something', mapcheck('a'))
+   call assert_equal('something', mapcheck('a', 'n'))
+   call assert_equal('', mapcheck('a', 'c'))
+   call assert_equal('', mapcheck('a', 'i'))
+   call assert_equal('something', 'abc'->mapcheck())
+   call assert_equal('something', 'ax'->mapcheck())
+   call assert_equal('', mapcheck('b'))
+   unmap a
+ 
+   map ab foobar
+   call assert_equal('foobar', mapcheck('a'))
+   call assert_equal('foobar', mapcheck('abc'))
+   call assert_equal('', mapcheck('ax'))
+   call assert_equal('', mapcheck('b'))
+   unmap ab
+ 
+   map abc barfoo
+   call assert_equal('barfoo', mapcheck('a'))
+   call assert_equal('barfoo', mapcheck('a', 'n', 0))
+   call assert_equal('', mapcheck('a', 'n', 1))
+   call assert_equal('barfoo', mapcheck('abc'))
+   call assert_equal('', mapcheck('ax'))
+   call assert_equal('', mapcheck('b'))
+   unmap abc
+ 
+   abbr ab abbrev
+   call assert_equal('abbrev', mapcheck('a', 'i', 1))
+   call assert_equal('', mapcheck('a', 'n', 1))
+   call assert_equal('', mapcheck('a', 'i', 0))
+   unabbr ab
+ endfunc
+ 
  function Test_range_map()
    new
    " Outside of the range, minimum
*** ../vim-8.1.1960/src/testdir/test_match.vim  2019-08-23 22:31:33.217176868 
+0200
--- src/testdir/test_match.vim  2019-09-01 19:10:10.615462791 +0200
***************
*** 15,21 ****
    2match MyGroup2 /FIXME/
    3match MyGroup3 /XXX/
    call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
!   call assert_equal(['MyGroup2', 'FIXME'], matcharg(2))
    call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
  
    " --- Check that "matcharg()" returns an empty list if the argument is not 
1,
--- 15,21 ----
    2match MyGroup2 /FIXME/
    3match MyGroup3 /XXX/
    call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
!   call assert_equal(['MyGroup2', 'FIXME'], 2->matcharg())
    call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
  
    " --- Check that "matcharg()" returns an empty list if the argument is not 
1,
***************
*** 44,50 ****
    " --- Check that "matchdelete()" deletes the matches defined in the previous
    " --- test correctly.
    call matchdelete(m1)
!   call matchdelete(m2)
    call matchdelete(m3)
    call assert_equal([], getmatches())
  
--- 44,50 ----
    " --- Check that "matchdelete()" deletes the matches defined in the previous
    " --- test correctly.
    call matchdelete(m1)
!   eval m2->matchdelete()
    call matchdelete(m3)
    call assert_equal([], getmatches())
  
***************
*** 56,62 ****
    " --- Check that "clearmatches()" clears all matches defined by ":match" and
    " --- "matchadd()".
    let m1 = matchadd("MyGroup1", "TODO")
!   let m2 = matchadd("MyGroup2", "FIXME", 42)
    let m3 = matchadd("MyGroup3", "XXX", 60, 17)
    match MyGroup1 /COFFEE/
    2match MyGroup2 /HUMPPA/
--- 56,62 ----
    " --- Check that "clearmatches()" clears all matches defined by ":match" and
    " --- "matchadd()".
    let m1 = matchadd("MyGroup1", "TODO")
!   let m2 = "MyGroup2"->matchadd("FIXME", 42)
    let m3 = matchadd("MyGroup3", "XXX", 60, 17)
    match MyGroup1 /COFFEE/
    2match MyGroup2 /HUMPPA/
***************
*** 118,124 ****
    call clearmatches()
  
    call setline(1, 'abcdΣabcdef')
!   call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]])
    1
    redraw!
    let v1 = screenattr(1, 1)
--- 118,124 ----
    call clearmatches()
  
    call setline(1, 'abcdΣabcdef')
!   eval "MyGroup1"->matchaddpos([[1, 4, 2], [1, 9, 2]])
    1
    redraw!
    let v1 = screenattr(1, 1)
*** ../vim-8.1.1960/src/version.c       2019-09-01 17:52:27.338698893 +0200
--- src/version.c       2019-09-01 20:16:01.411625735 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     1961,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
164. You got out to buy software, instead of going out for a beer.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201909011817.x81IHOxl022719%40masaka.moolenaar.net.

Raspunde prin e-mail lui