Patch 8.1.1915
Problem:    More functions can be used as methods.
Solution:   Make various functions usable as a method.
Files:      runtime/doc/eval.txt, src/evalfunc.c,
            src/testdir/test_functions.vim, src/testdir/test_cd.vim,
            src/testdir/test_cindent.vim, src/testdir/test_match.vim,
            src/testdir/test_popup.vim, src/testdir/test_cursor_func.vim,
            src/testdir/test_method.vim, src/testdir/test_bufline.vim,
            src/testdir/test_diffmode.vim


*** ../vim-8.1.1914/runtime/doc/eval.txt        2019-08-23 20:58:42.024375479 
+0200
--- runtime/doc/eval.txt        2019-08-23 22:15:35.094535196 +0200
***************
*** 3405,3410 ****
--- 3410,3418 ----
                    let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
  <             Result: [65, 66, 67]
  
+               Can also be used as a |method|: >
+                       GetChar()->char2nr()
+ 
  chdir({dir})                                          *chdir()*
                Change the current working directory to {dir}.  The scope of
                the directory change depends on the directory of the current
***************
*** 3425,3430 ****
--- 3433,3441 ----
                           " ... do some work
                           call chdir(save_dir)
                        endif
+ 
+ <             Can also be used as a |method|: >
+                       GetDir()->chdir()
  <
  cindent({lnum})                                               *cindent()*
                Get the amount of indent for line {lnum} according the C
***************
*** 3435,3446 ****
--- 3446,3463 ----
                feature, -1 is returned.
                See |C-indenting|.
  
+               Can also be used as a |method|: >
+                       GetLnum()->cindent()
+ 
  clearmatches([{win}])                                 *clearmatches()*
                Clears all matches previously defined for the current window
                by |matchadd()| and the |:match| commands.
                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|: >
+                       GetWin()->clearmatches()
+ <
                                                        *col()*
  col({expr})   The result is a Number, which is the byte index of the column
                position given with {expr}.  The accepted positions are:
***************
*** 3476,3481 ****
--- 3493,3501 ----
                                \<C-O>:set ve=all<CR>
                                \<C-O>:echo col(".") . "\n" <Bar>
                                \let &ve = save_ve<CR>
+ 
+ <             Can also be used as a |method|: >
+                       GetPos()->col()
  <
  
  complete({startcol}, {matches})                       *complete()* *E785*
***************
*** 3507,3512 ****
--- 3527,3536 ----
  <             This isn't very useful, but it shows how it works.  Note that
                an empty string is returned to avoid a zero being inserted.
  
+               Can also be used as a |method|, the second argument is passed
+               in: >
+                       GetMatches()->complete(col('.'))
+ 
  complete_add({expr})                          *complete_add()*
                Add {expr} to the list of matches.  Only to be used by the
                function specified with the 'completefunc' option.
***************
*** 3516,3521 ****
--- 3540,3548 ----
                See |complete-functions| for an explanation of {expr}.  It is
                the same as one item in the list that 'omnifunc' would return.
  
+               Can also be used as a |method|: >
+                       GetMoreMatches()->complete_add()
+ 
  complete_check()                              *complete_check()*
                Check for a key typed while looking for completion matches.
                This is to be used when looking for matches takes some time.
***************
*** 3576,3581 ****
--- 3603,3611 ----
                        call complete_info(['mode'])
                        " Get only 'mode' and 'pum_visible'
                        call complete_info(['mode', 'pum_visible'])
+ 
+ <             Can also be used as a |method|: >
+                       GetItems()->complete_info()
  <
                                                *confirm()*
  confirm({msg} [, {choices} [, {default} [, {type}]]])
***************
*** 3631,3636 ****
--- 3661,3669 ----
                don't fit, a vertical layout is used anyway.  For some systems
                the horizontal layout is always used.
  
+               Can also be used as a |method|in: >
+                       BuildMessage()->confirm("&Yes\n&No")
+ 
                                                        *copy()*
  copy({expr})  Make a copy of {expr}.  For Numbers and Strings this isn't
                different from using {expr} directly.
***************
*** 3760,3771 ****
--- 3793,3810 ----
                position within a <Tab> or after the last character.
                Returns 0 when the position could be set, -1 otherwise.
  
