summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-01-22 19:17:31 +0000
committerBram Moolenaar <Bram@vim.org>2022-01-22 19:17:31 +0000
commit3ba685eeefcfbbf895d70664357ef05f252d7b21 (patch)
tree7dfdfdd1a356c1fcb611daeed436a62506a2d46b
parent39b8944539a9cde553fe709e535fdfd37d0f9307 (diff)
downloadvim-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.vim28
-rw-r--r--src/textformat.c3
-rw-r--r--src/version.c2
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,