mirror of
https://github.com/neovim/neovim.git
synced 2026-07-16 14:11:28 +00:00
Merge #15293 Vimscript "method" syntax
Port VimL's method call syntax - vim-patch:8.1.{1638,1800,1803,1807,1809,1816,1820,1821,1828,1834,1835,1861,1863,1878,1879,1888,1909,1911,1912}
This commit is contained in:
@@ -247,9 +247,9 @@ describe('startup', function()
|
||||
[[" -u NONE -i NONE --cmd "set noruler" --cmd "let g:foo = g:bar"')]])
|
||||
screen:expect([[
|
||||
^ |
|
||||
|
|
||||
Error detected while processing pre-vimrc command line: |
|
||||
E121: Undefined variable: g:bar |
|
||||
E15: Invalid expression: g:bar |
|
||||
Press ENTER or type command to continue |
|
||||
|
|
||||
]])
|
||||
|
||||
@@ -53,7 +53,7 @@ describe('NULL', function()
|
||||
|
||||
-- Correct behaviour
|
||||
null_expr_test('can be indexed with error message for empty list', 'L[0]',
|
||||
'E684: list index out of range: 0\nE15: Invalid expression: L[0]', nil)
|
||||
'E684: list index out of range: 0', nil)
|
||||
null_expr_test('can be splice-indexed', 'L[:]', 0, {})
|
||||
null_expr_test('is not locked', 'islocked("v:_null_list")', 0, 0)
|
||||
null_test('is accepted by :for', 'for x in L|throw x|endfor', 0)
|
||||
@@ -68,7 +68,7 @@ describe('NULL', function()
|
||||
null_expr_test('can be copied', 'copy(L)', 0, {})
|
||||
null_expr_test('can be deepcopied', 'deepcopy(L)', 0, {})
|
||||
null_expr_test('does not crash when indexed', 'L[1]',
|
||||
'E684: list index out of range: 1\nE15: Invalid expression: L[1]', nil)
|
||||
'E684: list index out of range: 1', nil)
|
||||
null_expr_test('does not crash call()', 'call("arglistid", L)', 0, 0)
|
||||
null_expr_test('does not crash col()', 'col(L)', 0, 0)
|
||||
null_expr_test('does not crash virtcol()', 'virtcol(L)', 0, 0)
|
||||
@@ -135,7 +135,7 @@ describe('NULL', function()
|
||||
end)
|
||||
describe('dict', function()
|
||||
it('does not crash when indexing NULL dict', function()
|
||||
eq('\nE716: Key not present in Dictionary: "test"\nE15: Invalid expression: v:_null_dict.test',
|
||||
eq('\nE716: Key not present in Dictionary: "test"',
|
||||
redir_exec('echo v:_null_dict.test'))
|
||||
end)
|
||||
null_expr_test('makes extend error out', 'extend(D, {})', 'E742: Cannot change value of extend() argument', 0)
|
||||
|
||||
@@ -26,6 +26,14 @@ describe('assert function:', function()
|
||||
call('assert_beeps', 'normal 0')
|
||||
expected_errors({'command did not beep: normal 0'})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(0, 'normal h'->assert_beeps())
|
||||
call assert_equal(1, 'normal 0'->assert_beeps())
|
||||
]]
|
||||
expected_errors({tmpname .. ' line 2: command did not beep: normal 0'})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_equal({expected}, {actual}, [, {msg}])
|
||||
@@ -133,6 +141,14 @@ describe('assert function:', function()
|
||||
call('assert_false', {})
|
||||
expected_errors({'Expected False but got []'})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(0, v:false->assert_false())
|
||||
call assert_equal(1, 123->assert_false())
|
||||
]]
|
||||
expected_errors({tmpname .. ' line 2: Expected False but got 123'})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_true({actual}, [, {msg}])
|
||||
@@ -148,6 +164,14 @@ describe('assert function:', function()
|
||||
eq(1, call('assert_true', 1.5))
|
||||
expected_errors({'Expected True but got 1.5'})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(0, v:true->assert_true())
|
||||
call assert_equal(1, 0->assert_true())
|
||||
]]
|
||||
expected_errors({tmpname .. ' line 2: Expected True but got 0'})
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('v:errors', function()
|
||||
@@ -223,6 +247,15 @@ describe('assert function:', function()
|
||||
call('assert_match', 'bar.*foo', 'foobar', 'wrong')
|
||||
expected_errors({"wrong: Pattern 'bar.*foo' does not match 'foobar'"})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(1, 'foobar'->assert_match('bar.*foo', 'wrong'))
|
||||
]]
|
||||
expected_errors({
|
||||
tmpname .. " line 1: wrong: Pattern 'bar.*foo' does not match 'foobar'"
|
||||
})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_notmatch({pat}, {text}[, {msg}])
|
||||
@@ -237,6 +270,13 @@ describe('assert function:', function()
|
||||
call('assert_notmatch', 'foo', 'foobar')
|
||||
expected_errors({"Pattern 'foo' does match 'foobar'"})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(1, 'foobar'->assert_notmatch('foo'))
|
||||
]]
|
||||
expected_errors({tmpname .. " line 1: Pattern 'foo' does match 'foobar'"})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_fails({cmd}, [, {error}])
|
||||
@@ -267,6 +307,15 @@ describe('assert function:', function()
|
||||
eq(1, eval([[assert_fails('echo', '', 'echo command')]]))
|
||||
expected_errors({'command did not fail: echo command'})
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(1, 'echo'->assert_fails('', 'echo command'))
|
||||
]]
|
||||
expected_errors({
|
||||
tmpname .. ' line 1: command did not fail: echo command'
|
||||
})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_inrange({lower}, {upper}, {actual}[, {msg}])
|
||||
@@ -292,6 +341,15 @@ describe('assert function:', function()
|
||||
eq('Vim(call):E119: Not enough arguments for function: assert_inrange',
|
||||
exc_exec("call assert_inrange(1, 1)"))
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(0, 5->assert_inrange(5, 7))
|
||||
call assert_equal(0, 7->assert_inrange(5, 7))
|
||||
call assert_equal(1, 8->assert_inrange(5, 7))
|
||||
]]
|
||||
expected_errors({tmpname .. ' line 3: Expected range 5 - 7, but got 8'})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_report({msg})
|
||||
@@ -302,6 +360,13 @@ describe('assert function:', function()
|
||||
command('call remove(v:errors, 0)')
|
||||
expected_empty()
|
||||
end)
|
||||
|
||||
it('can be used as a method', function()
|
||||
local tmpname = source [[
|
||||
call assert_equal(1, 'also wrong'->assert_report())
|
||||
]]
|
||||
expected_errors({tmpname .. ' line 1: also wrong'})
|
||||
end)
|
||||
end)
|
||||
|
||||
-- assert_exception({cmd}, [, {error}])
|
||||
|
||||
@@ -481,6 +481,21 @@ describe('v:lua', function()
|
||||
pcall_err(eval, 'v:lua.mymod.crashy()'))
|
||||
end)
|
||||
|
||||
it('works when called as a method', function()
|
||||
eq(123, eval('110->v:lua.foo(13)'))
|
||||
eq(true, exec_lua([[return _G.val == nil]]))
|
||||
|
||||
eq(321, eval('300->v:lua.foo(21, "boop")'))
|
||||
eq("boop", exec_lua([[return _G.val]]))
|
||||
|
||||
eq(NIL, eval('"there"->v:lua.mymod.noisy()'))
|
||||
eq("hey there", meths.get_current_line())
|
||||
eq({5, 10, 15, 20}, eval('[[1], [2, 3], [4]]->v:lua.vim.tbl_flatten()->map({_, v -> v * 5})'))
|
||||
|
||||
eq("Vim:E5108: Error executing lua [string \"<nvim>\"]:0: attempt to call global 'nonexistent' (a nil value)",
|
||||
pcall_err(eval, '"huh?"->v:lua.mymod.crashy()'))
|
||||
end)
|
||||
|
||||
it('works in :call', function()
|
||||
command(":call v:lua.mymod.noisy('command')")
|
||||
eq("hey command", meths.get_current_line())
|
||||
@@ -518,8 +533,15 @@ describe('v:lua', function()
|
||||
|
||||
eq("Vim:E15: Invalid expression: v:['lua'].foo()", pcall_err(eval, "v:['lua'].foo()"))
|
||||
eq("Vim(call):E461: Illegal variable name: v:['lua']", pcall_err(command, "call v:['lua'].baar()"))
|
||||
eq("Vim:E117: Unknown function: v:lua", pcall_err(eval, "v:lua()"))
|
||||
|
||||
eq("Vim(let):E46: Cannot change read-only variable \"v:['lua']\"", pcall_err(command, "let v:['lua'] = 'xx'"))
|
||||
eq("Vim(let):E46: Cannot change read-only variable \"v:lua\"", pcall_err(command, "let v:lua = 'xx'"))
|
||||
|
||||
eq("Vim:E107: Missing parentheses: v:lua.func", pcall_err(eval, "'bad'->v:lua.func"))
|
||||
eq("Vim:E274: No white space allowed before parenthesis", pcall_err(eval, "'bad'->v:lua.func ()"))
|
||||
eq("Vim:E107: Missing parentheses: v:lua", pcall_err(eval, "'bad'->v:lua"))
|
||||
eq("Vim:E117: Unknown function: v:lua", pcall_err(eval, "'bad'->v:lua()"))
|
||||
eq("Vim:E15: Invalid expression: v:lua.()", pcall_err(eval, "'bad'->v:lua.()"))
|
||||
end)
|
||||
end)
|
||||
|
||||
@@ -653,14 +653,12 @@ describe('clipboard (with fake clipboard.vim)', function()
|
||||
'',
|
||||
'',
|
||||
'E121: Undefined variable: doesnotexist',
|
||||
'E15: Invalid expression: doesnotexist',
|
||||
}, 'v'}, eval("g:test_clip['*']"))
|
||||
feed_command(':echo "Howdy!"')
|
||||
eq({{
|
||||
'',
|
||||
'',
|
||||
'E121: Undefined variable: doesnotexist',
|
||||
'E15: Invalid expression: doesnotexist',
|
||||
'',
|
||||
'Howdy!',
|
||||
}, 'v'}, eval("g:test_clip['*']"))
|
||||
|
||||
Reference in New Issue
Block a user