Merge pull request #15502 from seandewar/vim-8.1.1921

Add method call support for more built-ins: vim-patch:8.1.{1336,1952,1961,1984}
This commit is contained in:
Jan Edmund Lazo 2021-10-10 16:48:24 -04:00 committed by GitHub
commit b3e0d6708e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
51 changed files with 658 additions and 249 deletions

View File

@ -1204,7 +1204,7 @@ next method: >
mylist->filter(filterexpr)->map(mapexpr)->sort()->join() mylist->filter(filterexpr)->map(mapexpr)->sort()->join()
< <
Example of using a lambda: > Example of using a lambda: >
GetPercentage->{x -> x * 100}()->printf('%d%%') GetPercentage()->{x -> x * 100}()->printf('%d%%')
< <
When using -> the |expr7| operators will be applied first, thus: > When using -> the |expr7| operators will be applied first, thus: >
-1.234->string() -1.234->string()
@ -2505,7 +2505,7 @@ keys({dict}) List keys in {dict}
len({expr}) Number the length of {expr} len({expr}) Number the length of {expr}
libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg} libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg}
libcallnr({lib}, {func}, {arg}) Number idem, but return a Number libcallnr({lib}, {func}, {arg}) Number idem, but return a Number
line({expr}) Number line nr of cursor, last line or mark line({expr} [, {winid}]) Number line nr of cursor, last line or mark
line2byte({lnum}) Number byte count of line {lnum} line2byte({lnum}) Number byte count of line {lnum}
lispindent({lnum}) Number Lisp indent for line {lnum} lispindent({lnum}) Number Lisp indent for line {lnum}
list2str({list} [, {utf8}]) String turn numbers in {list} into a String list2str({list} [, {utf8}]) String turn numbers in {list} into a String
@ -3831,6 +3831,9 @@ escape({string}, {chars}) *escape()*
c:\\program\ files\\vim c:\\program\ files\\vim
< Also see |shellescape()| and |fnameescape()|. < Also see |shellescape()| and |fnameescape()|.
Can also be used as a |method|: >
GetText()->escape(' \')
<
*eval()* *eval()*
eval({string}) Evaluate {string} and return the result. Especially useful to eval({string}) Evaluate {string} and return the result. Especially useful to
turn the result of |string()| back into the original value. turn the result of |string()| back into the original value.
@ -3870,6 +3873,9 @@ executable({expr}) *executable()*
-1 not implemented on this system -1 not implemented on this system
|exepath()| can be used to get the full path of an executable. |exepath()| can be used to get the full path of an executable.
Can also be used as a |method|: >
GetCommand()->executable()
execute({command} [, {silent}]) *execute()* execute({command} [, {silent}]) *execute()*
Execute {command} and capture its output. Execute {command} and capture its output.
If {command} is a |String|, returns {command} output. If {command} is a |String|, returns {command} output.
@ -3897,12 +3903,18 @@ execute({command} [, {silent}]) *execute()*
To execute a command in another window than the current one To execute a command in another window than the current one
use `win_execute()`. use `win_execute()`.
Can also be used as a |method|: >
GetCommand()->execute()
exepath({expr}) *exepath()* exepath({expr}) *exepath()*
Returns the full path of {expr} if it is an executable and Returns the full path of {expr} if it is an executable and
given as a (partial or full) path or is found in $PATH. given as a (partial or full) path or is found in $PATH.
Returns empty string otherwise. Returns empty string otherwise.
If {expr} starts with "./" the |current-directory| is used. If {expr} starts with "./" the |current-directory| is used.
Can also be used as a |method|: >
GetCommand()->exepath()
*exists()* *exists()*
exists({expr}) The result is a Number, which is |TRUE| if {expr} is exists({expr}) The result is a Number, which is |TRUE| if {expr} is
defined, zero otherwise. defined, zero otherwise.
@ -3988,6 +4000,9 @@ exists({expr}) The result is a Number, which is |TRUE| if {expr} is
< This doesn't check for existence of the "bufcount" variable, < This doesn't check for existence of the "bufcount" variable,
but gets the value of "bufcount", and checks if that exists. but gets the value of "bufcount", and checks if that exists.
Can also be used as a |method|: >
Varname()->exists()
exp({expr}) *exp()* exp({expr}) *exp()*
Return the exponential of {expr} as a |Float| in the range Return the exponential of {expr} as a |Float| in the range
[0, inf]. [0, inf].
@ -4094,6 +4109,9 @@ expand({string} [, {nosuf} [, {list}]]) *expand()*
See |glob()| for finding existing files. See |system()| for See |glob()| for finding existing files. See |system()| for
getting the raw output of an external command. getting the raw output of an external command.
Can also be used as a |method|: >
Getpattern()->expand()
expandcmd({expr}) *expandcmd()* expandcmd({expr}) *expandcmd()*
Expand special items in {expr} like what is done for an Ex Expand special items in {expr} like what is done for an Ex
command such as `:edit`. This expands special keywords, like command such as `:edit`. This expands special keywords, like
@ -4101,6 +4119,9 @@ expandcmd({expr}) *expandcmd()*
{expr}. "~user" and "~/path" are only expanded at the start. {expr}. "~user" and "~/path" are only expanded at the start.
Returns the expanded string. Example: > Returns the expanded string. Example: >
:echo expandcmd('make %<.o') :echo expandcmd('make %<.o')
< Can also be used as a |method|: >
GetCommand()->expandcmd()
< <
extend({expr1}, {expr2} [, {expr3}]) *extend()* extend({expr1}, {expr2} [, {expr3}]) *extend()*
{expr1} and {expr2} must be both |Lists| or both {expr1} and {expr2} must be both |Lists| or both
@ -4186,6 +4207,9 @@ feedkeys({string} [, {mode}]) *feedkeys()*
Return value is always 0. Return value is always 0.
Can also be used as a |method|: >
GetInput()->feedkeys()
filereadable({file}) *filereadable()* filereadable({file}) *filereadable()*
The result is a Number, which is |TRUE| when a file with the The result is a Number, which is |TRUE| when a file with the
name {file} exists, and can be read. If {file} doesn't exist, name {file} exists, and can be read. If {file} doesn't exist,
@ -4199,12 +4223,17 @@ filereadable({file}) *filereadable()*
echo filereadable(expand('~/.vimrc')) echo filereadable(expand('~/.vimrc'))
1 1
< Can also be used as a |method|: >
GetName()->filereadable()
filewritable({file}) *filewritable()* filewritable({file}) *filewritable()*
The result is a Number, which is 1 when a file with the The result is a Number, which is 1 when a file with the
name {file} exists, and can be written. If {file} doesn't name {file} exists, and can be written. If {file} doesn't
exist, or is not writable, the result is 0. If {file} is a exist, or is not writable, the result is 0. If {file} is a
directory, and we can write to it, the result is 2. directory, and we can write to it, the result is 2.
Can also be used as a |method|: >
GetName()->filewriteable()
filter({expr1}, {expr2}) *filter()* filter({expr1}, {expr2}) *filter()*
{expr1} must be a |List|, |Blob|, or a |Dictionary|. {expr1} must be a |List|, |Blob|, or a |Dictionary|.
@ -4275,6 +4304,9 @@ finddir({name} [, {path} [, {count}]]) *finddir()*
This is quite similar to the ex-command `:find`. This is quite similar to the ex-command `:find`.
Can also be used as a |method|: >
GetName()->finddir()
findfile({name} [, {path} [, {count}]]) *findfile()* findfile({name} [, {path} [, {count}]]) *findfile()*
Just like |finddir()|, but find a file instead of a directory. Just like |finddir()|, but find a file instead of a directory.
Uses 'suffixesadd'. Uses 'suffixesadd'.
@ -4283,6 +4315,9 @@ findfile({name} [, {path} [, {count}]]) *findfile()*
< Searches from the directory of the current file upwards until < Searches from the directory of the current file upwards until
it finds the file "tags.vim". it finds the file "tags.vim".
Can also be used as a |method|: >
GetName()->findfile()
flatten({list} [, {maxdepth}]) *flatten()* flatten({list} [, {maxdepth}]) *flatten()*
Flatten {list} up to {maxdepth} levels. Without {maxdepth} Flatten {list} up to {maxdepth} levels. Without {maxdepth}
the result is a |List| without nesting, as if {maxdepth} is the result is a |List| without nesting, as if {maxdepth} is
@ -4372,6 +4407,9 @@ fnameescape({string}) *fnameescape()*
:exe "edit " . fnameescape(fname) :exe "edit " . fnameescape(fname)
< results in executing: > < results in executing: >
edit \+some\ str\%nge\|name edit \+some\ str\%nge\|name
<
Can also be used as a |method|: >
GetName()->fnameescape()
fnamemodify({fname}, {mods}) *fnamemodify()* fnamemodify({fname}, {mods}) *fnamemodify()*
Modify file name {fname} according to {mods}. {mods} is a Modify file name {fname} according to {mods}. {mods} is a
@ -4385,6 +4423,9 @@ fnamemodify({fname}, {mods}) *fnamemodify()*
Note: Environment variables don't work in {fname}, use Note: Environment variables don't work in {fname}, use
|expand()| first then. |expand()| first then.
Can also be used as a |method|: >
GetName()->fnamemodify(':p:h')
foldclosed({lnum}) *foldclosed()* foldclosed({lnum}) *foldclosed()*
The result is a Number. If the line {lnum} is in a closed The result is a Number. If the line {lnum} is in a closed
fold, the result is the number of the first line in that fold. fold, the result is the number of the first line in that fold.
@ -4392,6 +4433,9 @@ foldclosed({lnum}) *foldclosed()*
{lnum} is used like with |getline()|. Thus "." is the current {lnum} is used like with |getline()|. Thus "." is the current
line, "'m" mark m, etc. line, "'m" mark m, etc.
Can also be used as a |method|: >
GetLnum()->foldclosed()
foldclosedend({lnum}) *foldclosedend()* foldclosedend({lnum}) *foldclosedend()*
The result is a Number. If the line {lnum} is in a closed The result is a Number. If the line {lnum} is in a closed
fold, the result is the number of the last line in that fold. fold, the result is the number of the last line in that fold.
@ -4399,6 +4443,9 @@ foldclosedend({lnum}) *foldclosedend()*
{lnum} is used like with |getline()|. Thus "." is the current {lnum} is used like with |getline()|. Thus "." is the current
line, "'m" mark m, etc. line, "'m" mark m, etc.
Can also be used as a |method|: >
GetLnum()->foldclosedend()
foldlevel({lnum}) *foldlevel()* foldlevel({lnum}) *foldlevel()*
The result is a Number, which is the foldlevel of line {lnum} The result is a Number, which is the foldlevel of line {lnum}
in the current buffer. For nested folds the deepest level is in the current buffer. For nested folds the deepest level is
@ -4411,6 +4458,9 @@ foldlevel({lnum}) *foldlevel()*
{lnum} is used like with |getline()|. Thus "." is the current {lnum} is used like with |getline()|. Thus "." is the current
line, "'m" mark m, etc. line, "'m" mark m, etc.
Can also be used as a |method|: >
GetLnum()->foldlevel()
*foldtext()* *foldtext()*
foldtext() Returns a String, to be displayed for a closed fold. This is foldtext() Returns a String, to be displayed for a closed fold. This is
the default function used for the 'foldtext' option and should the default function used for the 'foldtext' option and should
@ -4436,6 +4486,9 @@ foldtextresult({lnum}) *foldtextresult()*
line, "'m" mark m, etc. line, "'m" mark m, etc.
Useful when exporting folded text, e.g., to HTML. Useful when exporting folded text, e.g., to HTML.
Can also be used as a |method|: >
GetLnum()->foldtextresult()
<
*foreground()* *foreground()*
foreground() Move the Vim window to the foreground. Useful when sent from foreground() Move the Vim window to the foreground. Useful when sent from
a client to a Vim server. |remote_send()| a client to a Vim server. |remote_send()|
@ -4454,6 +4507,9 @@ funcref({name} [, {arglist}] [, {dict}])
Also for autoloaded functions. {name} cannot be a builtin Also for autoloaded functions. {name} cannot be a builtin
function. function.
Can also be used as a |method|: >
GetFuncname()->funcref([arg])
<
*function()* *E700* *E922* *E923* *function()* *E700* *E922* *E923*
function({name} [, {arglist}] [, {dict}]) function({name} [, {arglist}] [, {dict}])
Return a |Funcref| variable that refers to function {name}. Return a |Funcref| variable that refers to function {name}.
@ -4503,7 +4559,9 @@ function({name} [, {arglist}] [, {dict}])
call Func(500) call Func(500)
< Invokes the function as with: > < Invokes the function as with: >
call context.Callback('one', 500) call context.Callback('one', 500)
<
Can also be used as a |method|: >
GetFuncname()->function([arg])
garbagecollect([{atexit}]) *garbagecollect()* garbagecollect([{atexit}]) *garbagecollect()*
Cleanup unused |Lists| and |Dictionaries| that have circular Cleanup unused |Lists| and |Dictionaries| that have circular
@ -4643,6 +4701,9 @@ getbufline({buf}, {lnum} [, {end}])
Example: > Example: >
:let lines = getbufline(bufnr("myfile"), 1, "$") :let lines = getbufline(bufnr("myfile"), 1, "$")
< Can also be used as a |method|: >
GetBufnr()->getbufline(lnum)
getbufvar({buf}, {varname} [, {def}]) *getbufvar()* getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
The result is the value of option or local buffer variable The result is the value of option or local buffer variable
{varname} in buffer {buf}. Note that the name without "b:" {varname} in buffer {buf}. Note that the name without "b:"
@ -4663,8 +4724,11 @@ getbufvar({buf}, {varname} [, {def}]) *getbufvar()*
Examples: > Examples: >
:let bufmodified = getbufvar(1, "&mod") :let bufmodified = getbufvar(1, "&mod")
:echo "todo myvar = " . getbufvar("todo", "myvar") :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 Returns the |changelist| for the buffer {buf}. For the use
of {buf}, see |bufname()| above. If buffer {buf} doesn't of {buf}, see |bufname()| above. If buffer {buf} doesn't
exist, an empty list is returned. exist, an empty list is returned.
@ -4680,6 +4744,9 @@ getchangelist({buf}) *getchangelist()*
position refers to the position in the list. For other position refers to the position in the list. For other
buffers, it is set to the length of the list. buffers, it is set to the length of the list.
Can also be used as a |method|: >
GetBufnr()->getchangelist()
getchar([expr]) *getchar()* getchar([expr]) *getchar()*
Get a single character from the user or input stream. Get a single character from the user or input stream.
If [expr] is omitted, wait until a character is available. If [expr] is omitted, wait until a character is available.
@ -4890,6 +4957,9 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
If there are no matches, an empty list is returned. An If there are no matches, an empty list is returned. An
invalid value for {type} produces an error. invalid value for {type} produces an error.
Can also be used as a |method|: >
GetPattern()->getcompletion('color')
<
*getcurpos()* *getcurpos()*
getcurpos() Get the position of the cursor. This is like getpos('.'), but getcurpos() Get the position of the cursor. This is like getpos('.'), but
includes an extra "curswant" in the list: includes an extra "curswant" in the list:
@ -4918,6 +4988,9 @@ getcwd([{winnr}[, {tabnr}]]) *getcwd()*
< If {winnr} is -1 it is ignored, only the tab is resolved. < If {winnr} is -1 it is ignored, only the tab is resolved.
{winnr} can be the window number or the |window-ID|. {winnr} can be the window number or the |window-ID|.
Can also be used as a |method|: >
GetWinnr()->getcwd()
getenv({name}) *getenv()* getenv({name}) *getenv()*
Return the value of environment variable {name}. The {name} Return the value of environment variable {name}. The {name}
argument is a string, without a leading '$'. Example: > argument is a string, without a leading '$'. Example: >
@ -4927,6 +5000,9 @@ getenv({name}) *getenv()*
is different from a variable set to an empty string. is different from a variable set to an empty string.
See also |expr-env|. See also |expr-env|.
Can also be used as a |method|: >
GetVarname()->getenv()
getfontname([{name}]) *getfontname()* getfontname([{name}]) *getfontname()*
Without an argument returns the name of the normal font being Without an argument returns the name of the normal font being
used. Like what is used for the Normal highlight group used. Like what is used for the Normal highlight group
@ -4954,6 +5030,9 @@ getfperm({fname}) *getfperm()*
< This will hopefully (from a security point of view) display < This will hopefully (from a security point of view) display
the string "rw-r--r--" or even "rw-------". the string "rw-r--r--" or even "rw-------".
Can also be used as a |method|: >
GetFilename()->getfperm()
<
For setting permissions use |setfperm()|. For setting permissions use |setfperm()|.
getfsize({fname}) *getfsize()* getfsize({fname}) *getfsize()*
@ -4964,6 +5043,9 @@ getfsize({fname}) *getfsize()*
If the size of {fname} is too big to fit in a Number then -2 If the size of {fname} is too big to fit in a Number then -2
is returned. is returned.
Can also be used as a |method|: >
GetFilename()->getfsize()
getftime({fname}) *getftime()* getftime({fname}) *getftime()*
The result is a Number, which is the last modification time of The result is a Number, which is the last modification time of
the given file {fname}. The value is measured as seconds the given file {fname}. The value is measured as seconds
@ -4971,6 +5053,9 @@ getftime({fname}) *getftime()*
|localtime()| and |strftime()|. |localtime()| and |strftime()|.
If the file {fname} can't be found -1 is returned. If the file {fname} can't be found -1 is returned.
Can also be used as a |method|: >
GetFilename()->getftime()
getftype({fname}) *getftype()* getftype({fname}) *getftype()*
The result is a String, which is a description of the kind of The result is a String, which is a description of the kind of
file of the given file {fname}. file of the given file {fname}.
@ -4991,6 +5076,9 @@ getftype({fname}) *getftype()*
systems that support it. On some systems only "dir" and systems that support it. On some systems only "dir" and
"file" are returned. "file" are returned.
Can also be used as a |method|: >
GetFilename()->getftype()
getjumplist([{winnr} [, {tabnr}]]) *getjumplist()* getjumplist([{winnr} [, {tabnr}]]) *getjumplist()*
Returns the |jumplist| for the specified window. Returns the |jumplist| for the specified window.
@ -5010,7 +5098,10 @@ getjumplist([{winnr} [, {tabnr}]]) *getjumplist()*
filename filename if available filename filename if available
lnum line number lnum line number
*getline()* Can also be used as a |method|: >
GetWinnr()->getjumplist()
< *getline()*
getline({lnum} [, {end}]) getline({lnum} [, {end}])
Without {end} the result is a String, which is line {lnum} Without {end} the result is a String, which is line {lnum}
from the current buffer. Example: > from the current buffer. Example: >
@ -5033,6 +5124,9 @@ getline({lnum} [, {end}])
:let end = search("^$") - 1 :let end = search("^$") - 1
:let lines = getline(start, end) :let lines = getline(start, end)
< Can also be used as a |method|: >
ComputeLnum()->getline()
< To get lines from another buffer see |getbufline()| < To get lines from another buffer see |getbufline()|
getloclist({nr},[, {what}]) *getloclist()* getloclist({nr},[, {what}]) *getloclist()*
@ -5163,6 +5257,8 @@ getpos({expr}) Get the position for String {expr}. For possible values of
call setpos("'a", save_a_mark) call setpos("'a", save_a_mark)
< Also see |getcurpos()| and |setpos()|. < Also see |getcurpos()| and |setpos()|.
Can also be used as a |method|: >
GetMark()->getpos()
getqflist([{what}]) *getqflist()* getqflist([{what}]) *getqflist()*
Returns a |List| with all the current quickfix errors. Each Returns a |List| with all the current quickfix errors. Each
@ -5281,6 +5377,9 @@ getreg([{regname} [, 1 [, {list}]]]) *getreg()*
If {regname} is not specified, |v:register| is used. If {regname} is not specified, |v:register| is used.
Can also be used as a |method|: >
GetRegname()->getreg()
getreginfo([{regname}]) *getreginfo()* getreginfo([{regname}]) *getreginfo()*
Returns detailed information about register {regname} as a Returns detailed information about register {regname} as a
Dictionary with the following entries: Dictionary with the following entries:
@ -5319,6 +5418,9 @@ getregtype([{regname}]) *getregtype()*
The {regname} argument is a string. If {regname} is not The {regname} argument is a string. If {regname} is not
specified, |v:register| is used. specified, |v:register| is used.
Can also be used as a |method|: >
GetRegname()->getregtype()
gettabinfo([{tabnr}]) *gettabinfo()* gettabinfo([{tabnr}]) *gettabinfo()*
If {tabnr} is not specified, then information about all the If {tabnr} is not specified, then information about all the
tab pages is returned as a |List|. Each List item is a tab pages is returned as a |List|. Each List item is a
@ -5332,6 +5434,9 @@ gettabinfo([{tabnr}]) *gettabinfo()*
tabpage-local variables tabpage-local variables
windows List of |window-ID|s in the tab page. windows List of |window-ID|s in the tab page.
Can also be used as a |method|: >
GetTabnr()->gettabinfo()
gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
Get the value of a tab-local variable {varname} in tab page Get the value of a tab-local variable {varname} in tab page
{tabnr}. |t:var| {tabnr}. |t:var|
@ -5342,6 +5447,9 @@ gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
When the tab or variable doesn't exist {def} or an empty When the tab or variable doesn't exist {def} or an empty
string is returned, there is no error message. string is returned, there is no error message.
Can also be used as a |method|: >
GetTabnr()->gettabvar(varname)
gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
Get the value of window-local variable {varname} in window Get the value of window-local variable {varname} in window
{winnr} in tab page {tabnr}. {winnr} in tab page {tabnr}.
@ -5368,6 +5476,9 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
To obtain all window-local variables use: > To obtain all window-local variables use: >
gettabwinvar({tabnr}, {winnr}, '&') gettabwinvar({tabnr}, {winnr}, '&')
< Can also be used as a |method|: >
GetTabnr()->gettabwinvar(winnr, varname)
gettagstack([{winnr}]) *gettagstack()* gettagstack([{winnr}]) *gettagstack()*
The result is a Dict, which is the tag stack of window {winnr}. The result is a Dict, which is the tag stack of window {winnr}.
{winnr} can be the window number or the |window-ID|. {winnr} can be the window number or the |window-ID|.
@ -5396,6 +5507,9 @@ gettagstack([{winnr}]) *gettagstack()*
See |tagstack| for more information about the tag stack. See |tagstack| for more information about the tag stack.
Can also be used as a |method|: >
GetWinnr()->gettagstack()
getwininfo([{winid}]) *getwininfo()* getwininfo([{winid}]) *getwininfo()*
Returns information about windows as a |List| with Dictionaries. Returns information about windows as a |List| with Dictionaries.
@ -5427,6 +5541,9 @@ getwininfo([{winid}]) *getwininfo()*
winrow topmost screen line of the window; winrow topmost screen line of the window;
"row" from |win_screenpos()| "row" from |win_screenpos()|
Can also be used as a |method|: >
GetWinnr()->getwininfo()
getwinpos([{timeout}]) *getwinpos()* getwinpos([{timeout}]) *getwinpos()*
The result is a |List| with two numbers, the result of The result is a |List| with two numbers, the result of
|getwinposx()| and |getwinposy()| combined: |getwinposx()| and |getwinposy()| combined:
@ -5446,6 +5563,9 @@ getwinpos([{timeout}]) *getwinpos()*
endif endif
" Do some work here " Do some work here
endwhile endwhile
<
Can also be used as a |method|: >
GetTimeout()->getwinpos()
< <
*getwinposx()* *getwinposx()*
getwinposx() The result is a Number, which is the X coordinate in pixels of getwinposx() The result is a Number, which is the X coordinate in pixels of
@ -5464,6 +5584,9 @@ getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Examples: > Examples: >
:let list_is_on = getwinvar(2, '&list') :let list_is_on = getwinvar(2, '&list')
:echo "myvar = " . getwinvar(1, 'myvar') :echo "myvar = " . getwinvar(1, 'myvar')
< Can also be used as a |method|: >
GetWinnr()->getwinvar(varname)
< <
glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
Expand the file wildcards in {expr}. See |wildcards| for the Expand the file wildcards in {expr}. See |wildcards| for the
@ -5501,6 +5624,9 @@ glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
See |expand()| for expanding special Vim variables. See See |expand()| for expanding special Vim variables. See
|system()| for getting the raw output of an external command. |system()| for getting the raw output of an external command.
Can also be used as a |method|: >
GetExpr()->glob()
glob2regpat({string}) *glob2regpat()* glob2regpat({string}) *glob2regpat()*
Convert a file pattern, as used by glob(), into a search Convert a file pattern, as used by glob(), into a search
pattern. The result can be used to match with a string that pattern. The result can be used to match with a string that
@ -5513,7 +5639,9 @@ glob2regpat({string}) *glob2regpat()*
Note that the result depends on the system. On MS-Windows Note that the result depends on the system. On MS-Windows
a backslash usually means a path separator. a backslash usually means a path separator.
*globpath()* Can also be used as a |method|: >
GetExpr()->glob2regpat()
< *globpath()*
globpath({path}, {expr} [, {nosuf} [, {list} [, {allinks}]]]) globpath({path}, {expr} [, {nosuf} [, {list} [, {allinks}]]])
Perform glob() for String {expr} on all directories in {path} Perform glob() for String {expr} on all directories in {path}
and concatenate the results. Example: > and concatenate the results. Example: >
@ -5549,6 +5677,10 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {allinks}]]])
< Upwards search and limiting the depth of "**" is not < Upwards search and limiting the depth of "**" is not
supported, thus using 'path' will not always work properly. supported, thus using 'path' will not always work properly.
Can also be used as a |method|, the base is passed as the
second argument: >
GetExpr()->globpath(&rtp)
<
*has()* *has()*
has({feature}) Returns 1 if {feature} is supported, 0 otherwise. The has({feature}) Returns 1 if {feature} is supported, 0 otherwise. The
{feature} argument is a feature name like "nvim-0.2.1" or {feature} argument is a feature name like "nvim-0.2.1" or
@ -5631,6 +5763,9 @@ haslocaldir([{winnr}[, {tabnr}]]) *haslocaldir()*
{winnr} can be the window number or the |window-ID|. {winnr} can be the window number or the |window-ID|.
If {winnr} is -1 it is ignored, only the tab is resolved. If {winnr} is -1 it is ignored, only the tab is resolved.
Can also be used as a |method|: >
GetWinnr()->haslocaldir()
hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
The result is a Number, which is TRUE if there is a mapping The result is a Number, which is TRUE if there is a mapping
that contains {what} in somewhere in the rhs (what it is that contains {what} in somewhere in the rhs (what it is
@ -5645,7 +5780,9 @@ hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
If no matching mapping is found FALSE is returned. If no matching mapping is found FALSE is returned.
The following characters are recognized in {mode}: The following characters are recognized in {mode}:
n Normal mode n Normal mode
v Visual mode v Visual and Select mode
x Visual mode
s Select mode
o Operator-pending mode o Operator-pending mode
i Insert mode i Insert mode
l Language-Argument ("r", "f", "t", etc.) l Language-Argument ("r", "f", "t", etc.)
@ -5660,6 +5797,9 @@ hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
< This installs the mapping to "\ABCdoit" only if there isn't < This installs the mapping to "\ABCdoit" only if there isn't
already a mapping to "\ABCdoit". already a mapping to "\ABCdoit".
Can also be used as a |method|: >
GetRHS()->hasmapto()
histadd({history}, {item}) *histadd()* histadd({history}, {item}) *histadd()*
Add the String {item} to the history {history} which can be Add the String {item} to the history {history} which can be
one of: *hist-names* one of: *hist-names*
@ -5681,6 +5821,10 @@ histadd({history}, {item}) *histadd()*
:let date=input("Enter date: ") :let date=input("Enter date: ")
< This function is not available in the |sandbox|. < 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()* histdel({history} [, {item}]) *histdel()*
Clear {history}, i.e. delete all its entries. See |hist-names| Clear {history}, i.e. delete all its entries. See |hist-names|
for the possible values of {history}. for the possible values of {history}.
@ -5712,6 +5856,9 @@ histdel({history} [, {item}]) *histdel()*
the "n" command and 'hlsearch': > the "n" command and 'hlsearch': >
:call histdel("search", -1) :call histdel("search", -1)
:let @/ = histget("search", -1) :let @/ = histget("search", -1)
<
Can also be used as a |method|: >
GetHistory()->histdel()
histget({history} [, {index}]) *histget()* histget({history} [, {index}]) *histget()*
The result is a String, the entry with Number {index} from The result is a String, the entry with Number {index} from
@ -5728,6 +5875,9 @@ histget({history} [, {index}]) *histget()*
the {num}th entry from the output of |:history|. > the {num}th entry from the output of |:history|. >
:command -nargs=1 H execute histget("cmd", 0+<args>) :command -nargs=1 H execute histget("cmd", 0+<args>)
< <
Can also be used as a |method|: >
GetHistory()->histget()
histnr({history}) *histnr()* histnr({history}) *histnr()*
The result is the Number of the current entry in {history}. The result is the Number of the current entry in {history}.
See |hist-names| for the possible values of {history}. See |hist-names| for the possible values of {history}.
@ -5735,6 +5885,9 @@ histnr({history}) *histnr()*
Example: > Example: >
:let inp_index = histnr("expr") :let inp_index = histnr("expr")
< Can also be used as a |method|: >
GetHistory()->histnr()
< <
hlexists({name}) *hlexists()* hlexists({name}) *hlexists()*
The result is a Number, which is TRUE if a highlight group The result is a Number, which is TRUE if a highlight group
@ -5743,6 +5896,9 @@ hlexists({name}) *hlexists()*
been defined for it, it may also have been used for a syntax been defined for it, it may also have been used for a syntax
item. item.
Can also be used as a |method|: >
GetName()->hlexists()
<
*hlID()* *hlID()*
hlID({name}) The result is a Number, which is the ID of the highlight group 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, with name {name}. When the highlight group doesn't exist,
@ -5751,6 +5907,9 @@ hlID({name}) The result is a Number, which is the ID of the highlight group
group. For example, to get the background color of the group. For example, to get the background color of the
"Comment" group: > "Comment" group: >
:echo synIDattr(synIDtrans(hlID("Comment")), "bg") :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
<
Can also be used as a |method|: >
GetName()->hlID()
hostname() *hostname()* hostname() *hostname()*
The result is a String, which is the name of the machine on The result is a String, which is the name of the machine on
@ -5769,6 +5928,9 @@ iconv({string}, {from}, {to}) *iconv()*
from/to UCS-2 is automatically changed to use UTF-8. You 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. 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()*
indent({lnum}) The result is a Number, which is indent of line {lnum} in the 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 current buffer. The indent is counted in spaces, the value
@ -5776,6 +5938,8 @@ indent({lnum}) The result is a Number, which is indent of line {lnum} in the
|getline()|. |getline()|.
When {lnum} is invalid -1 is returned. When {lnum} is invalid -1 is returned.
Can also be used as a |method|: >
GetLnum()->indent()
index({object}, {expr} [, {start} [, {ic}]]) *index()* index({object}, {expr} [, {start} [, {ic}]]) *index()*
If {object} is a |List| return the lowest index where the item If {object} is a |List| return the lowest index where the item
@ -5796,6 +5960,8 @@ index({object}, {expr} [, {start} [, {ic}]]) *index()*
:let idx = index(words, "the") :let idx = index(words, "the")
:if index(numbers, 123) >= 0 :if index(numbers, 123) >= 0
< Can also be used as a |method|: >
GetObject()->index(what)
input({prompt} [, {text} [, {completion}]]) *input()* input({prompt} [, {text} [, {completion}]]) *input()*
input({opts}) input({opts})
@ -5908,6 +6074,9 @@ input({opts})
: call inputrestore() : call inputrestore()
:endfunction :endfunction
< Can also be used as a |method|: >
GetPrompt()->input()
inputlist({textlist}) *inputlist()* inputlist({textlist}) *inputlist()*
{textlist} must be a |List| of strings. This |List| is {textlist} must be a |List| of strings. This |List| is
displayed, one string per line. The user will be prompted to displayed, one string per line. The user will be prompted to
@ -5925,6 +6094,9 @@ inputlist({textlist}) *inputlist()*
let color = inputlist(['Select color:', '1. red', let color = inputlist(['Select color:', '1. red',
\ '2. green', '3. blue']) \ '2. green', '3. blue'])
< Can also be used as a |method|: >
GetChoices()->inputlist()
inputrestore() *inputrestore()* inputrestore() *inputrestore()*
Restore typeahead that was saved with a previous |inputsave()|. Restore typeahead that was saved with a previous |inputsave()|.
Should be called the same number of times inputsave() is Should be called the same number of times inputsave() is
@ -5950,6 +6122,9 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
typed on the command-line in response to the issued prompt. typed on the command-line in response to the issued prompt.
NOTE: Command-line completion is not supported. NOTE: Command-line completion is not supported.
Can also be used as a |method|: >
GetPrompt()->inputsecret()
insert({object}, {item} [, {idx}]) *insert()* insert({object}, {item} [, {idx}]) *insert()*
When {object} is a |List| or a |Blob| insert {item} at the start When {object} is a |List| or a |Blob| insert {item} at the start
of it. of it.
@ -5996,6 +6171,9 @@ isdirectory({directory}) *isdirectory()*
exist, or isn't a directory, the result is |FALSE|. {directory} exist, or isn't a directory, the result is |FALSE|. {directory}
is any expression, which is used as a String. is any expression, which is used as a String.
Can also be used as a |method|: >
GetName()->isdirectory()
isinf({expr}) *isinf()* isinf({expr}) *isinf()*
Return 1 if {expr} is a positive infinity, or -1 a negative Return 1 if {expr} is a positive infinity, or -1 a negative
infinity, otherwise 0. > infinity, otherwise 0. >
@ -6021,6 +6199,9 @@ islocked({expr}) *islocked()* *E786*
< When {expr} is a variable that does not exist you get an error < When {expr} is a variable that does not exist you get an error
message. Use |exists()| to check for existence. message. Use |exists()| to check for existence.
Can also be used as a |method|: >
GetName()->islocked()
id({expr}) *id()* id({expr}) *id()*
Returns a |String| which is a unique identifier of the Returns a |String| which is a unique identifier of the
container type (|List|, |Dict|, |Blob| and |Partial|). It is container type (|List|, |Dict|, |Blob| and |Partial|). It is
@ -6205,6 +6386,9 @@ json_decode({expr}) *json_decode()*
recommended and the only one required to be supported. recommended and the only one required to be supported.
Non-UTF-8 characters are an error. Non-UTF-8 characters are an error.
Can also be used as a |method|: >
ReadObject()->json_decode()
json_encode({expr}) *json_encode()* json_encode({expr}) *json_encode()*
Convert {expr} into a JSON string. Accepts Convert {expr} into a JSON string. Accepts
|msgpack-special-dict| as the input. Will not convert |msgpack-special-dict| as the input. Will not convert
@ -6217,6 +6401,9 @@ json_encode({expr}) *json_encode()*
or special escapes like "\t", other are dumped as-is. or special escapes like "\t", other are dumped as-is.
|Blob|s are converted to arrays of the individual bytes. |Blob|s are converted to arrays of the individual bytes.
Can also be used as a |method|: >
GetObject()->json_encode()
keys({dict}) *keys()* keys({dict}) *keys()*
Return a |List| with all the keys of {dict}. The |List| is in Return a |List| with all the keys of {dict}. The |List| is in
arbitrary order. Also see |items()| and |values()|. arbitrary order. Also see |items()| and |values()|.
@ -6280,6 +6467,10 @@ libcall({libname}, {funcname}, {argument})
object code must be compiled as position-independent ('PIC'). object code must be compiled as position-independent ('PIC').
Examples: > Examples: >
:echo libcall("libc.so", "getenv", "HOME") :echo libcall("libc.so", "getenv", "HOME")
< Can also be used as a |method|, where the base is passed as
the argument to the called function: >
GetValue()->libcall("libc.so", "getenv")
< <
*libcallnr()* *libcallnr()*
libcallnr({libname}, {funcname}, {argument}) libcallnr({libname}, {funcname}, {argument})
@ -6290,8 +6481,12 @@ libcallnr({libname}, {funcname}, {argument})
:call libcallnr("libc.so", "printf", "Hello World!\n") :call libcallnr("libc.so", "printf", "Hello World!\n")
:call libcallnr("libc.so", "sleep", 10) :call libcallnr("libc.so", "sleep", 10)
< <
*line()* Can also be used as a |method|, where the base is passed as
line({expr}) The result is a Number, which is the line number of the file the argument to the called function: >
GetValue()->libcallnr("libc.so", "printf")
<
line({expr} [, {winid}]) *line()*
The result is a Number, which is the line number of the file
position given with {expr}. The {expr} argument is a string. position given with {expr}. The {expr} argument is a string.
The accepted positions are: The accepted positions are:
. the cursor position . the cursor position
@ -6310,10 +6505,16 @@ line({expr}) The result is a Number, which is the line number of the file
then applies to another buffer. then applies to another buffer.
To get the column number use |col()|. To get both use To get the column number use |col()|. To get both use
|getpos()|. |getpos()|.
With the optional {winid} argument the values are obtained for
that window instead of the current window.
Examples: > Examples: >
line(".") line number of the cursor line(".") line number of the cursor
line(".", winid) idem, in window "winid"
line("'t") line number of mark t line("'t") line number of mark t
line("'" . marker) line number of mark marker line("'" . marker) line number of mark marker
<
Can also be used as a |method|: >
GetValue()->line()
line2byte({lnum}) *line2byte()* line2byte({lnum}) *line2byte()*
Return the byte count from the start of the buffer for line Return the byte count from the start of the buffer for line
@ -6328,6 +6529,9 @@ line2byte({lnum}) *line2byte()*
|getline()|. When {lnum} is invalid -1 is returned. |getline()|. When {lnum} is invalid -1 is returned.
Also see |byte2line()|, |go| and |:goto|. Also see |byte2line()|, |go| and |:goto|.
Can also be used as a |method|: >
GetLnum()->line2byte()
lispindent({lnum}) *lispindent()* lispindent({lnum}) *lispindent()*
Get the amount of indent for line {lnum} according the lisp Get the amount of indent for line {lnum} according the lisp
indenting rules, as with 'lisp'. indenting rules, as with 'lisp'.
@ -6335,6 +6539,9 @@ lispindent({lnum}) *lispindent()*
relevant. {lnum} is used just like in |getline()|. relevant. {lnum} is used just like in |getline()|.
When {lnum} is invalid, -1 is returned. When {lnum} is invalid, -1 is returned.
Can also be used as a |method|: >
GetLnum()->lispindent()
list2str({list} [, {utf8}]) *list2str()* list2str({list} [, {utf8}]) *list2str()*
Convert each number in {list} to a character string can Convert each number in {list} to a character string can
concatenate them all. Examples: > concatenate them all. Examples: >
@ -6349,6 +6556,9 @@ list2str({list} [, {utf8}]) *list2str()*
With UTF-8 composing characters work as expected: > With UTF-8 composing characters work as expected: >
list2str([97, 769]) returns "á" list2str([97, 769]) returns "á"
< <
Can also be used as a |method|: >
GetList()->list2str()
localtime() *localtime()* localtime() *localtime()*
Return the current time, measured as seconds since 1st Jan Return the current time, measured as seconds since 1st Jan
1970. See also |strftime()|, |strptime()| and |getftime()|. 1970. See also |strftime()|, |strptime()| and |getftime()|.
@ -6383,6 +6593,9 @@ luaeval({expr}[, {expr}])
Evaluate Lua expression {expr} and return its result converted Evaluate Lua expression {expr} and return its result converted
to Vim data structures. See |lua-eval| for more details. to Vim data structures. See |lua-eval| for more details.
Can also be used as a |method|: >
GetExpr()->luaeval()
map({expr1}, {expr2}) *map()* map({expr1}, {expr2}) *map()*
{expr1} must be a |List|, |Blob| or |Dictionary|. {expr1} must be a |List|, |Blob| or |Dictionary|.
Replace each item in {expr1} with the result of evaluating Replace each item in {expr1} with the result of evaluating
@ -6490,6 +6703,8 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
mapped, and have it do the original mapping too. Sketch: > mapped, and have it do the original mapping too. Sketch: >
exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
< Can also be used as a |method|: >
GetKey()->maparg('n')
mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()* mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
Check if there is a mapping that matches with {name} in mode Check if there is a mapping that matches with {name} in mode
@ -6524,6 +6739,9 @@ mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
< This avoids adding the "_vv" mapping when there already is a < This avoids adding the "_vv" mapping when there already is a
mapping for "_v" or for "_vvv". mapping for "_v" or for "_vvv".
Can also be used as a |method|: >
GetKey()->mapcheck('n')
match({expr}, {pat} [, {start} [, {count}]]) *match()* match({expr}, {pat} [, {start} [, {count}]]) *match()*
When {expr} is a |List| then this returns the index of the When {expr} is a |List| then this returns the index of the
first item where {pat} matches. Each item is used as a first item where {pat} matches. Each item is used as a
@ -6586,6 +6804,9 @@ match({expr}, {pat} [, {start} [, {count}]]) *match()*
zero matches at the start instead of a number of matches zero matches at the start instead of a number of matches
further down in the text. further down in the text.
Can also be used as a |method|: >
GetList()->match('word')
<
*matchadd()* *E798* *E799* *E801* *E957* *matchadd()* *E798* *E799* *E801* *E957*
matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]]) matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]])
Defines a pattern to be highlighted in the current window (a Defines a pattern to be highlighted in the current window (a
@ -6641,6 +6862,9 @@ matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]])
available from |getmatches()|. All matches can be deleted in available from |getmatches()|. All matches can be deleted in
one operation by |clearmatches()|. one operation by |clearmatches()|.
Can also be used as a |method|: >
GetGroup()->matchadd('TODO')
<
*matchaddpos()* *matchaddpos()*
matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Same as |matchadd()|, but requires a list of positions {pos} Same as |matchadd()|, but requires a list of positions {pos}
@ -6679,6 +6903,9 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
< Matches added by |matchaddpos()| are returned by < Matches added by |matchaddpos()| are returned by
|getmatches()|. |getmatches()|.
Can also be used as a |method|: >
GetGroup()->matchaddpos([23, 11])
matcharg({nr}) *matcharg()* matcharg({nr}) *matcharg()*
Selects the {nr} match item, as set with a |:match|, Selects the {nr} match item, as set with a |:match|,
|:2match| or |:3match| command. |:2match| or |:3match| command.
@ -6691,6 +6918,9 @@ matcharg({nr}) *matcharg()*
Highlighting matches using the |:match| commands are limited Highlighting matches using the |:match| commands are limited
to three matches. |matchadd()| does not have this limitation. to three matches. |matchadd()| does not have this limitation.
Can also be used as a |method|: >
GetMatch()->matcharg()
matchdelete({id} [, {win}]) *matchdelete()* *E802* *E803* matchdelete({id} [, {win}]) *matchdelete()* *E802* *E803*
Deletes a match with ID {id} previously defined by |matchadd()| Deletes a match with ID {id} previously defined by |matchadd()|
or one of the |:match| commands. Returns 0 if successful, or one of the |:match| commands. Returns 0 if successful,
@ -6699,6 +6929,9 @@ matchdelete({id} [, {win}]) *matchdelete()* *E802* *E803*
If {win} is specified, use the window with this number or If {win} is specified, use the window with this number or
window ID instead of the current window. window ID instead of the current window.
Can also be used as a |method|: >
GetMatch()->matchdelete()
matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()* matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()*
Same as |match()|, but return the index of first character Same as |match()|, but return the index of first character
after the match. Example: > after the match. Example: >
@ -6718,6 +6951,9 @@ matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()*
< result is "-1". < result is "-1".
When {expr} is a |List| the result is equal to |match()|. 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()* matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Same as |match()|, but return a |List|. The first item in the Same as |match()|, but return a |List|. The first item in the
list is the matched string, same as what matchstr() would list is the matched string, same as what matchstr() would
@ -6728,6 +6964,9 @@ matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] < Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
When there is no match an empty list is returned. 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()* matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()*
Same as |match()|, but return the matched string. Example: > Same as |match()|, but return the matched string. Example: >
:echo matchstr("testing", "ing") :echo matchstr("testing", "ing")
@ -6741,6 +6980,9 @@ matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()*
When {expr} is a |List| then the matching item is returned. When {expr} is a |List| then the matching item is returned.
The type isn't changed, it's not necessarily a String. 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()* matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
Same as |matchstr()|, but return the matched string, the start Same as |matchstr()|, but return the matched string, the start
position and the end position of the match. Example: > position and the end position of the match. Example: >
@ -6759,6 +7001,9 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
< result is ["x", 1, 2, 3]. < result is ["x", 1, 2, 3].
The type isn't changed, it's not necessarily a String. The type isn't changed, it's not necessarily a String.
Can also be used as a |method|: >
GetText()->matchstrpos('word')
*max()* *max()*
max({expr}) Return the maximum value of all items in {expr}. max({expr}) Return the maximum value of all items in {expr}.
{expr} can be a |List| or a |Dictionary|. For a Dictionary, {expr} can be a |List| or a |Dictionary|. For a Dictionary,
@ -6849,6 +7094,9 @@ mkdir({name} [, {path} [, {prot}]])
successful or FALSE if the directory creation failed or partly successful or FALSE if the directory creation failed or partly
failed. failed.
Can also be used as a |method|: >
GetName()->mkdir()
<
*mode()* *mode()*
mode([expr]) Return a string that indicates the current mode. mode([expr]) Return a string that indicates the current mode.
If [expr] is supplied and it evaluates to a non-zero Number or If [expr] is supplied and it evaluates to a non-zero Number or
@ -6900,6 +7148,9 @@ mode([expr]) Return a string that indicates the current mode.
the leading character(s). the leading character(s).
Also see |visualmode()|. Also see |visualmode()|.
Can also be used as a |method|: >
DoFull()->mode()
msgpackdump({list} [, {type}]) *msgpackdump()* msgpackdump({list} [, {type}]) *msgpackdump()*
Convert a list of VimL objects to msgpack. Returned value is a Convert a list of VimL objects to msgpack. Returned value is a
|readfile()|-style list. When {type} contains "B", a |Blob| is |readfile()|-style list. When {type} contains "B", a |Blob| is
@ -7002,6 +7253,9 @@ nextnonblank({lnum}) *nextnonblank()*
{lnum} is used like with |getline()|. {lnum} is used like with |getline()|.
See also |prevnonblank()|. See also |prevnonblank()|.
Can also be used as a |method|: >
GetLnum()->nextnonblank()
nr2char({expr} [, {utf8}]) *nr2char()* nr2char({expr} [, {utf8}]) *nr2char()*
Return a string with a single character, which has the number Return a string with a single character, which has the number
value {expr}. Examples: > value {expr}. Examples: >
@ -7016,6 +7270,9 @@ nr2char({expr} [, {utf8}]) *nr2char()*
characters. nr2char(0) is a real NUL and terminates the characters. nr2char(0) is a real NUL and terminates the
string, thus results in an empty string. string, thus results in an empty string.
Can also be used as a |method|: >
GetNumber()->nr2char()
nvim_...({...}) *E5555* *nvim_...()* *eval-api* nvim_...({...}) *E5555* *nvim_...()* *eval-api*
Call nvim |api| functions. The type checking of arguments will Call nvim |api| functions. The type checking of arguments will
be stricter than for most other builtins. For instance, be stricter than for most other builtins. For instance,
@ -7044,6 +7301,9 @@ pathshorten({path}) *pathshorten()*
< ~/.c/n/a/file1.vim ~ < ~/.c/n/a/file1.vim ~
It doesn't matter if the path exists or not. It doesn't matter if the path exists or not.
Can also be used as a |method|: >
GetDirectories()->pathshorten()
perleval({expr}) *perleval()* perleval({expr}) *perleval()*
Evaluate |perl| expression {expr} and return its result Evaluate |perl| expression {expr} and return its result
converted to Vim data structures. converted to Vim data structures.
@ -7059,6 +7319,9 @@ perleval({expr}) *perleval()*
:echo perleval('[1 .. 4]') :echo perleval('[1 .. 4]')
< [1, 2, 3, 4] < [1, 2, 3, 4]
Can also be used as a |method|: >
GetExpr()->perleval()
pow({x}, {y}) *pow()* pow({x}, {y}) *pow()*
Return the power of {x} to the exponent {y} as a |Float|. Return the power of {x} to the exponent {y} as a |Float|.
{x} and {y} must evaluate to a |Float| or a |Number|. {x} and {y} must evaluate to a |Float| or a |Number|.
@ -7082,6 +7345,8 @@ prevnonblank({lnum}) *prevnonblank()*
{lnum} is used like with |getline()|. {lnum} is used like with |getline()|.
Also see |nextnonblank()|. Also see |nextnonblank()|.
Can also be used as a |method|: >
GetLnum()->prevnonblank()
printf({fmt}, {expr1} ...) *printf()* printf({fmt}, {expr1} ...) *printf()*
Return a String with {fmt}, where "%" items are replaced by Return a String with {fmt}, where "%" items are replaced by
@ -7314,6 +7579,9 @@ prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
endif endif
endfunc endfunc
< Can also be used as a |method|: >
GetBuffer()->prompt_setcallback(callback)
prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()* prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
Set a callback for buffer {buf} to {expr}. When {expr} is an Set a callback for buffer {buf} to {expr}. When {expr} is an
empty string the callback is removed. This has only effect if empty string the callback is removed. This has only effect if
@ -7323,12 +7591,18 @@ prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
mode. Without setting a callback Vim will exit Insert mode, mode. Without setting a callback Vim will exit Insert mode,
as in any buffer. as in any buffer.
Can also be used as a |method|: >
GetBuffer()->prompt_setinterrupt(callback)
prompt_setprompt({buf}, {text}) *prompt_setprompt()* prompt_setprompt({buf}, {text}) *prompt_setprompt()*
Set prompt for buffer {buf} to {text}. You most likely want Set prompt for buffer {buf} to {text}. You most likely want
{text} to end in a space. {text} to end in a space.
The result is only visible if {buf} has 'buftype' set to The result is only visible if {buf} has 'buftype' set to
"prompt". Example: > "prompt". Example: >
call prompt_setprompt(bufnr(''), 'command: ') call prompt_setprompt(bufnr(''), 'command: ')
<
Can also be used as a |method|: >
GetBuffer()->prompt_setprompt('command: ')
pum_getpos() *pum_getpos()* pum_getpos() *pum_getpos()*
If the popup menu (see |ins-completion-menu|) is not visible, If the popup menu (see |ins-completion-menu|) is not visible,
@ -7359,6 +7633,9 @@ py3eval({expr}) *py3eval()*
Dictionaries are represented as Vim |Dictionary| type with Dictionaries are represented as Vim |Dictionary| type with
keys converted to strings. keys converted to strings.
Can also be used as a |method|: >
GetExpr()->py3eval()
<
*E858* *E859* *E858* *E859*
pyeval({expr}) *pyeval()* pyeval({expr}) *pyeval()*
Evaluate Python expression {expr} and return its result Evaluate Python expression {expr} and return its result
@ -7369,12 +7646,18 @@ pyeval({expr}) *pyeval()*
Dictionaries are represented as Vim |Dictionary| type, Dictionaries are represented as Vim |Dictionary| type,
non-string keys result in error. non-string keys result in error.
Can also be used as a |method|: >
GetExpr()->pyeval()
pyxeval({expr}) *pyxeval()* pyxeval({expr}) *pyxeval()*
Evaluate Python expression {expr} and return its result Evaluate Python expression {expr} and return its result
converted to Vim data structures. converted to Vim data structures.
Uses Python 2 or 3, see |python_x| and 'pyxversion'. Uses Python 2 or 3, see |python_x| and 'pyxversion'.
See also: |pyeval()|, |py3eval()| See also: |pyeval()|, |py3eval()|
Can also be used as a |method|: >
GetExpr()->pyxeval()
<
*E726* *E727* *E726* *E727*
range({expr} [, {max} [, {stride}]]) *range()* range({expr} [, {max} [, {stride}]]) *range()*
Returns a |List| with Numbers: Returns a |List| with Numbers:
@ -7393,6 +7676,9 @@ range({expr} [, {max} [, {stride}]]) *range()*
range(2, -2, -1) " [2, 1, 0, -1, -2] range(2, -2, -1) " [2, 1, 0, -1, -2]
range(0) " [] range(0) " []
range(2, 0) " error! range(2, 0) " error!
<
Can also be used as a |method|: >
GetExpr()->range()
< <
*readdir()* *readdir()*
readdir({directory} [, {expr}]) readdir({directory} [, {expr}])
@ -7420,6 +7706,9 @@ readdir({directory} [, {expr}])
\ {x : s:tree(a:dir . '/' . x)} : x})} \ {x : s:tree(a:dir . '/' . x)} : x})}
endfunction endfunction
echo s:tree(".") echo s:tree(".")
<
Can also be used as a |method|: >
GetDirName()->readdir()
< <
*readfile()* *readfile()*
readfile({fname} [, {type} [, {max}]]) readfile({fname} [, {type} [, {max}]])
@ -7454,6 +7743,9 @@ readfile({fname} [, {type} [, {max}]])
the result is an empty list. the result is an empty list.
Also see |writefile()|. Also see |writefile()|.
Can also be used as a |method|: >
GetFileName()->readfile()
reg_executing() *reg_executing()* reg_executing() *reg_executing()*
Returns the single letter name of the register being executed. Returns the single letter name of the register being executed.
Returns an empty string when no register is being executed. Returns an empty string when no register is being executed.
@ -7481,6 +7773,9 @@ reltime([{start} [, {end}]]) *reltime()*
The {start} and {end} arguments must be values returned by The {start} and {end} arguments must be values returned by
reltime(). reltime().
Can also be used as a |method|: >
GetStart()->reltime()
<
Note: |localtime()| returns the current (non-relative) time. Note: |localtime()| returns the current (non-relative) time.
reltimefloat({time}) *reltimefloat()* reltimefloat({time}) *reltimefloat()*
@ -7494,6 +7789,9 @@ reltimefloat({time}) *reltimefloat()*
Also see |profiling|. Also see |profiling|.
If there is an error an empty string is returned If there is an error an empty string is returned
Can also be used as a |method|: >
reltime(start)->reltimefloat()
reltimestr({time}) *reltimestr()* reltimestr({time}) *reltimestr()*
Return a String that represents the time value of {time}. Return a String that represents the time value of {time}.
This is the number of seconds, a dot and the number of This is the number of seconds, a dot and the number of
@ -7508,6 +7806,9 @@ reltimestr({time}) *reltimestr()*
< Also see |profiling|. < Also see |profiling|.
If there is an error an empty string is returned If there is an error an empty string is returned
Can also be used as a |method|: >
reltime(start)->reltimestr()
<
*remote_expr()* *E449* *remote_expr()* *E449*
remote_expr({server}, {string} [, {idvar} [, {timeout}]]) remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Send the {string} to {server}. The string is sent as an Send the {string} to {server}. The string is sent as an
@ -7640,6 +7941,9 @@ rename({from}, {to}) *rename()*
NOTE: If {to} exists it is overwritten without warning. NOTE: If {to} exists it is overwritten without warning.
This function is not available in the |sandbox|. This function is not available in the |sandbox|.
Can also be used as a |method|: >
GetOldName()->rename(newname)
repeat({expr}, {count}) *repeat()* repeat({expr}, {count}) *repeat()*
Repeat {expr} {count} times and return the concatenated Repeat {expr} {count} times and return the concatenated
result. Example: > result. Example: >
@ -7666,6 +7970,9 @@ resolve({filename}) *resolve()* *E655*
current directory (provided the result is still a relative current directory (provided the result is still a relative
path name) and also keeps a trailing path separator. path name) and also keeps a trailing path separator.
Can also be used as a |method|: >
GetName()->resolve()
<
*reverse()* *reverse()*
reverse({object}) reverse({object})
Reverse the order of items in {object} in-place. Reverse the order of items in {object} in-place.
@ -7720,6 +8027,9 @@ rubyeval({expr}) *rubyeval()*
Other objects are represented as strings resulted from their Other objects are represented as strings resulted from their
"Object#to_s" method. "Object#to_s" method.
Can also be used as a |method|: >
GetRubyExpr()->rubyeval()
screenattr({row}, {col}) *screenattr()* screenattr({row}, {col}) *screenattr()*
Like |screenchar()|, but return the attribute. This is a rather Like |screenchar()|, but return the attribute. This is a rather
arbitrary number that can only be used to compare to the arbitrary number that can only be used to compare to the
@ -8283,6 +8593,9 @@ setfperm({fname}, {mode}) *setfperm()* *chmod*
Returns non-zero for success, zero for failure. Returns non-zero for success, zero for failure.
Can also be used as a |method|: >
GetFilename()->setfperm(mode)
<
To read permissions see |getfperm()|. To read permissions see |getfperm()|.
setline({lnum}, {text}) *setline()* setline({lnum}, {text}) *setline()*