+               Can also be used as a |method|: >
+                       GetCursorPos()->cursor()
+ 
  debugbreak({pid})                                     *debugbreak()*
                Specifically used to interrupt a program being debugged.  It
                will cause process {pid} to get a SIGTRAP.  Behavior for other
                processes is undefined. See |terminal-debugger|.
                {only available on MS-Windows}
  
+               Can also be used as a |method|: >
+                       GetPid()->debugbreak()
+ 
  deepcopy({expr} [, {noref}])                          *deepcopy()* *E698*
                Make a copy of {expr}.  For Numbers and Strings this isn't
                different from using {expr} directly.
***************
*** 3787,3792 ****
--- 3826,3834 ----
                {noref} set to 1 will fail.
                Also see |copy()|.
  
+               Can also be used as a |method|: >
+                       GetObject()->deepcopy()
+ 
  delete({fname} [, {flags}])                                   *delete()*
                Without {flags} or with {flags} empty: Deletes the file by the
                name {fname}.  This also works when {fname} is a symbolic link.
***************
*** 3808,3813 ****
--- 3850,3858 ----
                To delete a line from the buffer use |:delete| or
                |deletebufline()|.
  
+               Can also be used as a |method|: >
+                       GetName()->delete()
+ 
  deletebufline({expr}, {first} [, {last}])             *deletebufline()*
                Delete lines {first} to {last} (inclusive) from buffer {expr}.
                If {last} is omitted then delete line {first} only.
***************
*** 3819,3824 ****
--- 3864,3872 ----
                when using |line()| this refers to the current buffer. Use "$"
                to refer to the last line in buffer {expr}.
  
+               Can also be used as a |method|: >
+                       GetBuffer()->deletebufline(1)
+ 
                                                        *did_filetype()*
  did_filetype()        Returns |TRUE| when autocommands are being executed and 
the
                FileType event has been triggered at least once.  Can be used
***************
*** 3840,3845 ****
--- 3888,3896 ----
                line, "'m" mark m, etc.
                Returns 0 if the current window is not in diff mode.
  
+               Can also be used as a |method|: >
+                       GetLnum()->diff_filler()
+ 
  diff_hlID({lnum}, {col})                              *diff_hlID()*
                Returns the highlight ID for diff mode at line {lnum} column
                {col} (byte index).  When the current line does not have a
***************
*** 3851,3856 ****
--- 3902,3909 ----
                The highlight ID can be used with |synIDattr()| to obtain
                syntax information about the highlighting.
  
+               Can also be used as a |method|: >
+                       GetLnum()->diff_hlID(col)
  environ()                                             *environ()*
                Return all of environment variables as dictionary. You can
                check if an environment variable exists like this: >
*** ../vim-8.1.1914/src/evalfunc.c      2019-08-22 22:54:51.851603883 +0200
--- src/evalfunc.c      2019-08-23 22:15:54.970421248 +0200
***************
*** 494,509 ****
      {"ch_status",     1, 2, FEARG_1,    f_ch_status},
  #endif
      {"changenr",      0, 0, 0,          f_changenr},
!     {"char2nr",               1, 2, 0,          f_char2nr},
!     {"chdir",         1, 1, 0,          f_chdir},
!     {"cindent",               1, 1, 0,          f_cindent},
!     {"clearmatches",  0, 1, 0,          f_clearmatches},
!     {"col",           1, 1, 0,          f_col},
!     {"complete",      2, 2, 0,          f_complete},
!     {"complete_add",  1, 1, 0,          f_complete_add},
      {"complete_check",        0, 0, 0,          f_complete_check},
!     {"complete_info", 0, 1, 0,          f_complete_info},
!     {"confirm",               1, 4, 0,          f_confirm},
      {"copy",          1, 1, FEARG_1,    f_copy},
  #ifdef FEAT_FLOAT
      {"cos",           1, 1, FEARG_1,    f_cos},
--- 494,509 ----
      {"ch_status",     1, 2, FEARG_1,    f_ch_status},
  #endif
      {"changenr",      0, 0, 0,          f_changenr},
!     {"char2nr",               1, 2, FEARG_1,    f_char2nr},
!     {"chdir",         1, 1, FEARG_1,    f_chdir},
!     {"cindent",               1, 1, FEARG_1,    f_cindent},
!     {"clearmatches",  0, 1, FEARG_1,    f_clearmatches},
!     {"col",           1, 1, FEARG_1,    f_col},
!     {"complete",      2, 2, FEARG_2,    f_complete},
!     {"complete_add",  1, 1, FEARG_1,    f_complete_add},
      {"complete_check",        0, 0, 0,          f_complete_check},
