Skip to content

Commit

Permalink
patch 8.2.4183: cannot use an import in 'formatexpr'
Browse files Browse the repository at this point in the history
Problem:    Cannot use an import in 'formatexpr'.
Solution:   Set the script context when evaluating 'formatexpr'.
  • Loading branch information
brammool committed Jan 22, 2022
1 parent 39b8944 commit 3ba685e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
28 changes: 28 additions & 0 deletions src/testdir/test_vim9_import.vim
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,34 @@ def Run_Test_import_in_diffexpr()
bwipe!
enddef

def Test_import_in_formatexpr()
var lines =<< trim END
vim9script
export def MyFormatExpr(): number
g:did_format = 'yes'
return 0
enddef
END
writefile(lines, 'Xformatter')

lines =<< trim END
vim9script
import './Xformatter' as format
set formatexpr=format.MyFormatExpr()
END
CheckScriptSuccess(lines)

new
setline(1, ['a', 'b', 'c'])
normal gqG
assert_equal('yes', g:did_format)

bwipe!
delete('Xformatter')
unlet g:did_format
set formatexpr=
enddef

def Test_export_fails()
CheckScriptFailure(['export var some = 123'], 'E1042:')
CheckScriptFailure(['vim9script', 'export var g:some'], 'E1022:')
Expand Down
3 changes: 3 additions & 0 deletions src/textformat.c
Original file line number Diff line number Diff line change
Expand Up @@ -903,6 +903,7 @@ fex_format(
OPT_LOCAL);
int r;
char_u *fex;
sctx_T save_sctx = current_sctx;

// Set v:lnum to the first line number and v:count to the number of lines.
// Set v:char to the character to be inserted (can be NUL).
Expand All @@ -914,6 +915,7 @@ fex_format(
fex = vim_strsave(curbuf->b_p_fex);
if (fex == NULL)
return 0;
current_sctx = curbuf->b_p_script_ctx[BV_FEX];

// Evaluate the function.
if (use_sandbox)
Expand All @@ -924,6 +926,7 @@ fex_format(

set_vim_var_string(VV_CHAR, NULL, -1);
vim_free(fex);
current_sctx = save_sctx;

return r;
}
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 */
/**/
4183,
/**/
4182,
/**/
Expand Down

0 comments on commit 3ba685e

Please sign in to comment.