View File

@ -102,44 +102,44 @@ return {
diff_hlID={args=2, base=1}, diff_hlID={args=2, base=1},
empty={args=1, base=1}, empty={args=1, base=1},
environ={}, environ={},
escape={args=2}, escape={args=2, base=1},
eval={args=1, base=1}, eval={args=1, base=1},
eventhandler={}, eventhandler={},
executable={args=1}, executable={args=1, base=1},
execute={args={1, 2}}, execute={args={1, 2}, base=1},
exepath={args=1}, exepath={args=1, base=1},
exists={args=1}, exists={args=1, base=1},
exp={args=1, base=1, func="float_op_wrapper", data="&exp"}, exp={args=1, base=1, func="float_op_wrapper", data="&exp"},
expand={args={1, 3}}, expand={args={1, 3}, base=1},
expandcmd={args=1}, expandcmd={args=1, base=1},
extend={args={2, 3}, base=1}, extend={args={2, 3}, base=1},
feedkeys={args={1, 2}}, feedkeys={args={1, 2}, base=1},
file_readable={args=1, func='f_filereadable'}, -- obsolete file_readable={args=1, base=1, func='f_filereadable'}, -- obsolete
filereadable={args=1}, filereadable={args=1, base=1},
filewritable={args=1}, filewritable={args=1, base=1},
filter={args=2, base=1}, filter={args=2, base=1},
finddir={args={1, 3}}, finddir={args={1, 3}, base=1},
findfile={args={1, 3}}, findfile={args={1, 3}, base=1},
flatten={args={1, 2}}, flatten={args={1, 2}},
float2nr={args=1, base=1}, float2nr={args=1, base=1},
floor={args=1, base=1, func="float_op_wrapper", data="&floor"}, floor={args=1, base=1, func="float_op_wrapper", data="&floor"},
fmod={args=2, base=1}, fmod={args=2, base=1},
fnameescape={args=1}, fnameescape={args=1, base=1},
fnamemodify={args=2}, fnamemodify={args=2, base=1},
foldclosed={args=1}, foldclosed={args=1, base=1},
foldclosedend={args=1}, foldclosedend={args=1, base=1},
foldlevel={args=1}, foldlevel={args=1, base=1},
foldtext={}, foldtext={},
foldtextresult={args=1}, foldtextresult={args=1, base=1},
foreground={}, foreground={},
funcref={args={1, 3}}, funcref={args={1, 3}, base=1},
['function']={args={1, 3}}, ['function']={args={1, 3}, base=1},
garbagecollect={args={0, 1}}, garbagecollect={args={0, 1}},
get={args={2, 3}, base=1}, get={args={2, 3}, base=1},
getbufinfo={args={0, 1}}, getbufinfo={args={0, 1}},
getbufline={args={2, 3}}, getbufline={args={2, 3}, base=1},
getbufvar={args={2, 3}}, getbufvar={args={2, 3}, base=1},
getchangelist={args={1, 1}}, getchangelist={args={0, 1}, base=1},
getchar={args={0, 1}}, getchar={args={0, 1}},
getcharmod={}, getcharmod={},
getcharsearch={}, getcharsearch={},
@ -148,67 +148,67 @@ return {
getcmdpos={}, getcmdpos={},
getcmdtype={}, getcmdtype={},
getcmdwintype={}, getcmdwintype={},
getcompletion={args={2, 3}}, getcompletion={args={2, 3}, base=1},
getcurpos={}, getcurpos={},
getcwd={args={0,2}}, getcwd={args={0, 2}, base=1},
getenv={args={1}}, getenv={args={1}, base=1},
getfontname={args={0, 1}}, getfontname={args={0, 1}},
getfperm={args=1}, getfperm={args=1, base=1},
getfsize={args=1}, getfsize={args=1, base=1},
getftime={args=1}, getftime={args=1, base=1},
getftype={args=1}, getftype={args=1, base=1},
getjumplist={args={0, 2}}, getjumplist={args={0, 2}, base=1},
getline={args={1, 2}}, getline={args={1, 2}, base=1},
getloclist={args={1, 2}}, getloclist={args={1, 2}},
getmarklist={args={0, 1}}, getmarklist={args={0, 1}},
getmatches={args={0, 1}}, getmatches={args={0, 1}},
getmousepos={}, getmousepos={},
getpid={}, getpid={},
getpos={args=1}, getpos={args=1, base=1},
getqflist={args={0, 1}}, getqflist={args={0, 1}},
getreg={args={0, 3}}, getreg={args={0, 3}, base=1},
getreginfo={args={0, 1}, base=1}, getreginfo={args={0, 1}, base=1},
getregtype={args={0, 1}}, getregtype={args={0, 1}, base=1},
gettabinfo={args={0, 1}}, gettabinfo={args={0, 1}, base=1},
gettabvar={args={2, 3}}, gettabvar={args={2, 3}, base=1},
gettabwinvar={args={3, 4}}, gettabwinvar={args={3, 4}, base=1},
gettagstack={args={0, 1}}, gettagstack={args={0, 1}, base=1},
getwininfo={args={0, 1}}, getwininfo={args={0, 1}, base=1},
getwinpos={args={0, 1}}, getwinpos={args={0, 1}, base=1},
getwinposx={}, getwinposx={},
getwinposy={}, getwinposy={},
getwinvar={args={2, 3}}, getwinvar={args={2, 3}, base=1},
glob={args={1, 4}}, glob={args={1, 4}, base=1},
glob2regpat={args=1}, glob2regpat={args=1, base=1},
globpath={args={2, 5}}, globpath={args={2, 5}, base=2},
has={args=1}, has={args=1},
has_key={args=2, base=1}, has_key={args=2, base=1},
haslocaldir={args={0,2}}, haslocaldir={args={0, 2}, base=1},
hasmapto={args={1, 3}}, hasmapto={args={1, 3}, base=1},
highlightID={args=1, func='f_hlID'}, -- obsolete highlightID={args=1, base=1, func='f_hlID'}, -- obsolete
highlight_exists={args=1, func='f_hlexists'}, -- obsolete highlight_exists={args=1, base=1, func='f_hlexists'}, -- obsolete
histadd={args=2}, histadd={args=2, base=2},
histdel={args={1, 2}}, histdel={args={1, 2}, base=1},
histget={args={1, 2}}, histget={args={1, 2}, base=1},
histnr={args=1}, histnr={args=1, base=1},
hlID={args=1}, hlID={args=1, base=1},
hlexists={args=1}, hlexists={args=1, base=1},
hostname={}, hostname={},
iconv={args=3}, iconv={args=3, base=1},
indent={args=1}, indent={args=1, base=1},
index={args={2, 4}, base=1}, index={args={2, 4}, base=1},
input={args={1, 3}}, input={args={1, 3}, base=1},
inputdialog={args={1, 3}}, inputdialog={args={1, 3}, base=1},
inputlist={args=1}, inputlist={args=1, base=1},
inputrestore={}, inputrestore={},
inputsave={}, inputsave={},
inputsecret={args={1, 2}}, inputsecret={args={1, 2}, base=1},
insert={args={2, 3}, base=1}, insert={args={2, 3}, base=1},
interrupt={args=0}, interrupt={args=0},
invert={args=1, base=1}, invert={args=1, base=1},
isdirectory={args=1}, isdirectory={args=1, base=1},
isinf={args=1, base=1}, isinf={args=1, base=1},
islocked={args=1}, islocked={args=1, base=1},
isnan={args=1, base=1}, isnan={args=1, base=1},
id={args=1}, id={args=1},
items={args=1, base=1}, items={args=1, base=1},
@ -220,76 +220,76 @@ return {
jobstop={args=1}, jobstop={args=1},
jobwait={args={1, 2}}, jobwait={args={1, 2}},
join={args={1, 2}, base=1}, join={args={1, 2}, base=1},
json_decode={args=1}, json_decode={args=1, base=1},
json_encode={args=1}, json_encode={args=1, base=1},
keys={args=1, base=1}, keys={args=1, base=1},
last_buffer_nr={}, -- obsolete last_buffer_nr={}, -- obsolete
len={args=1, base=1}, len={args=1, base=1},
libcall={args=3}, libcall={args=3, base=3},
libcallnr={args=3}, libcallnr={args=3, base=3},
line={args={1, 2}}, line={args={1, 2}, base=1},
line2byte={args=1}, line2byte={args=1, base=1},
lispindent={args=1}, lispindent={args=1, base=1},
list2str={args={1, 2}}, list2str={args={1, 2}, base=1},
localtime={}, localtime={},
log={args=1, base=1, func="float_op_wrapper", data="&log"}, log={args=1, base=1, func="float_op_wrapper", data="&log"},
log10={args=1, base=1, func="float_op_wrapper", data="&log10"}, log10={args=1, base=1, func="float_op_wrapper", data="&log10"},
luaeval={args={1, 2}}, luaeval={args={1, 2}, base=1},
map={args=2, base=1}, map={args=2, base=1},
maparg={args={1, 4}}, maparg={args={1, 4}, base=1},
mapcheck={args={1, 3}}, mapcheck={args={1, 3}, base=1},
match={args={2, 4}}, match={args={2, 4}, base=1},
matchadd={args={2, 5}}, matchadd={args={2, 5}, base=1},
matchaddpos={args={2, 5}}, matchaddpos={args={2, 5}, base=1},
matcharg={args=1}, matcharg={args=1, base=1},
matchdelete={args={1, 2}}, matchdelete={args={1, 2}, base=1},
matchend={args={2, 4}}, matchend={args={2, 4}, base=1},
matchlist={args={2, 4}}, matchlist={args={2, 4}, base=1},
matchstr={args={2, 4}}, matchstr={args={2, 4}, base=1},
matchstrpos={args={2,4}}, matchstrpos={args={2,4}, base=1},
max={args=1, base=1}, max={args=1, base=1},
menu_get={args={1, 2}}, menu_get={args={1, 2}},
min={args=1, base=1}, min={args=1, base=1},
mkdir={args={1, 3}}, mkdir={args={1, 3}, base=1},
mode={args={0, 1}}, mode={args={0, 1}, base=1},
msgpackdump={args={1, 2}}, msgpackdump={args={1, 2}},
msgpackparse={args=1}, msgpackparse={args=1},
nextnonblank={args=1}, nextnonblank={args=1, base=1},
nr2char={args={1, 2}}, nr2char={args={1, 2}, base=1},
['or']={args=2, base=1}, ['or']={args=2, base=1},
pathshorten={args=1}, pathshorten={args=1, base=1},
pow={args=2, base=1}, pow={args=2, base=1},
prevnonblank={args=1}, prevnonblank={args=1, base=1},
printf={args=varargs(1), base=2}, printf={args=varargs(1), base=2},
prompt_getprompt={args=1}, prompt_getprompt={args=1},
prompt_setcallback={args={2, 2}}, prompt_setcallback={args={2, 2}, base=1},
prompt_setinterrupt={args={2, 2}}, prompt_setinterrupt={args={2, 2}, base=1},
prompt_setprompt={args={2, 2}}, prompt_setprompt={args={2, 2}, base=1},
pum_getpos={}, pum_getpos={},
pumvisible={}, pumvisible={},
py3eval={args=1}, py3eval={args=1, base=1},
pyeval={args=1}, pyeval={args=1, base=1},
pyxeval={args=1}, pyxeval={args=1, base=1},
perleval={args=1}, perleval={args=1, base=1},
range={args={1, 3}}, range={args={1, 3}, base=1},
readdir={args={1, 2}}, readdir={args={1, 2}, base=1},
readfile={args={1, 3}}, readfile={args={1, 3}, base=1},
reg_executing={}, reg_executing={},
reg_recording={}, reg_recording={},
reltime={args={0, 2}}, reltime={args={0, 2}, base=1},
reltimefloat={args=1}, reltimefloat={args=1, base=1},
reltimestr={args=1}, reltimestr={args=1, base=1},
remove={args={2, 3}, base=1}, remove={args={2, 3}, base=1},
rename={args=2}, rename={args=2, base=1},
['repeat']={args=2, base=1}, ['repeat']={args=2, base=1},
resolve={args=1}, resolve={args=1, base=1},
reverse={args=1, base=1}, reverse={args=1, base=1},
round={args=1, base=1, func="float_op_wrapper", data="&round"}, round={args=1, base=1, func="float_op_wrapper", data="&round"},
rpcnotify={args=varargs(2)}, rpcnotify={args=varargs(2)},
rpcrequest={args=varargs(2)}, rpcrequest={args=varargs(2)},
rpcstart={args={1, 2}}, rpcstart={args={1, 2}},
rpcstop={args=1}, rpcstop={args=1},
rubyeval={args=1}, rubyeval={args=1, base=1},
screenattr={args=2}, screenattr={args=2},
screenchar={args=2}, screenchar={args=2},
screenchars={args=2}, screenchars={args=2},
@ -311,7 +311,7 @@ return {
setcharsearch={args=1}, setcharsearch={args=1},
setcmdpos={args=1}, setcmdpos={args=1},
setenv={args=2}, setenv={args=2},
setfperm={args=2}, setfperm={args=2, base=1},
setline={args=2}, setline={args=2},
setloclist={args={2, 4}}, setloclist={args={2, 4}},
setmatches={args={1, 2}}, setmatches={args={1, 2}},

View File

@ -3088,10 +3088,16 @@ f_getbufvar_end:
static void f_getchangelist(typval_T *argvars, typval_T *rettv, FunPtr fptr) static void f_getchangelist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{ {
tv_list_alloc_ret(rettv, 2); tv_list_alloc_ret(rettv, 2);
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 vim_ignored = tv_get_number(&argvars[0]); // issue errmsg if type error
emsg_off++; emsg_off++;
const buf_T *const buf = tv_get_buf(&argvars[0], false); buf = tv_get_buf(&argvars[0], false);
emsg_off--; emsg_off--;
}
if (buf == NULL) { if (buf == NULL) {
return; return;
} }

View File

@ -88,7 +88,7 @@ func Test_argadd_empty_curbuf()
argadd Xargadd argadd Xargadd
call assert_equal(curbuf, bufnr('%')) call assert_equal(curbuf, bufnr('%'))
call assert_equal('', bufname('%')) call assert_equal('', bufname('%'))
call assert_equal(1, line('$')) call assert_equal(1, '$'->line())
rew rew
call assert_notequal(curbuf, '%'->bufnr()) call assert_notequal(curbuf, '%'->bufnr())
call assert_equal('Xargadd', '%'->bufname()) call assert_equal('Xargadd', '%'->bufname())

View File

@ -418,8 +418,8 @@ endfunc
func Test_breakindent11() func Test_breakindent11()
" test strdisplaywidth() " test strdisplaywidth()
call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4') call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4')
let text=getline(2) 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 assert_equal(width, strdisplaywidth(text))
call s:close_windows('set sbr=') call s:close_windows('set sbr=')
endfunc endfunc
@ -431,7 +431,7 @@ func Test_breakindent11_vartabs()
" test strdisplaywidth() " test strdisplaywidth()
call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4') call s:test_windows('setl cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4 vts=4')
let text = getline(2) 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 assert_equal(width, strdisplaywidth(text))
call s:close_windows('set sbr= vts&') call s:close_windows('set sbr= vts&')
endfunc endfunc

View File

@ -9,7 +9,7 @@ func Test_setbufline_getbufline()
hide hide
call assert_equal(0, setbufline(b, 1, ['foo', 'bar'])) call assert_equal(0, setbufline(b, 1, ['foo', 'bar']))
call assert_equal(['foo'], getbufline(b, 1)) call assert_equal(['foo'], getbufline(b, 1))
call assert_equal(['bar'], getbufline(b, 2)) call assert_equal(['bar'], getbufline(b, '$'))
call assert_equal(['foo', 'bar'], getbufline(b, 1, 2)) call assert_equal(['foo', 'bar'], getbufline(b, 1, 2))
exe "bd!" b exe "bd!" b
call assert_equal([], getbufline(b, 1, 2)) call assert_equal([], getbufline(b, 1, 2))
@ -21,7 +21,7 @@ func Test_setbufline_getbufline()
call assert_equal(1, setbufline(b, 5, ['x'])) call assert_equal(1, setbufline(b, 5, ['x']))
call assert_equal(1, setbufline(1234, 1, ['x'])) call assert_equal(1, setbufline(1234, 1, ['x']))
call assert_equal(0, setbufline(b, 4, ['d', 'e'])) 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(['d'], getbufline(b, 4))
call assert_equal(['e'], getbufline(b, 5)) call assert_equal(['e'], getbufline(b, 5))
call assert_equal([], getbufline(b, 6)) call assert_equal([], getbufline(b, 6))
@ -82,6 +82,7 @@ func Test_appendbufline()
call setline(1, ['a', 'b', 'c']) call setline(1, ['a', 'b', 'c'])
let b = bufnr('%') let b = bufnr('%')
wincmd w wincmd w
call assert_equal(1, appendbufline(b, -1, ['x']))
call assert_equal(1, appendbufline(b, 4, ['x'])) call assert_equal(1, appendbufline(b, 4, ['x']))
call assert_equal(1, appendbufline(1234, 1, ['x'])) call assert_equal(1, appendbufline(1234, 1, ['x']))
call assert_equal(0, appendbufline(b, 3, ['d', 'e'])) call assert_equal(0, appendbufline(b, 3, ['d', 'e']))
@ -104,8 +105,11 @@ func Test_deletebufline()
exe "bd!" b exe "bd!" b
call assert_equal(1, b->deletebufline(1)) call assert_equal(1, b->deletebufline(1))
call assert_equal(1, deletebufline(-1, 1))
split Xtest split Xtest
call setline(1, ['a', 'b', 'c']) call setline(1, ['a', 'b', 'c'])
call cursor(line('$'), 1)
let b = bufnr('%') let b = bufnr('%')
wincmd w wincmd w
call assert_equal(1, deletebufline(b, 4)) call assert_equal(1, deletebufline(b, 4))

View File

@ -77,7 +77,7 @@ function Test_getbufwintabinfo()
call assert_equal('green', winlist[2].variables.signal) call assert_equal('green', winlist[2].variables.signal)
call assert_equal(w4_id, winlist[3].winid) call assert_equal(w4_id, winlist[3].winid)
let winfo = getwininfo(w5_id)[0] let winfo = w5_id->getwininfo()[0]
call assert_equal(2, winfo.tabnr) call assert_equal(2, winfo.tabnr)
call assert_equal([], getwininfo(3)) call assert_equal([], getwininfo(3))
@ -88,7 +88,7 @@ function Test_getbufwintabinfo()
call assert_equal(2, tablist[1].tabnr) call assert_equal(2, tablist[1].tabnr)
call assert_equal('build', tablist[0].variables.space) call assert_equal('build', tablist[0].variables.space)
call assert_equal(w2_id, tablist[0].windows[0]) call assert_equal(w2_id, tablist[0].windows[0])
call assert_equal([], gettabinfo(3)) call assert_equal([], 3->gettabinfo())
tabonly | only tabonly | only
@ -106,7 +106,7 @@ function Test_getbufwintabinfo()
endfunction endfunction
function Test_get_buf_options() function Test_get_buf_options()
let opts = getbufvar(bufnr('%'), '&') let opts = bufnr()->getbufvar('&')
call assert_equal(v:t_dict, type(opts)) call assert_equal(v:t_dict, type(opts))
call assert_equal(8, opts.tabstop) call assert_equal(8, opts.tabstop)
endfunc endfunc

View File

@ -8,8 +8,8 @@ func Test_getchangelist()
bwipe! bwipe!
enew enew
call assert_equal([], getchangelist(10)) call assert_equal([], 10->getchangelist())
call assert_equal([[], 0], getchangelist('%')) call assert_equal([[], 0], getchangelist())
call writefile(['line1', 'line2', 'line3'], 'Xfile1.txt') call writefile(['line1', 'line2', 'line3'], 'Xfile1.txt')
call writefile(['line1', 'line2', 'line3'], 'Xfile2.txt') call writefile(['line1', 'line2', 'line3'], 'Xfile2.txt')

View File

@ -34,7 +34,7 @@ func Test_client_server()
" When using valgrind it takes much longer. " When using valgrind it takes much longer.
call WaitForAssert({-> assert_match(name, serverlist())}) call WaitForAssert({-> assert_match(name, serverlist())})
call remote_foreground(name) eval name->remote_foreground()
call remote_send(name, ":let testvar = 'yes'\<CR>") call remote_send(name, ":let testvar = 'yes'\<CR>")
call WaitFor('remote_expr("' . name . '", "exists(\"testvar\") ? testvar : \"\"", "", 1) == "yes"') call WaitFor('remote_expr("' . name . '", "exists(\"testvar\") ? testvar : \"\"", "", 1) == "yes"')
@ -53,7 +53,7 @@ func Test_client_server()
endif endif
" Wait for the server to be up and answering requests. " Wait for the server to be up and answering requests.
sleep 100m sleep 100m
call WaitForAssert({-> assert_true(remote_expr(name, "v:version", "", 1) != "")}) call WaitForAssert({-> assert_true(name->remote_expr("v:version", "", 1) != "")})
call remote_send(name, ":let testvar = 'maybe'\<CR>") call remote_send(name, ":let testvar = 'maybe'\<CR>")
call WaitForAssert({-> assert_equal('maybe', remote_expr(name, "testvar", "", 2))}) call WaitForAssert({-> assert_equal('maybe', remote_expr(name, "testvar", "", 2))})
@ -72,7 +72,7 @@ func Test_client_server()
" Expression evaluated locally. " Expression evaluated locally.
if v:servername == '' if v:servername == ''
call remote_startserver('MYSELF') eval 'MYSELF'->remote_startserver()
" May get MYSELF1 when running the test again. " May get MYSELF1 when running the test again.
call assert_match('MYSELF', v:servername) call assert_match('MYSELF', v:servername)
endif endif
@ -80,11 +80,11 @@ func Test_client_server()
call assert_equal('myself', remote_expr(v:servername, 'testvar')) call assert_equal('myself', remote_expr(v:servername, 'testvar'))
call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid') call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
call assert_equal('got it', remote_read(g:myserverid, 2)) call assert_equal('got it', g:myserverid->remote_read(2))
call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid') call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid')
let peek_result = 'nothing' let peek_result = 'nothing'
let r = remote_peek(g:myserverid, 'peek_result') let r = g:myserverid->remote_peek('peek_result')
" unpredictable whether the result is already available. " unpredictable whether the result is already available.
if r > 0 if r > 0
call assert_equal('another', peek_result) call assert_equal('another', peek_result)
@ -98,7 +98,7 @@ func Test_client_server()
call assert_equal('another', g:peek_result) call assert_equal('another', g:peek_result)
call assert_equal('another', remote_read(g:myserverid, 2)) call assert_equal('another', remote_read(g:myserverid, 2))
call remote_send(name, ":qa!\<CR>") eval name->remote_send(":qa!\<CR>")
try try
call WaitForAssert({-> assert_equal("dead", job_status(job))}) call WaitForAssert({-> assert_equal("dead", job_status(job))})
finally finally

View File

@ -260,7 +260,7 @@ func Test_getcompletion()
endif endif
let groupcount = len(getcompletion('', 'event')) let groupcount = len(getcompletion('', 'event'))
call assert_true(groupcount > 0) 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(matchcount > 0)
call assert_true(groupcount > matchcount) call assert_true(groupcount > matchcount)

View File

@ -25,6 +25,12 @@ func Test_move_cursor()
call cursor(9, 1) call cursor(9, 1)
call assert_equal([4, 1, 0, 1], getcurpos()[1:]) call assert_equal([4, 1, 0, 1], getcurpos()[1:])
call setline(1, ["\<TAB>"])
call cursor(1, 1, 1)
call assert_equal([1, 1, 1], getcurpos()[1:3])
call assert_equal(-1, cursor(-1, -1))
quit! quit!
endfunc endfunc

View File

@ -201,11 +201,11 @@ func Test_edit_07()
endfu endfu
au InsertCharPre <buffer> :call DoIt() au InsertCharPre <buffer> :call DoIt()
call feedkeys("A\<f5>\<c-p>u\<cr>\<c-l>\<cr>", 'tx') 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 %d
call setline(1, 'J') call setline(1, 'J')
call feedkeys("A\<f5>\<c-p>u\<down>\<c-l>\<cr>", 'tx') 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 ListMonths
delfu DoIt delfu DoIt
@ -348,7 +348,7 @@ func Test_edit_12()
call cursor(2, 4) call cursor(2, 4)
call feedkeys("R^\<c-d>", 'tnix') call feedkeys("R^\<c-d>", 'tnix')
call assert_equal(["\tabc", "def"], getline(1, '$')) call assert_equal(["\tabc", "def"], getline(1, '$'))
call assert_equal([0, 2, 2, 0], getpos('.')) call assert_equal([0, 2, 2, 0], '.'->getpos())
%d %d
call setline(1, ["\tabc", "\t\tdef"]) call setline(1, ["\tabc", "\t\tdef"])
call cursor(2, 2) call cursor(2, 2)

View File

@ -15,7 +15,7 @@ endfunc
func Test_getenv() func Test_getenv()
unlet! $TESTENV unlet! $TESTENV
call assert_equal(v:null, getenv('TESTENV')) call assert_equal(v:null, 'TESTENV'->getenv())
let $TESTENV = 'foo' let $TESTENV = 'foo'
call assert_equal('foo', getenv('TESTENV')) call assert_equal('foo', getenv('TESTENV'))
endfunc endfunc

View File

@ -16,7 +16,7 @@ function Test_glob()
" Execute these commands in the sandbox, so that using the shell fails. " Execute these commands in the sandbox, so that using the shell fails.
" Setting 'shell' to an invalid name causes a memory leak. " Setting 'shell' to an invalid name causes a memory leak.
sandbox call assert_equal("", glob('Xxx\{')) sandbox call assert_equal("", glob('Xxx\{'))
sandbox call assert_equal("", glob('Xxx\$')) sandbox call assert_equal("", 'Xxx\$'->glob())
w! Xxx\{ w! Xxx\{
" } to fix highlighting " } to fix highlighting
w! Xxx\$ w! Xxx\$
@ -30,5 +30,5 @@ function Test_globpath()
sandbox call assert_equal(expand("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim"), sandbox call assert_equal(expand("sautest/autoload/globone.vim\nsautest/autoload/globtwo.vim"),
\ globpath('sautest/autoload', 'glob*.vim')) \ globpath('sautest/autoload', 'glob*.vim'))
sandbox call assert_equal([expand('sautest/autoload/globone.vim'), expand('sautest/autoload/globtwo.vim')], sandbox call assert_equal([expand('sautest/autoload/globone.vim'), expand('sautest/autoload/globtwo.vim')],
\ globpath('sautest/autoload', 'glob*.vim', 0, 1)) \ 'glob*.vim'->globpath('sautest/autoload', 0, 1))
endfunction endfunction

View File

@ -37,6 +37,15 @@ func Test_expand_sflnum()
delcommand Flnum delcommand Flnum
endfunc endfunc
func Test_expand()
new
call assert_equal("", expand('%:S'))
call assert_equal('3', '<slnum>'->expand())
call assert_equal(['4'], expand('<slnum>', v:false, v:true))
" Don't add any line above this, otherwise <slnum> will change.
quit
endfunc
func Test_expand_sfile() func Test_expand_sfile()
call assert_match('test_expand_func\.vim$', s:sfile) call assert_match('test_expand_func\.vim$', s:sfile)
call assert_match('^function .*\.\.Test_expand_sfile$', expand('<sfile>')) call assert_match('^function .*\.\.Test_expand_sfile$', expand('<sfile>'))

View File

@ -147,7 +147,7 @@ function Test_printf_spec_s()
call assert_equal(string(value), printf('%s', value)) call assert_equal(string(value), printf('%s', value))
" funcref " funcref
call assert_equal('printf', printf('%s', function('printf'))) call assert_equal('printf', printf('%s', 'printf'->function()))
" partial " partial
call assert_equal(string(function('printf', ['%s'])), printf('%s', function('printf', ['%s']))) call assert_equal(string(function('printf', ['%s'])), printf('%s', function('printf', ['%s'])))
@ -477,7 +477,7 @@ func Test_funcref()
endfunc endfunc
call assert_equal(2, OneByName()) call assert_equal(2, OneByName())
call assert_equal(1, OneByRef()) call assert_equal(1, OneByRef())
let OneByRef = funcref('One') let OneByRef = 'One'->funcref()
call assert_equal(2, OneByRef()) call assert_equal(2, OneByRef())
call assert_fails('echo funcref("{")', 'E475:') call assert_fails('echo funcref("{")', 'E475:')
let OneByRef = funcref("One", repeat(["foo"], 20)) let OneByRef = funcref("One", repeat(["foo"], 20))

View File

@ -50,7 +50,7 @@ func Test_findfile()
set path=. set path=.
call assert_equal('Xdir2/foo', findfile('foo')) call assert_equal('Xdir2/foo', findfile('foo'))
call assert_equal('', findfile('bar')) call assert_equal('', findfile('bar'))
call assert_equal('Xdir2/foobar', findfile('foobar')) call assert_equal('Xdir2/foobar', 'foobar'->findfile())
" Empty {path} 2nd argument is the same as no 2nd argument. " Empty {path} 2nd argument is the same as no 2nd argument.
call assert_equal('Xdir2/foo', findfile('foo', '')) call assert_equal('Xdir2/foo', findfile('foo', ''))
@ -138,7 +138,7 @@ func Test_finddir()
cd Xdir1 cd Xdir1
call assert_equal('Xdir2', finddir('Xdir2')) call assert_equal('Xdir2', finddir('Xdir2'))
call assert_equal('', finddir('Xdir3')) call assert_equal('', 'Xdir3'->finddir())
" Files should not be found (findfile() finds them). " Files should not be found (findfile() finds them).
call assert_equal('', finddir('foo')) call assert_equal('', finddir('foo'))

View File

@ -15,6 +15,7 @@ func Test_abs()
call assert_equal("str2float('inf')", string(abs(1.0/0.0))) call assert_equal("str2float('inf')", string(abs(1.0/0.0)))
call assert_equal("str2float('inf')", string(abs(-1.0/0.0))) call assert_equal("str2float('inf')", string(abs(-1.0/0.0)))
call assert_equal("str2float('nan')", string(abs(0.0/0.0))) call assert_equal("str2float('nan')", string(abs(0.0/0.0)))
call assert_equal('12', string(abs('12abc')))
call assert_equal('12', string(abs('-12abc'))) call assert_equal('12', string(abs('-12abc')))
call assert_fails("call abs([])", 'E745:') call assert_fails("call abs([])", 'E745:')
call assert_fails("call abs({})", 'E728:') call assert_fails("call abs({})", 'E728:')

View File

@ -13,7 +13,7 @@ func Test_fnameescape()
let fname = 'Xemark!' let fname = 'Xemark!'
let status = v:false let status = v:false
try try
exe "w! " . fnameescape(fname) exe "w! " . fname->fnameescape()
let status = v:true let status = v:true
endtry endtry
call assert_true(status, "ExclamationMark") call assert_true(status, "ExclamationMark")

View File

@ -13,7 +13,7 @@ func Test_fnamemodify()
call assert_equal('a', fnamemodify('../testdir/a', ':.')) call assert_equal('a', fnamemodify('../testdir/a', ':.'))
call assert_equal('~/testdir/test.out', fnamemodify('test.out', ':~')) call assert_equal('~/testdir/test.out', fnamemodify('test.out', ':~'))
call assert_equal('~/testdir/a', fnamemodify('../testdir/a', ':~')) call assert_equal('~/testdir/a', fnamemodify('../testdir/a', ':~'))
call assert_equal('a', fnamemodify('../testdir/a', ':t')) call assert_equal('a', '../testdir/a'->fnamemodify(':t'))
call assert_equal('', fnamemodify('.', ':p:t')) call assert_equal('', fnamemodify('.', ':p:t'))
call assert_equal('test.out', fnamemodify('test.out', ':p:t')) call assert_equal('test.out', fnamemodify('test.out', ':p:t'))
call assert_equal('out', fnamemodify('test.out', ':p:e')) call assert_equal('out', fnamemodify('test.out', ':p:e'))

View File

@ -88,7 +88,7 @@ func Test_indent_fold2()
setl fen fdm=marker setl fen fdm=marker
2 2
norm! >> norm! >>
let a=map(range(1,5), 'foldclosed(v:val)') let a=map(range(1,5), 'v:val->foldclosed()')
call assert_equal([-1,-1,-1,4,4], a) call assert_equal([-1,-1,-1,4,4], a)
bw! bw!
endfunc endfunc
@ -132,7 +132,7 @@ func Test_indent_fold_with_read()
call assert_equal(0, foldlevel(3)) call assert_equal(0, foldlevel(3))
call assert_equal(0, foldlevel(4)) call assert_equal(0, foldlevel(4))
call assert_equal(1, foldlevel(5)) call assert_equal(1, foldlevel(5))
call assert_equal(7, foldclosedend(5)) call assert_equal(7, 5->foldclosedend())
bwipe! bwipe!
set foldmethod& set foldmethod&
@ -207,7 +207,7 @@ func Test_update_folds_expr_read()
%foldclose %foldclose
call assert_equal(2, foldclosedend(1)) call assert_equal(2, foldclosedend(1))
call assert_equal(0, foldlevel(3)) call assert_equal(0, foldlevel(3))
call assert_equal(0, foldlevel(4)) call assert_equal(0, 4->foldlevel())
call assert_equal(6, foldclosedend(5)) call assert_equal(6, foldclosedend(5))
call assert_equal(10, foldclosedend(7)) call assert_equal(10, foldclosedend(7))
call assert_equal(14, foldclosedend(11)) call assert_equal(14, foldclosedend(11))
@ -663,7 +663,7 @@ func Test_fold_move()
call assert_equal(10, foldclosed(10)) call assert_equal(10, foldclosed(10))
call assert_equal(11, foldclosedend(10)) call assert_equal(11, foldclosedend(10))
call assert_equal('+-- 2 lines: Line2', foldtextresult(2)) call assert_equal('+-- 2 lines: Line2', foldtextresult(2))
call assert_equal('+-- 2 lines: Line8', foldtextresult(10)) call assert_equal('+-- 2 lines: Line8', 10->foldtextresult())
set fdm& sw& fdl& set fdm& sw& fdl&
enew! enew!

View File

@ -56,6 +56,7 @@ func Test_empty()
endif endif
call assert_equal(0, empty(function('Test_empty'))) call assert_equal(0, empty(function('Test_empty')))
call assert_equal(0, empty(function('Test_empty', [0])))
endfunc endfunc
func Test_len() func Test_len()
@ -294,7 +295,7 @@ func Test_resolve_unix()
call delete('Xlink') call delete('Xlink')
silent !ln -s -f Xlink2/ Xlink1 silent !ln -s -f Xlink2/ Xlink1
call assert_equal('Xlink2', resolve('Xlink1')) call assert_equal('Xlink2', 'Xlink1'->resolve())
call assert_equal('Xlink2/', resolve('Xlink1/')) call assert_equal('Xlink2/', resolve('Xlink1/'))
call delete('Xlink1') call delete('Xlink1')
@ -359,10 +360,10 @@ endfunc
func Test_pathshorten() func Test_pathshorten()
call assert_equal('', pathshorten('')) call assert_equal('', pathshorten(''))
call assert_equal('foo', pathshorten('foo')) call assert_equal('foo', pathshorten('foo'))
call assert_equal('/foo', pathshorten('/foo')) call assert_equal('/foo', '/foo'->pathshorten())
call assert_equal('f/', pathshorten('foo/')) call assert_equal('f/', pathshorten('foo/'))
call assert_equal('f/bar', pathshorten('foo/bar')) call assert_equal('f/bar', pathshorten('foo/bar'))
call assert_equal('f/b/foobar', pathshorten('foo/bar/foobar')) call assert_equal('f/b/foobar', 'foo/bar/foobar'->pathshorten())
call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar')) call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar'))
call assert_equal('.f/bar', pathshorten('.foo/bar')) call assert_equal('.f/bar', pathshorten('.foo/bar'))
call assert_equal('~f/bar', pathshorten('~foo/bar')) call assert_equal('~f/bar', pathshorten('~foo/bar'))
@ -657,8 +658,8 @@ func Test_mode()
exe "normal gRabc\<C-X>\<C-L>\<F2>\<Esc>u" exe "normal gRabc\<C-X>\<C-L>\<F2>\<Esc>u"
call assert_equal('R-Rvc', g:current_modes) call assert_equal('R-Rvc', g:current_modes)
call assert_equal('n', mode(0)) call assert_equal('n', 0->mode())
call assert_equal('n', mode(1)) call assert_equal('n', 1->mode())
" i_CTRL-O " i_CTRL-O
exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>" exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>"
@ -822,7 +823,7 @@ endfunc
func Test_match_func() func Test_match_func()
call assert_equal(4, match('testing', 'ing')) call assert_equal(4, match('testing', 'ing'))
call assert_equal(4, match('testing', 'ing', 2)) call assert_equal(4, 'testing'->match('ing', 2))
call assert_equal(-1, match('testing', 'ing', 5)) call assert_equal(-1, match('testing', 'ing', 5))
call assert_equal(-1, match('testing', 'ing', 8)) call assert_equal(-1, match('testing', 'ing', 8))
call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing')) call assert_equal(1, match(['vim', 'testing', 'execute'], 'ing'))
@ -831,7 +832,7 @@ endfunc
func Test_matchend() func Test_matchend()
call assert_equal(7, matchend('testing', 'ing')) call assert_equal(7, matchend('testing', 'ing'))
call assert_equal(7, matchend('testing', 'ing', 2)) call assert_equal(7, 'testing'->matchend('ing', 2))
call assert_equal(-1, matchend('testing', 'ing', 5)) call assert_equal(-1, matchend('testing', 'ing', 5))
call assert_equal(-1, matchend('testing', 'ing', 8)) call assert_equal(-1, matchend('testing', 'ing', 8))
call assert_equal(match(['vim', 'testing', 'execute'], 'ing'), matchend(['vim', 'testing', 'execute'], 'ing')) call assert_equal(match(['vim', 'testing', 'execute'], 'ing'), matchend(['vim', 'testing', 'execute'], 'ing'))
@ -840,13 +841,13 @@ endfunc
func Test_matchlist() func Test_matchlist()
call assert_equal(['acd', 'a', '', 'c', 'd', '', '', '', '', ''], matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')) 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(['d', '', '', '', 'd', '', '', '', '', ''], 'acd'->matchlist('\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2))
call assert_equal([], matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4)) call assert_equal([], matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 4))
endfunc endfunc
func Test_matchstr() func Test_matchstr()
call assert_equal('ing', matchstr('testing', 'ing')) call assert_equal('ing', matchstr('testing', 'ing'))
call assert_equal('ing', matchstr('testing', 'ing', 2)) call assert_equal('ing', 'testing'->matchstr('ing', 2))
call assert_equal('', matchstr('testing', 'ing', 5)) call assert_equal('', matchstr('testing', 'ing', 5))
call assert_equal('', matchstr('testing', 'ing', 8)) call assert_equal('', matchstr('testing', 'ing', 8))
call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing')) call assert_equal('testing', matchstr(['vim', 'testing', 'execute'], 'ing'))
@ -855,7 +856,7 @@ endfunc
func Test_matchstrpos() func Test_matchstrpos()
call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing')) call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing', 2)) 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', 5))
call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8)) call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 8))
call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing', 'execute'], 'ing')) call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing', 'execute'], 'ing'))
@ -876,21 +877,21 @@ Test
call assert_equal(0, nextnonblank(-1)) call assert_equal(0, nextnonblank(-1))
call assert_equal(0, nextnonblank(0)) call assert_equal(0, nextnonblank(0))
call assert_equal(1, nextnonblank(1)) call assert_equal(1, nextnonblank(1))
call assert_equal(4, nextnonblank(2)) call assert_equal(4, 2->nextnonblank())
call assert_equal(4, nextnonblank(3)) call assert_equal(4, nextnonblank(3))
call assert_equal(4, nextnonblank(4)) call assert_equal(4, nextnonblank(4))
call assert_equal(6, nextnonblank(5)) call assert_equal(6, nextnonblank(5))
call assert_equal(6, nextnonblank(6)) call assert_equal(6, nextnonblank(6))
call assert_equal(7, nextnonblank(7)) call assert_equal(7, nextnonblank(7))
call assert_equal(0, nextnonblank(8)) call assert_equal(0, 8->nextnonblank())
call assert_equal(0, prevnonblank(-1)) call assert_equal(0, prevnonblank(-1))
call assert_equal(0, prevnonblank(0)) call assert_equal(0, prevnonblank(0))
call assert_equal(1, prevnonblank(1)) call assert_equal(1, 1->prevnonblank())
call assert_equal(1, prevnonblank(2)) call assert_equal(1, prevnonblank(2))
call assert_equal(1, prevnonblank(3)) call assert_equal(1, prevnonblank(3))
call assert_equal(4, prevnonblank(4)) call assert_equal(4, prevnonblank(4))
call assert_equal(4, prevnonblank(5)) call assert_equal(4, 5->prevnonblank())
call assert_equal(6, prevnonblank(6)) call assert_equal(6, prevnonblank(6))
call assert_equal(7, prevnonblank(7)) call assert_equal(7, prevnonblank(7))
call assert_equal(0, prevnonblank(8)) call assert_equal(0, prevnonblank(8))
@ -912,7 +913,7 @@ func Test_byte2line_line2byte()
call assert_equal([-1, -1, 1, 1, 2, 2, 2, 3, 3, -1], call assert_equal([-1, -1, 1, 1, 2, 2, 2, 3, 3, -1],
\ map(range(-1, 8), 'v:val->byte2line()')) \ map(range(-1, 8), 'v:val->byte2line()'))
call assert_equal([-1, -1, 1, 3, 6, 8, -1], call assert_equal([-1, -1, 1, 3, 6, 8, -1],
\ map(range(-1, 5), 'line2byte(v:val)')) \ map(range(-1, 5), 'v:val->line2byte()'))
set fileformat=dos set fileformat=dos
call assert_equal([-1, -1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, -1], call assert_equal([-1, -1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, -1],
@ -1007,6 +1008,7 @@ func Test_count()
call assert_equal(1, count(l, 'a', 0, 1)) call assert_equal(1, count(l, 'a', 0, 1))
call assert_equal(2, count(l, 'a', 1, 1)) call assert_equal(2, count(l, 'a', 1, 1))
call assert_fails('call count(l, "a", 0, 10)', 'E684:') call assert_fails('call count(l, "a", 0, 10)', 'E684:')
call assert_fails('call count(l, "a", [])', 'E745:')
let d = {1: 'a', 2: 'a', 3: 'A', 4: 'b'} let d = {1: 'a', 2: 'a', 3: 'A', 4: 'b'}
call assert_equal(2, count(d, 'a')) call assert_equal(2, count(d, 'a'))
@ -1034,6 +1036,8 @@ func Test_count()
call assert_equal(2, count("foo", "O", 1)) call assert_equal(2, count("foo", "O", 1))
call assert_equal(2, count("fooooo", "oo")) call assert_equal(2, count("fooooo", "oo"))
call assert_equal(0, count("foo", "")) call assert_equal(0, count("foo", ""))
call assert_fails('call count(0, 0)', 'E712:')
endfunc endfunc
func Test_changenr() func Test_changenr()
@ -1061,7 +1065,7 @@ func Test_filewritable()
call assert_equal(0, filewritable('Xfilewritable')) call assert_equal(0, filewritable('Xfilewritable'))
call assert_notequal(0, setfperm('Xfilewritable', 'rw-r-----')) call assert_notequal(0, setfperm('Xfilewritable', 'rw-r-----'))
call assert_equal(1, filewritable('Xfilewritable')) call assert_equal(1, 'Xfilewritable'->filewritable())
call assert_equal(0, filewritable('doesnotexist')) call assert_equal(0, filewritable('doesnotexist'))
@ -1072,12 +1076,12 @@ endfunc
func Test_Executable() func Test_Executable()
if has('win32') if has('win32')
call assert_equal(1, executable('notepad')) call assert_equal(1, executable('notepad'))
call assert_equal(1, executable('notepad.exe')) call assert_equal(1, 'notepad.exe'->executable())
call assert_equal(0, executable('notepad.exe.exe')) call assert_equal(0, executable('notepad.exe.exe'))
call assert_equal(0, executable('shell32.dll')) call assert_equal(0, executable('shell32.dll'))
call assert_equal(0, executable('win.ini')) call assert_equal(0, executable('win.ini'))
elseif has('unix') elseif has('unix')
call assert_equal(1, executable('cat')) call assert_equal(1, 'cat'->executable())
call assert_equal(0, executable('nodogshere')) call assert_equal(0, executable('nodogshere'))
" get "cat" path and remove the leading / " get "cat" path and remove the leading /
@ -1086,8 +1090,7 @@ func Test_Executable()
" check that the relative path works in / " check that the relative path works in /
lcd / lcd /
call assert_equal(1, executable(catcmd)) call assert_equal(1, executable(catcmd))
" let result = catcmd->exepath() let result = catcmd->exepath()
let result = exepath(catcmd)
" when using chroot looking for sbin/cat can return bin/cat, that is OK " when using chroot looking for sbin/cat can return bin/cat, that is OK
if catcmd =~ '\<sbin\>' && result =~ '\<bin\>' if catcmd =~ '\<sbin\>' && result =~ '\<bin\>'
call assert_equal('/' .. substitute(catcmd, '\<sbin\>', 'bin', ''), result) call assert_equal('/' .. substitute(catcmd, '\<sbin\>', 'bin', ''), result)
@ -1132,7 +1135,7 @@ endfunc
func Test_hlexists() func Test_hlexists()
call assert_equal(0, hlexists('does_not_exist')) 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('does_not_exist'))
" call assert_equal(0, highlight_exists('Number')) " call assert_equal(0, highlight_exists('Number'))
syntax on syntax on
@ -1165,7 +1168,7 @@ endfunc
func Test_inputlist() func Test_inputlist()
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx') call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>1\<cr>", 'tx')
call assert_equal(1, c) 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 assert_equal(2, c)
call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx') call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx')
call assert_equal(3, c) call assert_equal(3, c)
@ -1297,7 +1300,7 @@ func Test_trim()
call assert_fails('call trim(" vim ", " ", -1)', 'E475:') call assert_fails('call trim(" vim ", " ", -1)', 'E475:')
call assert_fails('call trim(" vim ", " ", 3)', 'E475:') call assert_fails('call trim(" vim ", " ", 3)', 'E475:')
let chars = join(map(range(1, 0x20) + [0xa0], {n -> nr2char(n)}), '') let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
call assert_equal("x", trim(chars . "x" . chars)) call assert_equal("x", trim(chars . "x" . chars))
endfunc endfunc
@ -1311,7 +1314,7 @@ func Test_func_range_with_edit()
" is invalid in that buffer. " is invalid in that buffer.
call writefile(['just one line'], 'Xfuncrange2') call writefile(['just one line'], 'Xfuncrange2')
new new
call setline(1, range(10)) call setline(1, 10->range())
write Xfuncrange1 write Xfuncrange1
call assert_fails('5,8call EditAnotherFile()', 'E16:') call assert_fails('5,8call EditAnotherFile()', 'E16:')
@ -1324,7 +1327,7 @@ func Test_func_exists_on_reload()
call writefile(['func ExistingFunction()', 'echo "yes"', 'endfunc'], 'Xfuncexists') call writefile(['func ExistingFunction()', 'echo "yes"', 'endfunc'], 'Xfuncexists')
call assert_equal(0, exists('*ExistingFunction')) call assert_equal(0, exists('*ExistingFunction'))
source Xfuncexists source Xfuncexists
call assert_equal(1, exists('*ExistingFunction')) call assert_equal(1, '*ExistingFunction'->exists())
" Redefining a function when reloading a script is OK. " Redefining a function when reloading a script is OK.
source Xfuncexists source Xfuncexists
call assert_equal(1, exists('*ExistingFunction')) call assert_equal(1, exists('*ExistingFunction'))
@ -1355,7 +1358,7 @@ func Test_func_sandbox()
sandbox let F = {-> 'hello'} sandbox let F = {-> 'hello'}
call assert_equal('hello', F()) call assert_equal('hello', F())
sandbox let F = {-> execute("normal ix\<Esc>")} sandbox let F = {-> "normal ix\<Esc>"->execute()}
call assert_fails('call F()', 'E48:') call assert_fails('call F()', 'E48:')
unlet F unlet F
@ -1418,7 +1421,7 @@ func Test_reg_executing_and_recording()
let g:regs = [] let g:regs = []
func TestFunc() abort func TestFunc() abort
let g:regs += [reg_executing()] let g:regs += [reg_executing()]
let g:typed = input('?') let g:typed = '?'->input()
let g:regs += [reg_executing()] let g:regs += [reg_executing()]
endfunc endfunc
call feedkeys("@qy\<CR>", 'xt') call feedkeys("@qy\<CR>", 'xt')
@ -1434,6 +1437,25 @@ func Test_reg_executing_and_recording()
unlet s:reg_stat unlet s:reg_stat
endfunc 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_getchar() func Test_getchar()
call feedkeys('a', '') call feedkeys('a', '')
call assert_equal(char2nr('a'), getchar()) call assert_equal(char2nr('a'), getchar())
@ -1491,17 +1513,17 @@ func Test_libcall_libcallnr()
endif endif
if has('win32') if has('win32')
call assert_equal($USERPROFILE, libcall(libc, 'getenv', 'USERPROFILE')) call assert_equal($USERPROFILE, 'USERPROFILE'->libcall(libc, 'getenv'))
else else
call assert_equal($HOME, libcall(libc, 'getenv', 'HOME')) call assert_equal($HOME, 'HOME'->libcall(libc, 'getenv'))
endif endif
" If function returns NULL, libcall() should return an empty string. " If function returns NULL, libcall() should return an empty string.
call assert_equal('', libcall(libc, 'getenv', 'X_ENV_DOES_NOT_EXIT')) call assert_equal('', libcall(libc, 'getenv', 'X_ENV_DOES_NOT_EXIT'))
" Test libcallnr() with string and integer argument. " Test libcallnr() with string and integer argument.
call assert_equal(4, libcallnr(libc, 'strlen', 'abcd')) call assert_equal(4, 'abcd'->libcallnr(libc, 'strlen'))
call assert_equal(char2nr('A'), libcallnr(libc, 'toupper', char2nr('a'))) call assert_equal(char2nr('A'), char2nr('a')->libcallnr(libc, 'toupper'))
call assert_fails("call libcall(libc, 'Xdoesnotexist_', '')", 'E364:') call assert_fails("call libcall(libc, 'Xdoesnotexist_', '')", 'E364:')
call assert_fails("call libcallnr(libc, 'Xdoesnotexist_', '')", 'E364:') call assert_fails("call libcallnr(libc, 'Xdoesnotexist_', '')", 'E364:')
@ -1564,7 +1586,7 @@ func Test_readdir()
call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
" Only results containing "f" " Only results containing "f"
let files = readdir('Xdir', { x -> stridx(x, 'f') !=- 1 }) let files = 'Xdir'->readdir({ x -> stridx(x, 'f') !=- 1 })
call assert_equal(['foo.txt'], sort(files)) call assert_equal(['foo.txt'], sort(files))
" Only .txt files " Only .txt files
@ -1597,6 +1619,14 @@ func Test_call()
call assert_fails("call call('Mylen', [], 0)", 'E715:') call assert_fails("call call('Mylen', [], 0)", 'E715:')
endfunc endfunc
func Test_char2nr()
call assert_equal(12354, char2nr('あ', 1))
endfunc
func Test_eventhandler()
call assert_equal(0, eventhandler())
endfunc
" Test for the eval() function " Test for the eval() function
func Test_eval() func Test_eval()
call assert_fails("call eval('5 a')", 'E488:') call assert_fails("call eval('5 a')", 'E488:')

