aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-08-02 10:58:10 +0800
committerGitHub <noreply@github.com>2024-08-02 02:58:10 +0000
commit48e4589eaded3213956aa9ddbcc0aa6971a974e5 (patch)
treec07e1ff8cbd38f946815efa8516dd8a40188fdac
parent3bc864e7739d9fa8b086f5606a666abb4a34054d (diff)
downloadrneovim-48e4589eaded3213956aa9ddbcc0aa6971a974e5.tar.gz
rneovim-48e4589eaded3213956aa9ddbcc0aa6971a974e5.tar.bz2
rneovim-48e4589eaded3213956aa9ddbcc0aa6971a974e5.zip
vim-patch:8.2.4416: Vim9: using a script-local function requires using "s:" (#29950)
Problem: Vim9: using a script-local function requires using "s:" when setting 'completefunc'. Solution: Do not require "s:" in Vim9 script. (closes vim/vim#9796) https://github.com/vim/vim/commit/1fca5f3e86f08e696058fc7e86dfe41b415a78e6 vim-patch:8.2.4417: using NULL pointer Problem: Using NULL pointer. Solution: Set offset after checking for NULL pointer. https://github.com/vim/vim/commit/e89bfd212b21c227f026e467f882c62cdd6e642d Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--runtime/doc/options.txt15
-rw-r--r--src/nvim/eval/userfunc.c2
-rw-r--r--test/old/testdir/test_ins_complete.vim17
3 files changed, 29 insertions, 5 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index c8d4bea5a8..875767283a 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -384,15 +384,22 @@ the name, e.g. "<lambda>123". Examples:
set opfunc=function('MyOpFunc')
set opfunc=funcref('MyOpFunc')
set opfunc={a\ ->\ MyOpFunc(a)}
- " set using a funcref variable
+
+Set to a script-local function: >
+ set opfunc=s:MyLocalFunc
+ set opfunc=<SID>MyLocalFunc
+
+Set using a funcref variable: >
let Fn = function('MyTagFunc')
let &tagfunc = Fn
- " set using a lambda expression
+
+Set using a lambda expression: >
let &tagfunc = {t -> MyTagFunc(t)}
- " set using a variable with lambda expression
+
+Set using a variable with lambda expression: >
let L = {a, b, c -> MyTagFunc(a, b , c)}
let &tagfunc = L
-<
+
Setting the filetype
diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c
index 42391ecec7..ab8e67016f 100644
--- a/src/nvim/eval/userfunc.c
+++ b/src/nvim/eval/userfunc.c
@@ -2084,7 +2084,7 @@ char *get_scriptlocal_funcname(char *funcname)
if (strncmp(funcname, "s:", 2) != 0
&& strncmp(funcname, "<SID>", 5) != 0) {
- // The function name is not a script-local function name
+ // The function name does not have a script-local prefix.
return NULL;
}
diff --git a/test/old/testdir/test_ins_complete.vim b/test/old/testdir/test_ins_complete.vim
index 882e707f63..b90c0013d9 100644
--- a/test/old/testdir/test_ins_complete.vim
+++ b/test/old/testdir/test_ins_complete.vim
@@ -1691,6 +1691,23 @@ func Test_completefunc_callback()
bw!
delfunc s:CompleteFunc3
+ " In Vim9 script s: can be omitted
+ let lines =<< trim END
+ vim9script
+ var CompleteFunc4Args = []
+ def CompleteFunc4(findstart: bool, base: string): any
+ add(CompleteFunc4Args, [findstart, base])
+ return findstart ? 0 : []
+ enddef
+ set completefunc=CompleteFunc4
+ new
+ setline(1, 'script1')
+ feedkeys("A\<C-X>\<C-U>\<Esc>", 'x')
+ assert_equal([[1, ''], [0, 'script1']], CompleteFunc4Args)
+ bw!
+ END
+ call CheckScriptSuccess(lines)
+
" invalid return value
let &completefunc = {a -> 'abc'}
call feedkeys("A\<C-X>\<C-U>\<Esc>", 'x')