!     {"complete_info", 0, 1, FEARG_1,    f_complete_info},
!     {"confirm",               1, 4, FEARG_1,    f_confirm},
      {"copy",          1, 1, FEARG_1,    f_copy},
  #ifdef FEAT_FLOAT
      {"cos",           1, 1, FEARG_1,    f_cos},
***************
*** 511,526 ****
  #endif
      {"count",         2, 4, FEARG_1,    f_count},
      {"cscope_connection",0,3, 0,        f_cscope_connection},
!     {"cursor",                1, 3, 0,          f_cursor},
  #ifdef MSWIN
!     {"debugbreak",    1, 1, 0,          f_debugbreak},
  #endif
!     {"deepcopy",      1, 2, 0,          f_deepcopy},
!     {"delete",                1, 2, 0,          f_delete},
!     {"deletebufline", 2, 3, 0,          f_deletebufline},
      {"did_filetype",  0, 0, 0,          f_did_filetype},
!     {"diff_filler",   1, 1, 0,          f_diff_filler},
!     {"diff_hlID",     2, 2, 0,          f_diff_hlID},
      {"empty",         1, 1, FEARG_1,    f_empty},
      {"environ",               0, 0, 0,          f_environ},
      {"escape",                2, 2, 0,          f_escape},
--- 511,526 ----
  #endif
      {"count",         2, 4, FEARG_1,    f_count},
      {"cscope_connection",0,3, 0,        f_cscope_connection},
!     {"cursor",                1, 3, FEARG_1,    f_cursor},
  #ifdef MSWIN
!     {"debugbreak",    1, 1, FEARG_1,    f_debugbreak},
  #endif
!     {"deepcopy",      1, 2, FEARG_1,    f_deepcopy},
!     {"delete",                1, 2, FEARG_1,    f_delete},
!     {"deletebufline", 2, 3, FEARG_1,    f_deletebufline},
      {"did_filetype",  0, 0, 0,          f_did_filetype},
!     {"diff_filler",   1, 1, FEARG_1,    f_diff_filler},
!     {"diff_hlID",     2, 2, FEARG_1,    f_diff_hlID},
      {"empty",         1, 1, FEARG_1,    f_empty},
      {"environ",               0, 0, 0,          f_environ},
      {"escape",                2, 2, 0,          f_escape},
*** ../vim-8.1.1914/src/testdir/test_functions.vim      2019-08-22 
22:18:12.712452690 +0200
--- src/testdir/test_functions.vim      2019-08-23 22:11:20.448016484 +0200
***************
*** 1078,1084 ****
    call assert_equal(7, col('$'))
    call assert_equal(4, col("'x"))
    call assert_equal(6, col("'Y"))
!   call assert_equal(2, col([1, 2]))
    call assert_equal(7, col([1, '$']))
  
    call assert_equal(0, col(''))
--- 1078,1084 ----
    call assert_equal(7, col('$'))
    call assert_equal(4, col("'x"))
    call assert_equal(6, col("'Y"))
!   call assert_equal(2, [1, 2]->col())
    call assert_equal(7, col([1, '$']))
  
    call assert_equal(0, col(''))
***************
*** 1413,1419 ****
    call assert_equal(1, a)
  
    call feedkeys('y', 'L')
!   let a = confirm('Are you sure?', "&Yes\n&No")
    call assert_equal(1, a)
  
    call feedkeys('n', 'L')
--- 1413,1419 ----
    call assert_equal(1, a)
  
    call feedkeys('y', 'L')
!   let a = 'Are you sure?'->confirm("&Yes\n&No")
    call assert_equal(1, a)
  
    call feedkeys('n', 'L')
***************
*** 1514,1520 ****
    let files = readdir('Xdir', {x -> len(add(l, x)) == 2 ? -1 : 1})
    call assert_equal(1, len(files))
  
!   call delete('Xdir', 'rf')
  endfunc
  
  func Test_delete_rf()
--- 1514,1520 ----
    let files = readdir('Xdir', {x -> len(add(l, x)) == 2 ? -1 : 1})
    call assert_equal(1, len(files))
  