View File

@ -17,7 +17,7 @@ func GetCwdInfo(win, tab)
let lflag = haslocaldir(a:win) let lflag = haslocaldir(a:win)
else else
let dirname = fnamemodify(getcwd(a:win, a:tab), mod) let dirname = fnamemodify(getcwd(a:win, a:tab), mod)
let lflag = haslocaldir(a:win, a:tab) let lflag = a:win->haslocaldir(a:tab)
endif endif
return bufname . ' ' . dirname . ' ' . lflag return bufname . ' ' . dirname . ' ' . lflag
endfunc endfunc
@ -35,7 +35,7 @@ function SetUp()
" we start from a clean state. " we start from a clean state.
call delete("Xtopdir", "rf") call delete("Xtopdir", "rf")
new new
call mkdir('Xtopdir') eval 'Xtopdir'->mkdir()
cd Xtopdir cd Xtopdir
let g:topdir = getcwd() let g:topdir = getcwd()
call mkdir('Xdir1') call mkdir('Xdir1')

View File

@ -12,8 +12,8 @@ func Test_var()
let def_str = "Chance" let def_str = "Chance"
call assert_equal('Dance', getwinvar(1, 'var_str')) call assert_equal('Dance', getwinvar(1, 'var_str'))
call assert_equal('Dance', getwinvar(1, 'var_str', def_str)) call assert_equal('Dance', getwinvar(1, 'var_str', def_str))
call assert_equal({'var_str': 'Dance'}, getwinvar(1, '')) call assert_equal({'var_str': 'Dance'}, 1->getwinvar(''))
call assert_equal({'var_str': 'Dance'}, getwinvar(1, '', def_str)) call assert_equal({'var_str': 'Dance'}, 1->getwinvar('', def_str))
unlet w:var_str unlet w:var_str
call assert_equal('Chance', getwinvar(1, 'var_str', def_str)) call assert_equal('Chance', getwinvar(1, 'var_str', def_str))
call assert_equal({}, getwinvar(1, '')) call assert_equal({}, getwinvar(1, ''))
@ -31,7 +31,7 @@ func Test_var()
let t:other = 777 let t:other = 777
let def_list = [4, 5, 6, 7] let def_list = [4, 5, 6, 7]
tabrewind 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([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}, gettabvar(3, ''))
call assert_equal({'var_list': [1, 2, 3], 'other': 777}, call assert_equal({'var_list': [1, 2, 3], 'other': 777},
@ -61,7 +61,7 @@ func Test_var()
let def_dict = {'dict2': 'newval'} let def_dict = {'dict2': 'newval'}
wincmd b wincmd b
tabrewind 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'}, call assert_equal({'dict': 'tabwin'},
\ gettabwinvar(2, 3, 'var_dict', def_dict)) \ gettabwinvar(2, 3, 'var_dict', def_dict))
call assert_equal({'var_dict': {'dict': 'tabwin'}}, gettabwinvar(2, 3, '')) call assert_equal({'var_dict': {'dict': 'tabwin'}}, gettabwinvar(2, 3, ''))

