mirror of
				https://github.com/neovim/neovim.git
				synced 2025-11-04 01:34:25 +00:00 
			
		
		
		
	feat(eval/method): partially port v8.1.1996
Problem: More functions can be used as methods. Solution: Make various functions usable as a method.aad222c9c9Partial port as this does not include eval.txt change for listener_add. Cherry-pick eval.txt changes for: - bufadd from v8.1.1626:5ca1ac373a- setloclist and setqflist headers from:b0d45e7f53Correct eval.txt typo for settabwinvar method call (matches latest Vim).
This commit is contained in:
		@@ -2992,7 +2992,11 @@ bufadd({name})						*bufadd()*
 | 
			
		||||
		number.  Otherwise return the buffer number of the newly
 | 
			
		||||
		created buffer.  When {name} is an empty string then a new
 | 
			
		||||
		buffer is always created.
 | 
			
		||||
		The buffer will not have' 'buflisted' set.
 | 
			
		||||
		The buffer will not have 'buflisted' set and not be loaded
 | 
			
		||||
		yet.  To add some text to the buffer use this: >
 | 
			
		||||
			let bufnr = bufadd('someName')
 | 
			
		||||
			call bufload(bufnr)
 | 
			
		||||
			call setbufline(bufnr, 1, ['some', 'text'])
 | 
			
		||||
<		Can also be used as a |method|: >
 | 
			
		||||
			let bufnr = 'somename'->bufadd()
 | 
			
		||||
 | 
			
		||||
@@ -8704,7 +8708,7 @@ setline({lnum}, {text})					*setline()*
 | 
			
		||||
		Can also be used as a |method|, passing the text as the base: >
 | 
			
		||||
			GetText()->setline(lnum)
 | 
			
		||||
 | 
			
		||||
setloclist({nr}, {list}[, {action}[, {what}]])		*setloclist()*
 | 
			
		||||
setloclist({nr}, {list} [, {action} [, {what}]])		*setloclist()*
 | 
			
		||||
		Create or replace or add to the location list for window {nr}.
 | 
			
		||||
		{nr} can be the window number or the |window-ID|.
 | 
			
		||||
		When {nr} is zero the current window is used.
 | 
			
		||||
@@ -8720,6 +8724,10 @@ setloclist({nr}, {list}[, {action}[, {what}]])		*setloclist()*
 | 
			
		||||
		only the items listed in {what} are set. Refer to |setqflist()|
 | 
			
		||||
		for the list of supported keys in {what}.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|, the base is passed as the
 | 
			
		||||
		second argument: >
 | 
			
		||||
			GetLoclist()->setloclist(winnr)
 | 
			
		||||
 | 
			
		||||
setmatches({list} [, {win}])				*setmatches()*
 | 
			
		||||
		Restores a list of matches saved by |getmatches() for the
 | 
			
		||||
		current window|.  Returns 0 if successful, otherwise -1.  All
 | 
			
		||||
@@ -8728,6 +8736,9 @@ setmatches({list} [, {win}])				*setmatches()*
 | 
			
		||||
		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|: >
 | 
			
		||||
			GetMatches()->setmatches()
 | 
			
		||||
<
 | 
			
		||||
							*setpos()*
 | 
			
		||||
setpos({expr}, {list})
 | 
			
		||||
		Set the position for String {expr}.  Possible values:
 | 
			
		||||
@@ -8777,8 +8788,10 @@ setpos({expr}, {list})
 | 
			
		||||
		also set the preferred column.  Also see the "curswant" key in
 | 
			
		||||
		|winrestview()|.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|: >
 | 
			
		||||
			GetPosition()->setpos('.')
 | 
			
		||||
 | 
			
		||||
setqflist({list} [, {action}[, {what}]])		*setqflist()*
 | 
			
		||||
setqflist({list} [, {action} [, {what}]])		*setqflist()*
 | 
			
		||||
		Create or replace or add to the quickfix list.
 | 
			
		||||
 | 
			
		||||
		If the optional {what} dictionary argument is supplied, then
 | 
			
		||||
@@ -8887,7 +8900,10 @@ setqflist({list} [, {action}[, {what}]])		*setqflist()*
 | 
			
		||||
		independent of the 'errorformat' setting.  Use a command like
 | 
			
		||||
		`:cc 1` to jump to the first position.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|, the base is passed as the
 | 
			
		||||
		second argument: >
 | 
			
		||||
			GetErrorlist()->setqflist()
 | 
			
		||||
<
 | 
			
		||||
							*setreg()*
 | 
			
		||||
setreg({regname}, {value} [, {options}])
 | 
			
		||||
		Set the register {regname} to {value}.
 | 
			
		||||
