aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-08-20 15:52:35 +0800
committerGitHub <noreply@github.com>2022-08-20 15:52:35 +0800
commitbffaf1e27e49c3dbbc0b59d023a0fd9243e254aa (patch)
tree58ab40613eff5c678deced1c5fca3c8ad4c244d7
parent1a57cd383684b7488e02e094f49dfe607bc53632 (diff)
downloadrneovim-bffaf1e27e49c3dbbc0b59d023a0fd9243e254aa.tar.gz
rneovim-bffaf1e27e49c3dbbc0b59d023a0fd9243e254aa.tar.bz2
rneovim-bffaf1e27e49c3dbbc0b59d023a0fd9243e254aa.zip
fix(eval): check for v:lua when calling callback (#19855)
This makes callback_call() match call_vim_function() when calling a function.
-rw-r--r--src/nvim/eval.c12
-rw-r--r--src/nvim/ops.c2
-rw-r--r--test/functional/lua/luaeval_spec.lua5
3 files changed, 16 insertions, 3 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 21068e9101..f2fe106224 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -5842,7 +5842,17 @@ bool callback_call(Callback *const callback, const int argcount_in, typval_T *co
switch (callback->type) {
case kCallbackFuncref:
name = callback->data.funcref;
- partial = NULL;
+ int len = (int)STRLEN(name);
+ if (len >= 6 && !memcmp(name, "v:lua.", 6)) {
+ name += 6;
+ len = check_luafunc_name(name, false);
+ if (len == 0) {
+ return false;
+ }
+ partial = vvlua_partial;
+ } else {
+ partial = NULL;
+ }
break;
case kCallbackPartial:
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index b4fc7534bc..50f9650a8a 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -6191,7 +6191,7 @@ static void op_function(const oparg_T *oap)
finish_op = false;
typval_T rettv;
- if (callback_call(&opfunc_cb, 1, argv, &rettv) != FAIL) {
+ if (callback_call(&opfunc_cb, 1, argv, &rettv)) {
tv_clear(&rettv);
}
diff --git a/test/functional/lua/luaeval_spec.lua b/test/functional/lua/luaeval_spec.lua
index 1322155595..9f313eab9e 100644
--- a/test/functional/lua/luaeval_spec.lua
+++ b/test/functional/lua/luaeval_spec.lua
@@ -467,7 +467,6 @@ describe('v:lua', function()
end
end
end
- vim.api.nvim_buf_set_option(0, 'omnifunc', 'v:lua.mymod.omni')
]])
end)
@@ -515,6 +514,7 @@ describe('v:lua', function()
[5] = {bold = true, foreground = Screen.colors.SeaGreen4},
})
screen:attach()
+ meths.buf_set_option(0, 'omnifunc', 'v:lua.mymod.omni')
feed('isome st<c-x><c-o>')
screen:expect{grid=[[
some stuff^ |
@@ -526,6 +526,9 @@ describe('v:lua', function()
{1:~ }|
{4:-- Omni completion (^O^N^P) }{5:match 1 of 3} |
]]}
+ meths.set_option('operatorfunc', 'v:lua.mymod.noisy')
+ feed('<Esc>g@g@')
+ eq("hey line", meths.get_current_line())
end)
it('supports packages', function()