diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-01-22 19:17:31 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-01-22 19:17:31 +0000 |
commit | 3ba685eeefcfbbf895d70664357ef05f252d7b21 (patch) | |
tree | 7dfdfdd1a356c1fcb611daeed436a62506a2d46b | |
parent | 39b8944539a9cde553fe709e535fdfd37d0f9307 (diff) | |
download | vim-git-3ba685eeefcfbbf895d70664357ef05f252d7b21.tar.gz |
patch 8.2.4183: cannot use an import in 'formatexpr'v8.2.4183
Problem: Cannot use an import in 'formatexpr'.
Solution: Set the script context when evaluating 'formatexpr'.
-rw-r--r-- | src/testdir/test_vim9_import.vim | 28 | ||||
-rw-r--r-- | src/textformat.c | 3 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index e6d972896..1cf1eb069 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -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:') diff --git a/src/textformat.c b/src/textformat.c index 3c343cd2c..fd0d31d63 100644 --- a/src/textformat.c +++ b/src/textformat.c @@ -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). @@ -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) @@ -924,6 +926,7 @@ fex_format( set_vim_var_string(VV_CHAR, NULL, -1); vim_free(fex); + current_sctx = save_sctx; return r; } diff --git a/src/version.c b/src/version.c index fcf40bdb2..bdf7a3a51 100644 --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4183, +/**/ 4182, /**/ 4181, |