0
0
mirror of https://github.com/vim/vim.git synced 2025-10-15 07:14:09 -04:00

patch 8.2.4184: cannot use an import in 'includeexpr'

Problem:    Cannot use an import in 'includeexpr'.
Solution:   Set the script context when evaluating 'includeexpr'
This commit is contained in:
Bram Moolenaar
2022-01-22 20:19:22 +00:00
parent 3ba685eeef
commit 47bcc5f4c8
3 changed files with 38 additions and 1 deletions

View File

@@ -2094,11 +2094,16 @@ file_name_in_line(
eval_includeexpr(char_u *ptr, int len) eval_includeexpr(char_u *ptr, int len)
{ {
char_u *res; char_u *res;
sctx_T save_sctx = current_sctx;
set_vim_var_string(VV_FNAME, ptr, len); set_vim_var_string(VV_FNAME, ptr, len);
current_sctx = curbuf->b_p_script_ctx[BV_INEX];
res = eval_to_string_safe(curbuf->b_p_inex, res = eval_to_string_safe(curbuf->b_p_inex,
was_set_insecurely((char_u *)"includeexpr", OPT_LOCAL), FALSE); was_set_insecurely((char_u *)"includeexpr", OPT_LOCAL), TRUE);
set_vim_var_string(VV_FNAME, NULL, 0); set_vim_var_string(VV_FNAME, NULL, 0);
current_sctx = save_sctx;
return res; return res;
} }
# endif # endif

View File

@@ -787,6 +787,36 @@ def Test_import_in_formatexpr()
set formatexpr= set formatexpr=
enddef enddef
def Test_import_in_includeexpr()
writefile(['found it'], 'Xthisfile')
new
var lines =<< trim END
vim9script
export def DoSub(): string
return substitute(v:fname, 'that', 'this', '')
enddef
END
writefile(lines, 'Xinclude.vim')
lines =<< trim END
vim9script
import './Xinclude.vim'
set includeexpr=Xinclude.DoSub()
END
CheckScriptSuccess(lines)
setline(1, ['Xthatfile'])
exe "normal \<C-W>f"
assert_equal('Xthisfile', expand('%'))
bwipe!
bwipe!
set includeexpr=
delete('Xinclude')
delete('Xthisfile')
enddef
def Test_export_fails() def Test_export_fails()
CheckScriptFailure(['export var some = 123'], 'E1042:') CheckScriptFailure(['export var some = 123'], 'E1042:')
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:') CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')

View File

@@ -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 */
/**/
4184,
/**/ /**/
4183, 4183,
/**/ /**/