mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
feat(eval/method): partially port v8.1.1925
Adds method call support for all functions in the patch, but it cannot be fully ported due to missing tests for: - getcwd(): requires chdir() and Test_chdir_func() from v8.1.1291. Note that the method call tests for getreg() and getregtype() were removed in v8.2.1547, which has already been ported, but doesn't seem to have been replaced with a new test... This patch also makes getchangelist()'s argument optional (defaults to the current buffer). eval.txt includes a typo for gettabwinvar(), which is fixed in v8.1.1952.
This commit is contained in:
parent
6110480c29
commit
3137c7d635
@ -4701,6 +4701,9 @@ getbufline({buf}, {lnum} [, {end}])
|
||||
Example: >
|
||||
:let lines = getbufline(bufnr("myfile"), 1, "$")
|
||||
|
||||
< Can also be used as a |method|: >
|
||||
GetBufnr()->getbufline(lnum)
|
||||
|
||||
getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
|
||||
The result is the value of option or local buffer variable
|
||||
{varname} in buffer {buf}. Note that the name without "b:"
|
||||
@ -4721,8 +4724,11 @@ getbufvar({buf}, {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({buf}) *getchangelist()*
|
||||
getchangelist([{buf}]) *getchangelist()*
|
||||
Returns the |changelist| for the buffer {buf}. For the use
|
||||
of {buf}, see |bufname()| above. If buffer {buf} doesn't
|
||||
exist, an empty list is returned.
|
||||
@ -4738,6 +4744,9 @@ getchangelist({buf}) *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.
|
||||
@ -4948,6 +4957,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 "curswant" in the list:
|
||||
@ -4976,6 +4988,9 @@ getcwd([{winnr}[, {tabnr}]]) *getcwd()*
|
||||
< If {winnr} is -1 it is ignored, only the tab is resolved.
|
||||
{winnr} can be the window number or the |window-ID|.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetWinnr()->getcwd()
|
||||
|
||||
getenv({name}) *getenv()*
|
||||
Return the value of environment variable {name}. The {name}
|
||||
argument is a string, without a leading '$'. Example: >
|
||||
@ -4985,6 +5000,9 @@ getenv({name}) *getenv()*
|
||||
is different from a variable set to an empty string.
|
||||
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
|
||||
@ -5012,6 +5030,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()*
|
||||
@ -5022,6 +5043,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
|
||||
@ -5029,6 +5053,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}.
|
||||
@ -5049,6 +5076,9 @@ getftype({fname}) *getftype()*
|
||||
systems that support it. On some systems only "dir" and
|
||||
"file" are returned.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetFilename()->getftype()
|
||||
|
||||
getjumplist([{winnr} [, {tabnr}]]) *getjumplist()*
|
||||
Returns the |jumplist| for the specified window.
|
||||
|
||||
@ -5068,7 +5098,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: >
|
||||
@ -5091,6 +5124,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()*
|
||||
@ -5221,6 +5257,8 @@ getpos({expr}) Get the position for String {expr}. For possible values of
|
||||
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
|
||||
@ -5339,6 +5377,9 @@ getreg([{regname} [, 1 [, {list}]]]) *getreg()*
|
||||
|
||||
If {regname} is not specified, |v:register| is used.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetRegname()->getreg()
|
||||
|
||||
getreginfo([{regname}]) *getreginfo()*
|
||||
Returns detailed information about register {regname} as a
|
||||
Dictionary with the following entries:
|
||||
@ -5377,6 +5418,9 @@ getregtype([{regname}]) *getregtype()*
|
||||
The {regname} argument is a string. If {regname} is not
|
||||
specified, |v:register| is used.
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetRegname()->getregtype()
|
||||
|
||||
gettabinfo([{tabnr}]) *gettabinfo()*
|
||||
If {tabnr} is not specified, then information about all the
|
||||
tab pages is returned as a |List|. Each List item is a
|
||||
@ -5390,6 +5434,9 @@ gettabinfo([{tabnr}]) *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|
|
||||
@ -5400,6 +5447,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}.
|
||||
@ -5426,6 +5476,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([{winnr}]) *gettagstack()*
|
||||
The result is a Dict, which is the tag stack of window {winnr}.
|
||||
{winnr} can be the window number or the |window-ID|.
|
||||
@ -8339,6 +8392,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()|.
|
||||
|
||||
setline({lnum}, {text}) *setline()*
|
||||
|
@ -137,9 +137,9 @@ return {
|
||||
garbagecollect={args={0, 1}},
|
||||
get={args={2, 3}, base=1},
|
||||
getbufinfo={args={0, 1}},
|
||||
getbufline={args={2, 3}},
|
||||
getbufvar={args={2, 3}},
|
||||
getchangelist={args={1, 1}},
|
||||
getbufline={args={2, 3}, base=1},
|
||||
getbufvar={args={2, 3}, base=1},
|
||||
getchangelist={args={0, 1}, base=1},
|
||||
getchar={args={0, 1}},
|
||||
getcharmod={},
|
||||
getcharsearch={},
|
||||
@ -148,30 +148,30 @@ return {
|
||||
getcmdpos={},
|
||||
getcmdtype={},
|
||||
getcmdwintype={},
|
||||
getcompletion={args={2, 3}},
|
||||
getcompletion={args={2, 3}, base=1},
|
||||
getcurpos={},
|
||||
getcwd={args={0,2}},
|
||||
getenv={args={1}},
|
||||
getcwd={args={0, 2}, base=1},
|
||||
getenv={args={1}, base=1},
|
||||
getfontname={args={0, 1}},
|
||||
getfperm={args=1},
|
||||
getfsize={args=1},
|
||||
getftime={args=1},
|
||||
getftype={args=1},
|
||||
getjumplist={args={0, 2}},
|
||||
getline={args={1, 2}},
|
||||
getfperm={args=1, base=1},
|
||||
getfsize={args=1, base=1},
|
||||
getftime={args=1, base=1},
|
||||
getftype={args=1, base=1},
|
||||
getjumplist={args={0, 2}, base=1},
|
||||
getline={args={1, 2}, base=1},
|
||||
getloclist={args={1, 2}},
|
||||
getmarklist={args={0, 1}},
|
||||
getmatches={args={0, 1}},
|
||||
getmousepos={},
|
||||
getpid={},
|
||||
getpos={args=1},
|
||||
getpos={args=1, base=1},
|
||||
getqflist={args={0, 1}},
|
||||
getreg={args={0, 3}},
|
||||
getreg={args={0, 3}, base=1},
|
||||
getreginfo={args={0, 1}, base=1},
|
||||
getregtype={args={0, 1}},
|
||||
gettabinfo={args={0, 1}},
|
||||
gettabvar={args={2, 3}},
|
||||
gettabwinvar={args={3, 4}},
|
||||
getregtype={args={0, 1}, base=1},
|
||||
gettabinfo={args={0, 1}, base=1},
|
||||
gettabvar={args={2, 3}, base=1},
|
||||
gettabwinvar={args={3, 4}, base=1},
|
||||
gettagstack={args={0, 1}},
|
||||
getwininfo={args={0, 1}},
|
||||
getwinpos={args={0, 1}},
|
||||
@ -311,7 +311,7 @@ return {
|
||||
setcharsearch={args=1},
|
||||
setcmdpos={args=1},
|
||||
setenv={args=2},
|
||||
setfperm={args=2},
|
||||
setfperm={args=2, base=1},
|
||||
setline={args=2},
|
||||
setloclist={args={2, 4}},
|
||||
setmatches={args={1, 2}},
|
||||
|
@ -3088,10 +3088,16 @@ f_getbufvar_end:
|
||||
static void f_getchangelist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
|
||||
{
|
||||
tv_list_alloc_ret(rettv, 2);
|
||||
vim_ignored = tv_get_number(&argvars[0]); // issue errmsg if type error
|
||||
emsg_off++;
|
||||
const buf_T *const buf = tv_get_buf(&argvars[0], false);
|
||||
emsg_off--;
|
||||
|
||||
const buf_T *buf;
|
||||
if (argvars[0].v_type == VAR_UNKNOWN) {
|
||||
buf = curbuf;
|
||||
} else {
|
||||
vim_ignored = 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;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ func Test_setbufline_getbufline()
|
||||
call assert_equal(1, setbufline(b, 5, ['x']))
|
||||
call assert_equal(1, setbufline(1234, 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))
|
||||
|
@ -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
|
||||
|
@ -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')
|
||||
|
@ -260,7 +260,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)
|
||||
|
||||
|
@ -201,11 +201,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
|
||||
@ -348,7 +348,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)
|
||||
|
@ -15,7 +15,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
|
||||
|
@ -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, ''))
|
||||
|
@ -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>"
|
||||
|
@ -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
|
||||
|
@ -3,7 +3,7 @@ require('os')
|
||||
|
||||
local helpers = require('test.functional.helpers')(after_each)
|
||||
local clear, call, eq = helpers.clear, helpers.call, helpers.eq
|
||||
local neq, exc_exec = helpers.neq, helpers.exc_exec
|
||||
local neq, exc_exec, eval = helpers.neq, helpers.exc_exec, helpers.eval
|
||||
|
||||
describe('Test getting and setting file permissions', function()
|
||||
local tempfile = helpers.tmpname()
|
||||
@ -14,11 +14,12 @@ describe('Test getting and setting file permissions', function()
|
||||
end)
|
||||
|
||||
it('file permissions', function()
|
||||
-- eval() is used to test VimL method syntax for setfperm() and getfperm()
|
||||
eq('', call('getfperm', tempfile))
|
||||
eq(0, call('setfperm', tempfile, 'r--------'))
|
||||
eq(0, eval("'" .. tempfile .. "'->setfperm('r--------')"))
|
||||
|
||||
call('writefile', {'one'}, tempfile)
|
||||
eq(9, call('len', call('getfperm', tempfile)))
|
||||
eq(9, eval("len('" .. tempfile .. "'->getfperm())"))
|
||||
|
||||
eq(1, call('setfperm', tempfile, 'rwx------'))
|
||||
if helpers.is_os('win') then
|
||||
|
Loading…
Reference in New Issue
Block a user