]> granicus.if.org Git - vim/commitdiff
patch 8.2.4183: cannot use an import in 'formatexpr' v8.2.4183
authorBram Moolenaar <Bram@vim.org>
Sat, 22 Jan 2022 19:17:31 +0000 (19:17 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Jan 2022 19:17:31 +0000 (19:17 +0000)
Problem:    Cannot use an import in 'formatexpr'.
Solution:   Set the script context when evaluating 'formatexpr'.

src/testdir/test_vim9_import.vim
src/textformat.c
src/version.c

index e6d97289609ff028dbac567e6172824f27295277..1cf1eb069981c07362f31049f56670c5dc76bdb9 100644 (file)
@@ -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:')
index 3c343cd2c7537d357c72512b5e5e4a4b9d4b281a..fd0d31d639fa6695a51927ebaacd7da6791a3531 100644 (file)
@@ -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;
 }
index fcf40bdb2de65eb330b30d2a683d06ca32ac959a..bdf7a3a51a23092dd0a21fbb7298bce18fa916ce 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4183,
 /**/
     4182,
 /**/