Skip to content

Commit

Permalink
patch 8.2.4185: cannot use an import in 'indentexpr'
Browse files Browse the repository at this point in the history
Problem:    Cannot use an import in 'indentexpr'.
Solution:   Set the script context when evaluating 'indentexpr'
  • Loading branch information
brammool committed Jan 22, 2022
1 parent 47bcc5f commit 28e60cc
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/indent.c
Original file line number Diff line number Diff line change
Expand Up @@ -1829,6 +1829,7 @@ get_expr_indent(void)
int save_State;
int use_sandbox = was_set_insecurely((char_u *)"indentexpr",
OPT_LOCAL);
sctx_T save_sctx = current_sctx;

// Save and restore cursor position and curswant, in case it was changed
// via :normal commands
Expand All @@ -1839,6 +1840,7 @@ get_expr_indent(void)
if (use_sandbox)
++sandbox;
++textwinlock;
current_sctx = curbuf->b_p_script_ctx[BV_INDE];

// Need to make a copy, the 'indentexpr' option could be changed while
// evaluating it.
Expand All @@ -1852,6 +1854,7 @@ get_expr_indent(void)
if (use_sandbox)
--sandbox;
--textwinlock;
current_sctx = save_sctx;

// Restore the cursor position so that 'indentexpr' doesn't need to.
// Pretend to be in Insert mode, allow cursor past end of line for "o"
Expand Down
27 changes: 27 additions & 0 deletions src/testdir/test_vim9_import.vim
Original file line number Diff line number Diff line change
Expand Up @@ -817,6 +817,33 @@ def Test_import_in_includeexpr()
delete('Xthisfile')
enddef

def Test_import_in_indentexpr()
var lines =<< trim END
vim9script
export def GetIndent(): number
return 5
enddef
END
writefile(lines, 'Xindenter')

lines =<< trim END
vim9script
import './Xindenter' as indent
set indentexpr=indent.GetIndent()
set debug=throw
END
CheckScriptSuccess(lines)

new
setline(1, 'hello')
normal ==
assert_equal(' hello', getline(1))

bwipe!
set indentexpr= debug=
delete('Xindenter')
enddef

def Test_export_fails()
CheckScriptFailure(['export var some = 123'], 'E1042:')
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -750,6 +750,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4185,
/**/
4184,
/**/
Expand Down

0 comments on commit 28e60cc

Please sign in to comment.