View File

@ -10,7 +10,7 @@ endfunc
func Test_glob2regpat_valid() func Test_glob2regpat_valid()
call assert_equal('^foo\.', glob2regpat('foo.*')) call assert_equal('^foo\.', glob2regpat('foo.*'))
call assert_equal('^foo.$', glob2regpat('foo?')) call assert_equal('^foo.$', 'foo?'->glob2regpat())
call assert_equal('\.vim$', glob2regpat('*.vim')) call assert_equal('\.vim$', glob2regpat('*.vim'))
call assert_equal('^[abc]$', glob2regpat('[abc]')) call assert_equal('^[abc]$', glob2regpat('[abc]'))
call assert_equal('^foo bar$', glob2regpat('foo\ bar')) call assert_equal('^foo bar$', glob2regpat('foo\ bar'))

View File

@ -13,7 +13,7 @@ function History_Tests(hist)
call assert_equal(-1, histnr(a:hist)) call assert_equal(-1, histnr(a:hist))
call assert_equal('', histget(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_true(histadd(a:hist, 'buffers'))
call assert_equal('buffers', histget(a:hist)) call assert_equal('buffers', histget(a:hist))
call assert_equal('ls', histget(a:hist, -2)) call assert_equal('ls', histget(a:hist, -2))
@ -22,14 +22,14 @@ function History_Tests(hist)
call assert_equal('', histget(a:hist, -5)) call assert_equal('', histget(a:hist, -5))
call assert_equal(2, histnr(a:hist)) call assert_equal(2, histnr(a:hist))
call assert_true(histdel(a:hist, 2)) 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(1, histnr(a:hist))
call assert_equal('ls', histget(a:hist, -1)) call assert_equal('ls', histget(a:hist, -1))
call assert_true(histadd(a:hist, 'buffers')) call assert_true(histadd(a:hist, 'buffers'))
call assert_true(histadd(a:hist, 'ls')) call assert_true(histadd(a:hist, 'ls'))
call assert_equal('ls', histget(a:hist, -1)) call assert_equal('ls', a:hist->histget(-1))
call assert_equal(4, histnr(a:hist)) call assert_equal(4, a:hist->histnr())
let a=execute('history ' . a:hist) let a=execute('history ' . a:hist)
call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a) call assert_match("^\n # \\S* history\n 3 buffers\n> 4 ls$", a)

View File

@ -39,7 +39,7 @@ func Test_getjumplist()
" Traverse the jump list and verify the results " Traverse the jump list and verify the results
5 5
exe "normal \<C-O>" exe "normal \<C-O>"
call assert_equal(2, getjumplist(1)[1]) call assert_equal(2, 1->getjumplist()[1])
exe "normal 2\<C-O>" exe "normal 2\<C-O>"
call assert_equal(0, getjumplist(1, 1)[1]) call assert_equal(0, getjumplist(1, 1)[1])
exe "normal 3\<C-I>" exe "normal 3\<C-I>"

View File

@ -43,6 +43,9 @@ func Test_lisp_indent()
\ ',@body', \ ',@body',
\ '(princ "</a>")))' \ '(princ "</a>")))'
\ ]) \ ])
call assert_equal(7, lispindent(2))
call assert_equal(5, 6->lispindent())
set lisp set lisp
set lispwords& set lispwords&
let save_copt = &cpoptions let save_copt = &cpoptions