@@ -8944,6 +8960,10 @@ setreg({regname}, {value} [, {options}])
 | 
			
		||||
		nothing: >
 | 
			
		||||
			:call setreg('a', '', 'al')
 | 
			
		||||
 | 
			
		||||
<		Can also be used as a |method|, the base is passed as the
 | 
			
		||||
		second argument: >
 | 
			
		||||
			GetText()->setreg('a')
 | 
			
		||||
 | 
			
		||||
settabvar({tabnr}, {varname}, {val})			*settabvar()*
 | 
			
		||||
		Set tab-local variable {varname} to {val} in tab page {tabnr}.
 | 
			
		||||
		|t:var|
 | 
			
		||||
@@ -8952,6 +8972,9 @@ settabvar({tabnr}, {varname}, {val})			*settabvar()*
 | 
			
		||||
		Tabs are numbered starting with one.
 | 
			
		||||
		This function is not available in the |sandbox|.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|, the base is used as the value: >
 | 
			
		||||
			GetValue()->settabvar(tab, name)
 | 
			
		||||
 | 
			
		||||
settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
 | 
			
		||||
		Set option or local variable {varname} in window {winnr} to
 | 
			
		||||
		{val}.
 | 
			
		||||
@@ -8968,6 +8991,9 @@ settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
 | 
			
		||||
			:call settabwinvar(3, 2, "myvar", "foobar")
 | 
			
		||||
<		This function is not available in the |sandbox|.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|, the base is used as the value: >
 | 
			
		||||
			GetValue()->settabwinvar(tab, winnr, name)
 | 
			
		||||
 | 
			
		||||
settagstack({nr}, {dict} [, {action}])			*settagstack()*
 | 
			
		||||
		Modify the tag stack of the window {nr} using {dict}.
 | 
			
		||||
		{nr} can be the window number or the |window-ID|.
 | 
			
		||||
@@ -9001,6 +9027,8 @@ settagstack({nr}, {dict} [, {action}])			*settagstack()*
 | 
			
		||||
			call settagstack(1003, stack)
 | 
			
		||||
			unlet stack
 | 
			
		||||
<
 | 
			
		||||
		Can also be used as a |method|, the base is used as the Dict: >
 | 
			
		||||
			GetStack()->settagstack(winnr)
 | 
			
		||||
 | 
			
		||||
setwinvar({nr}, {varname}, {val})			*setwinvar()*
 | 
			
		||||
		Like |settabwinvar()| for the current tab page.
 | 
			
		||||
@@ -9008,10 +9036,16 @@ setwinvar({nr}, {varname}, {val})			*setwinvar()*
 | 
			
		||||
			:call setwinvar(1, "&list", 0)
 | 
			
		||||
			:call setwinvar(2, "myvar", "foobar")
 | 
			
		||||
 | 
			
		||||
<		Can also be used as a |method|, the base is used as the value: >
 | 
			
		||||
			GetValue()->setwinvar(winnr, name)
 | 
			
		||||
 | 
			
		||||
sha256({string})						*sha256()*
 | 
			
		||||
		Returns a String with 64 hex characters, which is the SHA256
 | 
			
		||||
		checksum of {string}.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|: >
 | 
			
		||||
			GetText()->sha256()
 | 
			
		||||
 | 
			
		||||
shellescape({string} [, {special}])			*shellescape()*
 | 
			
		||||
		Escape {string} for use as a shell command argument.
 | 
			
		||||
 | 
			
		||||
@@ -9043,6 +9077,8 @@ shellescape({string} [, {special}])			*shellescape()*
 | 
			
		||||
		    :call system("chmod +w -- " . shellescape(expand("%")))
 | 
			
		||||
<		See also |::S|.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|: >
 | 
			
		||||
			GetCommand()->shellescape()
 | 
			
		||||
 | 
			
		||||
shiftwidth([{col}])						*shiftwidth()*
 | 
			
		||||
		Returns the effective value of 'shiftwidth'. This is the
 | 
			
		||||
@@ -9065,6 +9101,9 @@ shiftwidth([{col}])						*shiftwidth()*
 | 
			
		||||
		'vartabstop' feature. If no {col} argument is given, column 1
 | 
			
		||||
		will be assumed.
 | 
			
		||||
 | 
			
		||||
		Can also be used as a |method|: >
 | 
			
		||||
			GetColumn()->shiftwidth()
 | 
			
		||||
 | 
			
		||||
sign_ functions are documented here: |sign-functions-details|
 | 
			
		||||
 | 
			
		||||
simplify({filename})					*simplify()*
 | 
			
		||||
 
 | 
			
		||||