!   eval 'Xdir'->delete('rf')
  endfunc
  
  func Test_delete_rf()
***************
*** 1548,1553 ****
--- 1548,1554 ----
  
  func Test_char2nr()
    call assert_equal(12354, char2nr('あ', 1))
+   call assert_equal(120, 'x'->char2nr())
  endfunc
  
  func Test_eventhandler()
*** ../vim-8.1.1914/src/testdir/test_cd.vim     2019-05-07 22:06:48.679310672 
+0200
--- src/testdir/test_cd.vim     2019-08-23 21:26:31.828543589 +0200
***************
*** 85,91 ****
    call assert_equal('y', fnamemodify(getcwd(1, 2), ':t'))
    call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
    tabnext | wincmd t
!   call chdir('..')
    call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t'))
    call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t'))
    call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
--- 85,91 ----
    call assert_equal('y', fnamemodify(getcwd(1, 2), ':t'))
    call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
    tabnext | wincmd t
!   eval '..'->chdir()
    call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t'))
    call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t'))
    call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
*** ../vim-8.1.1914/src/testdir/test_cindent.vim        2019-06-24 
00:58:02.908020514 +0200
--- src/testdir/test_cindent.vim        2019-08-23 21:27:24.448299384 +0200
***************
*** 121,129 ****
    new
    setlocal cindent
    call setline(1, ['int main(void)', '{', 'return 0;', '}'])
!   call assert_equal(cindent(0), -1)
!   call assert_equal(cindent(3), &sw)
!   call assert_equal(cindent(line('$')+1), -1)
    bwipe!
  endfunc
  
--- 121,129 ----
    new
    setlocal cindent
    call setline(1, ['int main(void)', '{', 'return 0;', '}'])
!   call assert_equal(-1, cindent(0))
!   call assert_equal(&sw, 3->cindent())
!   call assert_equal(-1, cindent(line('$')+1))
    bwipe!
  endfunc
  
*** ../vim-8.1.1914/src/testdir/test_match.vim  2019-08-07 23:07:03.960858821 
+0200
--- src/testdir/test_match.vim  2019-08-23 21:29:23.483653416 +0200
***************
*** 215,221 ****
          \]
    call assert_equal(expect, savematches)
  
!   call clearmatches(winid)
    call assert_equal([], getmatches(winid))
  
    call setmatches(savematches, winid)
--- 215,221 ----
          \]
    call assert_equal(expect, savematches)
  
!   eval winid->clearmatches()
    call assert_equal([], getmatches(winid))
  
    call setmatches(savematches, winid)
*** ../vim-8.1.1914/src/testdir/test_popup.vim  2019-08-18 23:01:33.725885954 
+0200
--- src/testdir/test_popup.vim  2019-08-23 21:41:23.210438265 +0200
***************
*** 250,256 ****
  
  func Test_noinsert_complete()
    func! s:complTest1() abort
!     call complete(1, ['source', 'soundfold'])
      return ''
    endfunc
  
--- 250,256 ----
  
  func Test_noinsert_complete()
    func! s:complTest1() abort
!     eval ['source', 'soundfold']->complete(1)
      return ''
    endfunc
  
***************
*** 403,409 ****
      return 0
    else
      call complete_add('four1')
!     call complete_add('four2')
      call complete_check()
      call complete_add('four3')
      call complete_add('four4')
--- 403,409 ----
      return 0
    else
      call complete_add('four1')
!     eval 'four2'->complete_add()
      call complete_check()
      call complete_add('four3')
      call complete_add('four4')
***************
*** 993,999 ****
    if empty(g:compl_what)
      let g:compl_info = complete_info()
    else
!     let g:compl_info = complete_info(g:compl_what)
    endif
    return ''
  endfunc
--- 993,999 ----
    if empty(g:compl_what)
      let g:compl_info = complete_info()
    else
!     let g:compl_info = g:compl_what->complete_info()
    endif
    return ''
  endfunc
*** ../vim-8.1.1914/src/testdir/test_cursor_func.vim    2019-07-07 
18:27:52.365277132 +0200
--- src/testdir/test_cursor_func.vim    2019-08-23 21:45:12.541054277 +0200
***************
*** 22,28 ****
    call cursor(3, 0)
    call assert_equal([3, 1, 0, 1], getcurpos()[1:])
    " below last line goes to last line