View File

@ -573,7 +573,7 @@ func Test_lockvar_script_autoload()
set rtp+=./sautest set rtp+=./sautest
lockvar g:footest#x lockvar g:footest#x
unlockvar 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(0, exists('g:footest#x'))
call assert_equal(1, g:footest#x) call assert_equal(1, g:footest#x)
let &rtp = old_rtp let &rtp = old_rtp

View File

@ -1,5 +1,6 @@
" Tests for maparg(). " Tests for maparg().
" Also test utf8 map with a 0x80 byte. " Also test utf8 map with a 0x80 byte.
" Also test mapcheck()
function s:SID() function s:SID()
return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$')) return str2nr(matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$'))
@ -22,7 +23,7 @@ function Test_maparg()
call assert_equal({'silent': 1, 'noremap': 1, 'script': 1, 'lhs': 'bar', 'mode': 'v', call assert_equal({'silent': 1, 'noremap': 1, 'script': 1, 'lhs': 'bar', 'mode': 'v',
\ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2, \ 'nowait': 0, 'expr': 1, 'sid': sid, 'lnum': lnum + 2,
\ 'rhs': 'isbar', 'buffer': 1}, \ 'rhs': 'isbar', 'buffer': 1},
\ maparg('bar', '', 0, 1)) \ 'bar'->maparg('', 0, 1))
let lnum = expand('<sflnum>') let lnum = expand('<sflnum>')
map <buffer> <nowait> foo bar map <buffer> <nowait> foo bar
call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'foo', 'mode': ' ', call assert_equal({'silent': 0, 'noremap': 0, 'script': 0, 'lhs': 'foo', 'mode': ' ',
@ -51,6 +52,45 @@ function Test_maparg()
unmap abc unmap abc
endfunction 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() function Test_range_map()
new new
" Outside of the range, minimum " Outside of the range, minimum

View File

@ -14,7 +14,7 @@ function Test_match()
2match MyGroup2 /FIXME/ 2match MyGroup2 /FIXME/
3match MyGroup3 /XXX/ 3match MyGroup3 /XXX/
call assert_equal(['MyGroup1', 'TODO'], matcharg(1)) call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
call assert_equal(['MyGroup2', 'FIXME'], matcharg(2)) call assert_equal(['MyGroup2', 'FIXME'], 2->matcharg())
call assert_equal(['MyGroup3', 'XXX'], matcharg(3)) call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
" --- Check that "matcharg()" returns an empty list if the argument is not 1, " --- Check that "matcharg()" returns an empty list if the argument is not 1,
@ -43,7 +43,7 @@ function Test_match()
" --- Check that "matchdelete()" deletes the matches defined in the previous " --- Check that "matchdelete()" deletes the matches defined in the previous
" --- test correctly. " --- test correctly.
call matchdelete(m1) call matchdelete(m1)
call matchdelete(m2) eval m2->matchdelete()
call matchdelete(m3) call matchdelete(m3)
call assert_equal([], getmatches()) call assert_equal([], getmatches())
@ -55,7 +55,7 @@ function Test_match()
" --- Check that "clearmatches()" clears all matches defined by ":match" and " --- Check that "clearmatches()" clears all matches defined by ":match" and
" --- "matchadd()". " --- "matchadd()".
let m1 = matchadd("MyGroup1", "TODO") let m1 = matchadd("MyGroup1", "TODO")
let m2 = matchadd("MyGroup2", "FIXME", 42) let m2 = "MyGroup2"->matchadd("FIXME", 42)
let m3 = matchadd("MyGroup3", "XXX", 60, 17) let m3 = matchadd("MyGroup3", "XXX", 60, 17)
match MyGroup1 /COFFEE/ match MyGroup1 /COFFEE/
2match MyGroup2 /HUMPPA/ 2match MyGroup2 /HUMPPA/
@ -117,7 +117,7 @@ function Test_match()
call clearmatches() call clearmatches()
call setline(1, 'abcdΣabcdef') call setline(1, 'abcdΣabcdef')
call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]]) eval "MyGroup1"->matchaddpos([[1, 4, 2], [1, 9, 2]])
1 1
redraw! redraw!
let v1 = screenattr(1, 1) let v1 = screenattr(1, 1)