@@ -314,18 +314,18 @@ return {
 | 
			
		||||
    setenv={args=2, base=2},
 | 
			
		||||
    setfperm={args=2, base=1},
 | 
			
		||||
    setline={args=2, base=2},
 | 
			
		||||
    setloclist={args={2, 4}},
 | 
			
		||||
    setmatches={args={1, 2}},
 | 
			
		||||
    setpos={args=2},
 | 
			
		||||
    setqflist={args={1, 3}},
 | 
			
		||||
    setreg={args={2, 3}},
 | 
			
		||||
    settabvar={args=3},
 | 
			
		||||
    settabwinvar={args=4},
 | 
			
		||||
    settagstack={args={2, 3}},
 | 
			
		||||
    setwinvar={args=3},
 | 
			
		||||
    sha256={args=1},
 | 
			
		||||
    shellescape={args={1, 2}},
 | 
			
		||||
    shiftwidth={args={0, 1}},
 | 
			
		||||
    setloclist={args={2, 4}, base=2},
 | 
			
		||||
    setmatches={args={1, 2}, base=1},
 | 
			
		||||
    setpos={args=2, base=2},
 | 
			
		||||
    setqflist={args={1, 3}, base=1},
 | 
			
		||||
    setreg={args={2, 3}, base=2},
 | 
			
		||||
    settabvar={args=3, base=3},
 | 
			
		||||
    settabwinvar={args=4, base=4},
 | 
			
		||||
    settagstack={args={2, 3}, base=2},
 | 
			
		||||
    setwinvar={args=3, base=3},
 | 
			
		||||
    sha256={args=1, base=1},
 | 
			
		||||
    shellescape={args={1, 2}, base=1},
 | 
			
		||||
    shiftwidth={args={0, 1}, base=1},
 | 
			
		||||
    sign_define={args={1, 2}, base=1},
 | 
			
		||||
    sign_getdefined={args={0, 1}, base=1},
 | 
			
		||||
    sign_getplaced={args={0, 2}, base=1},
 | 
			
		||||
 
 | 
			
		||||
@@ -48,7 +48,7 @@ function Test_getbufwintabinfo()
 | 
			
		||||
  tabnew | let w3_id = win_getid()
 | 
			
		||||
  new | let w4_id = win_getid()
 | 
			
		||||
  vert new | let w5_id = win_getid()
 | 
			
		||||
  call setwinvar(0, 'signal', 'green')
 | 
			
		||||
  eval 'green'->setwinvar(0, 'signal')
 | 
			
		||||
  tabfirst
 | 
			
		||||
  let winlist = getwininfo()
 | 
			
		||||
  call assert_equal(5, len(winlist))
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ endfunc
 | 
			
		||||
" Very short version of what matchparen does.
 | 
			
		||||
function s:Highlight_Matching_Pair()
 | 
			
		||||
  let save_cursor = getcurpos()
 | 
			
		||||
  call setpos('.', save_cursor)
 | 
			
		||||
  eval save_cursor->setpos('.')
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_curswant_with_autocommand()
 | 
			
		||||
 
 | 
			
		||||
@@ -493,7 +493,7 @@ func Test_setmatches()
 | 
			
		||||
    let set[0]['conceal'] = 5
 | 
			
		||||
    let exp[0]['conceal'] = '5'
 | 
			
		||||
  endif
 | 
			
		||||
  call setmatches(set)
 | 
			
		||||
  eval set->setmatches()
 | 
			
		||||
  call assert_equal(exp, getmatches())
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1219,7 +1219,7 @@ func Test_shellescape()
 | 
			
		||||
  let save_shell = &shell
 | 
			
		||||
  set shell=bash
 | 
			
		||||
  call assert_equal("'text'", shellescape('text'))
 | 
			
		||||
  call assert_equal("'te\"xt'", shellescape('te"xt'))
 | 
			
		||||
  call assert_equal("'te\"xt'", 'te"xt'->shellescape())
 | 
			
		||||
  call assert_equal("'te'\\''xt'", shellescape("te'xt"))
 | 
			
		||||
 | 
			
		||||
  call assert_equal("'te%xt'", shellescape("te%xt"))
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@ func Test_put_lines()
 | 
			
		||||
  call assert_equal(['Line 3', '', 'Line 1', 'Line2'], getline(1, '$'))
 | 
			
		||||
  " clean up
 | 
			
		||||
  bw!
 | 
			
		||||
  call setreg('a', a[0], a[1])
 | 
			
		||||
  eval a[0]->setreg('a', a[1])
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_put_expr()
 | 
			
		||||
 
 | 
			
		||||
@@ -811,7 +811,7 @@ func Test_locationlist()
 | 
			
		||||
      " NOTE: problem 1:
 | 
			
		||||
      " intentionally not setting 'lnum' so that the quickfix entries are not
 | 
			
		||||
      " valid
 | 
			
		||||
      call setloclist(0, qflist, ' ')
 | 
			
		||||
      eval qflist->setloclist(0, ' ')
 | 
			
		||||
    endfor
 | 
			
		||||
 | 
			
		||||
    " Test A
 | 
			
		||||
@@ -1699,7 +1699,7 @@ endfunc
 | 
			
		||||
 | 
			
		||||
func Test_setqflist_invalid_nr()
 | 
			
		||||
  " The following command used to crash Vim
 | 
			
		||||
  call setqflist([], ' ', {'nr' : $XXX_DOES_NOT_EXIST})
 | 
			
		||||
  eval []->setqflist(' ', {'nr' : $XXX_DOES_NOT_EXIST})
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
func Test_setqflist_user_sets_buftype()
 | 
			
		||||
 
 | 
			
		||||
@@ -6,17 +6,17 @@ endif
 | 
			
		||||
 | 
			
		||||
function Test_sha256()
 | 
			
		||||
  " test for empty string:
 | 
			
		||||
  call assert_equal(sha256(""), 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855')
 | 
			
		||||
  call assert_equal('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855', sha256(""))
 | 
			
		||||
 | 
			
		||||
  "'test for 1 char:
 | 
			
		||||
  call assert_equal(sha256("a"), 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb')
 | 
			
		||||
  call assert_equal('ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb', sha256("a"))
 | 
			
		||||
  "
 | 
			
		||||
  "test for 3 chars:
 | 
			
		||||
  call assert_equal(sha256("abc"), 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad')
 | 
			
		||||
  call assert_equal('ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad', "abc"->sha256())
 | 
			
		||||
 | 
			
		||||
  " test for contains meta char:
 | 
			
		||||
  call assert_equal(sha256("foo\nbar"), '807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776')
 | 
			
		||||
  call assert_equal('807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776', sha256("foo\nbar"))
 | 
			
		||||
 | 
			
		||||
  " test for contains non-ascii char:
 | 
			
		||||
  call assert_equal(sha256("\xde\xad\xbe\xef"), '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953')
 | 
			
		||||
  call assert_equal('5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953', sha256("\xde\xad\xbe\xef"))
 | 
			
		||||
endfunction
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ function Test_tabpage()
 | 
			
		||||
  tabnew
 | 
			
		||||
  tabfirst
 | 
			
		||||
  call settabvar(2, 'val_num', 100)
 | 
			
		||||
  call settabvar(2, 'val_str', 'SetTabVar test')
 | 
			
		||||
  eval 'SetTabVar test'->settabvar(2, 'val_str')
 | 
			
		||||
  call settabvar(2, 'val_list', ['red', 'blue', 'green'])
 | 
			
		||||
  "
 | 
			
		||||
  call assert_true(gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green'])
 | 
			
		||||
@@ -184,7 +184,7 @@ function Test_tabpage_with_autocmd()
 | 
			
		||||
  let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
 | 
			
		||||
  call assert_equal(['a', 'a'], s:li)
 | 
			
		||||
  let s:li = []
 | 
			
		||||
  C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
 | 
			
		||||
  C call map(copy(winr), '(v:val*2)->settabwinvar(' .. tabn .. ', v:val, ''a'')')
 | 
			
		||||
  let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
 | 
			
		||||
  call assert_equal(['2', '4'], s:li)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -351,7 +351,7 @@ func Test_getsettagstack()
 | 
			
		||||
  " Try to set current index to invalid values
 | 
			
		||||
  call settagstack(1, {'curidx' : -1})
 | 
			
		||||
  call assert_equal(1, gettagstack().curidx)
 | 
			
		||||
  call settagstack(1, {'curidx' : 50})
 | 
			
		||||
  eval {'curidx' : 50}->settagstack(1)
 | 
			
		||||
  call assert_equal(4, gettagstack().curidx)
 | 
			
		||||
 | 
			
		||||
  " Try pushing invalid items onto the stack
 | 
			
		||||
 
 | 
			
		||||
@@ -330,7 +330,7 @@ func Test_vartabs_shiftwidth()
 | 
			
		||||
  let lines = ScreenLines([1, 2], winwidth(0))
 | 
			
		||||
  call s:compare_lines(expect2, lines)
 | 
			
		||||
  call assert_equal(20, shiftwidth(virtcol('.')-2))
 | 
			
		||||
  call assert_equal(30, shiftwidth(virtcol('.')))
 | 
			
		||||
  call assert_equal(30, virtcol('.')->shiftwidth())
 | 
			
		||||
  norm! $>>
 | 
			
		||||
  let expect3 = ['                                        ', '                    x                   ', '~                                       ']
 | 
			
		||||
  let lines = ScreenLines([1, 3], winwidth(0))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user