mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.4578: no warning when autoload script for completion has an error
Problem: No warning when an autoload script for completion function has an error. Solution: Do not ignore errors when a function name is given with a dot or '#' character. (closes #9958)
This commit is contained in:
parent
9323ca51c2
commit
fe8e9f6740
14
src/eval.c
14
src/eval.c
@ -695,6 +695,7 @@ call_vim_function(
|
|||||||
char_u *arg;
|
char_u *arg;
|
||||||
char_u *name;
|
char_u *name;
|
||||||
char_u *tofree = NULL;
|
char_u *tofree = NULL;
|
||||||
|
int ignore_errors;
|
||||||
|
|
||||||
rettv->v_type = VAR_UNKNOWN; // clear_tv() uses this
|
rettv->v_type = VAR_UNKNOWN; // clear_tv() uses this
|
||||||
CLEAR_FIELD(funcexe);
|
CLEAR_FIELD(funcexe);
|
||||||
@ -702,11 +703,18 @@ call_vim_function(
|
|||||||
funcexe.fe_lastline = curwin->w_cursor.lnum;
|
funcexe.fe_lastline = curwin->w_cursor.lnum;
|
||||||
funcexe.fe_evaluate = TRUE;
|
funcexe.fe_evaluate = TRUE;
|
||||||
|
|
||||||
// The name might be "import.Func" or "Funcref".
|
// The name might be "import.Func" or "Funcref". We don't know, we need to
|
||||||
|
// ignore errors for an undefined name. But we do want errors when an
|
||||||
|
// autoload script has errors. Guess that when there is a dot or '#' in
|
||||||
|
// the name showing errors is the right choice.
|
||||||
|
ignore_errors = vim_strchr(func, '.') == NULL
|
||||||
|
&& vim_strchr(func, AUTOLOAD_CHAR) == NULL;
|
||||||
arg = func;
|
arg = func;
|
||||||
++emsg_off;
|
if (ignore_errors)
|
||||||
|
++emsg_off;
|
||||||
name = deref_function_name(&arg, &tofree, &EVALARG_EVALUATE, FALSE);
|
name = deref_function_name(&arg, &tofree, &EVALARG_EVALUATE, FALSE);
|
||||||
--emsg_off;
|
if (ignore_errors)
|
||||||
|
--emsg_off;
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
name = func;
|
name = func;
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ source check.vim
|
|||||||
source screendump.vim
|
source screendump.vim
|
||||||
source view_util.vim
|
source view_util.vim
|
||||||
source shared.vim
|
source shared.vim
|
||||||
|
import './vim9.vim' as v9
|
||||||
|
|
||||||
func SetUp()
|
func SetUp()
|
||||||
func SaveLastScreenLine()
|
func SaveLastScreenLine()
|
||||||
@ -543,6 +544,32 @@ func Test_getcompletion()
|
|||||||
call assert_fails('call getcompletion("abc", [])', 'E475:')
|
call assert_fails('call getcompletion("abc", [])', 'E475:')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_complete_autoload_error()
|
||||||
|
let save_rtp = &rtp
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
export def Complete(..._): string
|
||||||
|
return 'match'
|
||||||
|
enddef
|
||||||
|
echo this will cause an error
|
||||||
|
END
|
||||||
|
call mkdir('Xdir/autoload', 'p')
|
||||||
|
call writefile(lines, 'Xdir/autoload/script.vim')
|
||||||
|
exe 'set rtp+=' .. getcwd() .. '/Xdir'
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
vim9script
|
||||||
|
import autoload 'script.vim'
|
||||||
|
command -nargs=* -complete=custom,script.Complete Cmd eval 0 + 0
|
||||||
|
&wildcharm = char2nr("\<Tab>")
|
||||||
|
feedkeys(":Cmd \<Tab>", 'xt')
|
||||||
|
END
|
||||||
|
call v9.CheckScriptFailure(lines, 'E121: Undefined variable: this')
|
||||||
|
|
||||||
|
let &rtp = save_rtp
|
||||||
|
call delete('Xdir', 'rf')
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_fullcommand()
|
func Test_fullcommand()
|
||||||
let tests = {
|
let tests = {
|
||||||
\ '': '',
|
\ '': '',
|
||||||
@ -2671,8 +2698,7 @@ func Test_fuzzy_completion_userdefined_snr_func()
|
|||||||
endfunc
|
endfunc
|
||||||
set wildoptions=fuzzy
|
set wildoptions=fuzzy
|
||||||
call feedkeys(":call sendmail\<C-A>\<C-B>\"\<CR>", 'tx')
|
call feedkeys(":call sendmail\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
call assert_equal('"call SendSomemail() S1e2n3dmail() '
|
call assert_match('"call SendSomemail() S1e2n3dmail() <SNR>\d\+_Sendmail()', @:)
|
||||||
\ .. expand("<SID>") .. 'Sendmail()', @:)
|
|
||||||
set wildoptions&
|
set wildoptions&
|
||||||
delfunc s:Sendmail
|
delfunc s:Sendmail
|
||||||
delfunc SendSomemail
|
delfunc SendSomemail
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4578,
|
||||||
/**/
|
/**/
|
||||||
4577,
|
4577,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user