View File

@ -32,7 +32,7 @@ endfunc
funct Test_VIM_Blob() funct Test_VIM_Blob()
call assert_equal('0z', perleval('VIM::Blob("")')) call assert_equal('0z', perleval('VIM::Blob("")'))
call assert_equal('0z31326162', perleval('VIM::Blob("12ab")')) call assert_equal('0z31326162', 'VIM::Blob("12ab")'->perleval())
call assert_equal('0z00010203', perleval('VIM::Blob("\x00\x01\x02\x03")')) call assert_equal('0z00010203', perleval('VIM::Blob("\x00\x01\x02\x03")'))
call assert_equal('0z8081FEFF', perleval('VIM::Blob("\x80\x81\xfe\xff")')) call assert_equal('0z8081FEFF', perleval('VIM::Blob("\x80\x81\xfe\xff")'))
endfunc endfunc

View File

@ -110,11 +110,8 @@ func Test_prompt_garbage_collect()
new new
set buftype=prompt set buftype=prompt
" Nvim doesn't support method call syntax yet. eval bufnr('')->prompt_setcallback(function('MyPromptCallback', [{}]))
" eval bufnr('')->prompt_setcallback(function('MyPromptCallback', [{}])) eval bufnr('')->prompt_setinterrupt(function('MyPromptInterrupt', [{}]))
" eval bufnr('')->prompt_setinterrupt(function('MyPromptInterrupt', [{}]))
eval prompt_setcallback(bufnr(''), function('MyPromptCallback', [{}]))
eval prompt_setinterrupt(bufnr(''), function('MyPromptInterrupt', [{}]))
call test_garbagecollect_now() call test_garbagecollect_now()
" Must not crash " Must not crash
call feedkeys("\<CR>\<C-C>", 'xt') call feedkeys("\<CR>\<C-C>", 'xt')