!   call cursor(9, 1)
    call assert_equal([4, 1, 0, 1], getcurpos()[1:])
  
    call setline(1, ["\<TAB>"])
--- 22,28 ----
    call cursor(3, 0)
    call assert_equal([3, 1, 0, 1], getcurpos()[1:])
    " below last line goes to last line
!   eval [9, 1]->cursor()
    call assert_equal([4, 1, 0, 1], getcurpos()[1:])
  
    call setline(1, ["\<TAB>"])
*** ../vim-8.1.1914/src/testdir/test_method.vim 2019-08-17 21:04:12.806190044 
+0200
--- src/testdir/test_method.vim 2019-08-23 22:10:00.776490083 +0200
***************
*** 8,13 ****
--- 8,14 ----
    eval l->assert_notequal([3, 2, 1])
    eval l->assert_notequal([3, 2, 1], 'wrong')
    call assert_equal(l, l->copy())
+   call assert_equal(l, l->deepcopy())
    call assert_equal(1, l->count(2))
    call assert_false(l->empty())
    call assert_true([]->empty())
***************
*** 38,43 ****
--- 39,45 ----
    let d = #{one: 1, two: 2, three: 3}
  
    call assert_equal(d, d->copy())
+   call assert_equal(d, d->deepcopy())
    call assert_equal(1, d->count(2))
    call assert_false(d->empty())
    call assert_true({}->empty())
*** ../vim-8.1.1914/src/testdir/test_bufline.vim        2019-08-21 
22:49:48.111267837 +0200
--- src/testdir/test_bufline.vim        2019-08-23 22:12:33.107589237 +0200
***************
*** 132,138 ****
    call assert_equal(0, deletebufline(b, 2, 8))
    call assert_equal(['aaa'], getbufline(b, 1, 2))
    exe "bd!" b
!   call assert_equal(1, deletebufline(b, 1))
  
    call assert_equal(1, deletebufline(-1, 1))
  
--- 132,138 ----
    call assert_equal(0, deletebufline(b, 2, 8))
    call assert_equal(['aaa'], getbufline(b, 1, 2))
    exe "bd!" b
!   call assert_equal(1, b->deletebufline(1))
  
    call assert_equal(1, deletebufline(-1, 1))
  
*** ../vim-8.1.1914/src/testdir/test_diffmode.vim       2019-08-04 
17:35:49.331707782 +0200
--- src/testdir/test_diffmode.vim       2019-08-23 22:15:50.686445793 +0200
***************
*** 674,680 ****
    call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText")
    call diff_hlID(2, 1)->synIDattr("name")->assert_equal("")
    call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd")
!   call diff_hlID(4, 1)->synIDattr("name")->assert_equal("")
  
    wincmd w
    call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
--- 674,680 ----
    call diff_hlID(1, 2)->synIDattr("name")->assert_equal("DiffText")
    call diff_hlID(2, 1)->synIDattr("name")->assert_equal("")
    call diff_hlID(3, 1)->synIDattr("name")->assert_equal("DiffAdd")
!   eval 4->diff_hlID(1)->synIDattr("name")->assert_equal("")
  
    wincmd w
    call assert_equal(synIDattr(diff_hlID(1, 1), "name"), "DiffChange")
***************
*** 693,699 ****
    diffthis
    redraw
  
!   call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 
'diff_filler(v:val)'))
    wincmd w
    call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 
'diff_filler(v:val)'))
  
--- 693,699 ----
    diffthis
    redraw
  
!   call assert_equal([0, 0, 0, 0, 0, 0, 0, 1, 0], map(range(-1, 7), 
'v:val->diff_filler()'))
    wincmd w
    call assert_equal([0, 0, 0, 0, 2, 0, 0, 0], map(range(-1, 6), 
'diff_filler(v:val)'))
  
*** ../vim-8.1.1914/src/version.c       2019-08-23 21:17:30.651058449 +0200
--- src/version.c       2019-08-23 22:30:46.485434590 +0200
***************
*** 763,764 ****
--- 763,766 ----
  {   /* Add new patch number below this line */
+ /**/
+     1915,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
103. When you find yourself in the "Computer" section of Barnes & Noble
     enjoying yourself.

 /// 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/201908232032.x7NKW98x026904%40masaka.moolenaar.net.

Raspunde prin e-mail lui