View File

@ -59,7 +59,7 @@ func Test_vim_function()
try try
py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()')) py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()'))
call assert_equal(name, pyeval('f.name')) call assert_equal(name, 'f.name'->pyeval())
catch catch
call assert_false(v:exception) call assert_false(v:exception)
endtry endtry

View File

@ -59,7 +59,7 @@ func Test_vim_function()
try try
py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode()) py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode())
call assert_equal(name, py3eval('f.name')) call assert_equal(name, 'f.name'->py3eval())
catch catch
call assert_false(v:exception) call assert_false(v:exception)
endtry endtry

View File

@ -35,7 +35,7 @@ endfunc
func Test_pyxeval() func Test_pyxeval()
pyx import sys pyx import sys
call assert_match(s:py2pattern, split(pyxeval('sys.version'))[0]) call assert_match(s:py2pattern, split('sys.version'->pyxeval())[0])
endfunc endfunc

View File

@ -8,11 +8,11 @@ func Test_reltime()
let now = reltime() let now = reltime()
sleep 10m sleep 10m
let later = reltime() let later = reltime()
let elapsed = reltime(now) let elapsed = now->reltime()
call assert_true(reltimestr(elapsed) =~ '0\.0') call assert_true(reltimestr(elapsed) =~ '0\.0')
call assert_true(reltimestr(elapsed) != '0.0') call assert_true(elapsed->reltimestr() != '0.0')
call assert_true(reltimefloat(elapsed) < 0.1) call assert_true(reltimefloat(elapsed) < 0.1)
call assert_true(reltimefloat(elapsed) > 0.0) call assert_true(elapsed->reltimefloat() > 0.0)
let same = reltime(now, now) let same = reltime(now, now)
call assert_equal('0.000', split(reltimestr(same))[0][:4]) call assert_equal('0.000', split(reltimestr(same))[0][:4])

View File

@ -25,7 +25,7 @@ func Test_rename_file_ignore_case()
set fileignorecase set fileignorecase
call writefile(['foo'], 'Xrename') call writefile(['foo'], 'Xrename')
call assert_equal(0, rename('Xrename', 'XRENAME')) call assert_equal(0, 'Xrename'->rename('XRENAME'))
call assert_equal(['foo'], readfile('XRENAME')) call assert_equal(['foo'], readfile('XRENAME'))

View File

@ -1338,7 +1338,7 @@ func Test_search_display_pattern()
call cursor(1, 1) call cursor(1, 1)
let @/ = 'foo' let @/ = 'foo'
let pat = escape(@/, '()*?'. '\s\+') let pat = @/->escape('()*?'. '\s\+')
let g:a = execute(':unsilent :norm! n') let g:a = execute(':unsilent :norm! n')
call assert_match(pat, g:a) call assert_match(pat, g:a)

View File

@ -10,7 +10,7 @@ func CheckFileTime(doSleep)
let fl = ['Hello World!'] let fl = ['Hello World!']
for fname in fnames for fname in fnames
call writefile(fl, fname) call writefile(fl, fname)
call add(times, getftime(fname)) call add(times, fname->getftime())
if a:doSleep if a:doSleep
sleep 1 sleep 1
endif endif
@ -19,8 +19,8 @@ func CheckFileTime(doSleep)
let time_correct = (times[0] <= times[1] && times[1] <= times[2]) let time_correct = (times[0] <= times[1] && times[1] <= times[2])
if a:doSleep || time_correct if a:doSleep || time_correct
call assert_true(time_correct, printf('Expected %s <= %s <= %s', times[0], times[1], times[2])) 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(strlen(fl[0] . "\n"), fnames[0]->getfsize())
call assert_equal('file', getftype(fnames[0])) call assert_equal('file', fnames[0]->getftype())
call assert_equal('rw-', getfperm(fnames[0])[0:2]) call assert_equal('rw-', getfperm(fnames[0])[0:2])
let result = 1 let result = 1
endif endif

View File

@ -8,7 +8,7 @@ func Test_missing_attr()
call assert_equal('1', synIDattr(hlID("Mine"), "inverse", 'cterm')) call assert_equal('1', synIDattr(hlID("Mine"), "inverse", 'cterm'))
hi Mine cterm=standout gui=undercurl hi Mine cterm=standout gui=undercurl
call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm')) 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 gui=strikethrough hi Mine gui=strikethrough
call assert_equal('1', synIDattr(hlID("Mine"), "strikethrough", 'gui')) call assert_equal('1', synIDattr(hlID("Mine"), "strikethrough", 'gui'))
hi Mine cterm=NONE gui=NONE hi Mine cterm=NONE gui=NONE

View File

@ -316,7 +316,7 @@ func Test_getsettagstack()
enew | only enew | only
call settagstack(1, {'items' : []}) call settagstack(1, {'items' : []})
call assert_equal(0, gettagstack(1).length) call assert_equal(0, gettagstack(1).length)
call assert_equal([], gettagstack(1).items) call assert_equal([], 1->gettagstack().items)
" Error cases " Error cases
call assert_equal({}, gettagstack(100)) call assert_equal({}, gettagstack(100))
call assert_equal(-1, settagstack(100, {'items' : []})) call assert_equal(-1, settagstack(100, {'items' : []}))

View File

@ -104,7 +104,7 @@ func Test_true_false_arg()
call Try_arg_true_false('maparg("asdf", "i", %v%)', "", "asdff") 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('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 new colored
call setline(1, '<here>') call setline(1, '<here>')

View File

@ -111,7 +111,7 @@ func Test_list2str_str2list_utf8()
let s = "\u304b\u3099\u3044" let s = "\u304b\u3099\u3044"
let l = [0x304b, 0x3099, 0x3044] let l = [0x304b, 0x3099, 0x3044]
call assert_equal(l, str2list(s, 1)) call assert_equal(l, str2list(s, 1))
call assert_equal(s, list2str(l, 1)) call assert_equal(s, l->list2str(1))
if &enc ==# 'utf-8' if &enc ==# 'utf-8'
call assert_equal(str2list(s), str2list(s, 1)) call assert_equal(str2list(s), str2list(s, 1))
call assert_equal(list2str(l), list2str(l, 1)) call assert_equal(list2str(l), list2str(l, 1))

View File

@ -635,7 +635,7 @@ function! MSG(enr, emsg)
if v:errmsg == "" if v:errmsg == ""
Xout "Message missing." Xout "Message missing."
else else
let v:errmsg = escape(v:errmsg, '"') let v:errmsg = v:errmsg->escape('"')
Xout "Unexpected message:" v:errmsg Xout "Unexpected message:" v:errmsg
endif endif
endif endif

View File

@ -1,6 +1,7 @@
local helpers = require('test.functional.helpers')(after_each) local helpers = require('test.functional.helpers')(after_each)
local clear, source = helpers.clear, helpers.source local clear, source = helpers.clear, helpers.source
local eq, eval, command = helpers.eq, helpers.eval, helpers.command local eq, eval, command = helpers.eq, helpers.eval, helpers.command
local exc_exec = helpers.exc_exec
describe('Test for delete()', function() describe('Test for delete()', function()
before_each(clear) before_each(clear)
@ -38,7 +39,7 @@ describe('Test for delete()', function()
eq(eval("['a', 'b']"), eval("readfile('Xdir1/Xfile')")) eq(eval("['a', 'b']"), eval("readfile('Xdir1/Xfile')"))
eq(1, eval("isdirectory('Xdir1/subdir')")) eq(1, eval("isdirectory('Xdir1/subdir')"))
eq(eval("['a', 'b']"), eval("readfile('Xdir1/subdir/Xfile')")) eq(eval("['a', 'b']"), eval("readfile('Xdir1/subdir/Xfile')"))
eq(1, eval("isdirectory('Xdir1/empty')")) eq(1, eval("'Xdir1/empty'->isdirectory()"))
eq(0, eval("delete('Xdir1', 'rf')")) eq(0, eval("delete('Xdir1', 'rf')"))
eq(0, eval("isdirectory('Xdir1')")) eq(0, eval("isdirectory('Xdir1')"))
eq(-1, eval("delete('Xdir1', 'd')")) eq(-1, eval("delete('Xdir1', 'd')"))
@ -114,4 +115,10 @@ describe('Test for delete()', function()
eq(0, eval("delete('Xdir4/Xfile')")) eq(0, eval("delete('Xdir4/Xfile')"))
eq(0, eval("delete('Xdir4', 'd')")) eq(0, eval("delete('Xdir4', 'd')"))
end) end)
it('gives correct emsgs', function()
eq('Vim(call):E474: Invalid argument', exc_exec("call delete('')"))
eq('Vim(call):E15: Invalid expression: 0',
exc_exec("call delete('foo', 0)"))
end)
end) end)

View File

@ -81,7 +81,7 @@ describe('expand file name', function()
call assert_equal('e Xfile1', expandcmd('e %')) call assert_equal('e Xfile1', expandcmd('e %'))
edit Xfile2 edit Xfile2
edit Xfile1 edit Xfile1
call assert_equal('e Xfile2', expandcmd('e #')) call assert_equal('e Xfile2', 'e #'->expandcmd())
edit Xfile2 edit Xfile2
edit Xfile3 edit Xfile3
edit Xfile4 edit Xfile4

View File

@ -3,7 +3,7 @@ require('os')
local helpers = require('test.functional.helpers')(after_each) local helpers = require('test.functional.helpers')(after_each)
local clear, call, eq = helpers.clear, helpers.call, helpers.eq 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() describe('Test getting and setting file permissions', function()
local tempfile = helpers.tmpname() local tempfile = helpers.tmpname()
@ -14,11 +14,12 @@ describe('Test getting and setting file permissions', function()
end) end)
it('file permissions', function() it('file permissions', function()
-- eval() is used to test VimL method syntax for setfperm() and getfperm()
eq('', call('getfperm', tempfile)) eq('', call('getfperm', tempfile))
eq(0, call('setfperm', tempfile, 'r--------')) eq(0, eval("'" .. tempfile .. "'->setfperm('r--------')"))
call('writefile', {'one'}, tempfile) call('writefile', {'one'}, tempfile)
eq(9, call('len', call('getfperm', tempfile))) eq(9, eval("len('" .. tempfile .. "'->getfperm())"))
eq(1, call('setfperm', tempfile, 'rwx------')) eq(1, call('setfperm', tempfile, 'rwx------'))
if helpers.is_os('win') then if helpers.is_os('win') then

View File

@ -60,12 +60,6 @@ describe('filename modifiers', function()
call assert_equal("'abc\\\ndef'", fnamemodify("abc\ndef", ':S')) call assert_equal("'abc\\\ndef'", fnamemodify("abc\ndef", ':S'))
endif endif
endfunc endfunc
func Test_expand()
new
call assert_equal("", expand('%:S'))
quit
endfunc
]=]) ]=])
end) end)
@ -73,9 +67,4 @@ describe('filename modifiers', function()
call('Test_fnamemodify') call('Test_fnamemodify')
expected_empty() expected_empty()
end) end)
it('works for :S in an unnamed buffer', function()
call('Test_expand')
expected_empty()
end)
end) end)

View File

@ -86,14 +86,15 @@ describe('luaeval()', function()
-- meaningful later. -- meaningful later.
it('correctly evaluates scalars', function() it('correctly evaluates scalars', function()
-- Also test method call (->) syntax
eq(1, funcs.luaeval('1')) eq(1, funcs.luaeval('1'))
eq(0, eval('type(luaeval("1"))')) eq(0, eval('"1"->luaeval()->type()'))
eq(1.5, funcs.luaeval('1.5')) eq(1.5, funcs.luaeval('1.5'))
eq(5, eval('type(luaeval("1.5"))')) eq(5, eval('"1.5"->luaeval()->type()'))
eq("test", funcs.luaeval('"test"')) eq("test", funcs.luaeval('"test"'))
eq(1, eval('type(luaeval("\'test\'"))')) eq(1, eval('"\'test\'"->luaeval()->type()'))
eq('', funcs.luaeval('""')) eq('', funcs.luaeval('""'))
eq('\000', funcs.luaeval([['\0']])) eq('\000', funcs.luaeval([['\0']]))

View File

@ -168,7 +168,8 @@ describe('json_decode() function', function()
end) end)
it('parses floating-point numbers', function() it('parses floating-point numbers', function()
eq('100000.0', eval('string(json_decode("100000.0"))')) -- Also test method call (->) syntax
eq('100000.0', eval('"100000.0"->json_decode()->string()'))
eq(100000.5, funcs.json_decode('100000.5')) eq(100000.5, funcs.json_decode('100000.5'))
eq(-100000.5, funcs.json_decode('-100000.5')) eq(-100000.5, funcs.json_decode('-100000.5'))
eq(-100000.5e50, funcs.json_decode('-100000.5e50')) eq(-100000.5e50, funcs.json_decode('-100000.5e50'))
@ -549,11 +550,12 @@ describe('json_encode() function', function()
end) end)
it('dumps floats', function() it('dumps floats', function()
eq('0.0', eval('json_encode(0.0)')) -- Also test method call (->) syntax
eq('0.0', eval('0.0->json_encode()'))
eq('10.5', funcs.json_encode(10.5)) eq('10.5', funcs.json_encode(10.5))
eq('-10.5', funcs.json_encode(-10.5)) eq('-10.5', funcs.json_encode(-10.5))
eq('-1.0e-5', funcs.json_encode(-1e-5)) eq('-1.0e-5', funcs.json_encode(-1e-5))
eq('1.0e50', eval('json_encode(1.0e50)')) eq('1.0e50', eval('1.0e50->json_encode()'))
end) end)
it('fails to dump NaN and infinite values', function() it('fails to dump NaN and infinite values', function()