patch 8.2.4185: cannot use an import in 'indentexpr' v8.2.4185
authorBram Moolenaar <Bram@vim.org>
Sat, 22 Jan 2022 20:32:00 +0000 (20:32 +0000)
committerBram Moolenaar <Bram@vim.org>
Sat, 22 Jan 2022 20:32:00 +0000 (20:32 +0000)
Problem:    Cannot use an import in 'indentexpr'.
Solution:   Set the script context when evaluating 'indentexpr'

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

index a1012d2689827569d3f093366c8e2c28e1314573..8dd4ef99cd91d825299d6381e9d0176b848c312f 100644 (file)
@@ -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
@@ -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.
@@ -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"
index 423ee0dfd22df154a7123c8a5f499310fabf3bc9..52a0c821da9e21a87f04a3f439ba8f80beb6bd57 100644 (file)
@@ -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:')
index c4a690c072a42ec49c9b43d9aa44019b650f57d5..9571473c96261a0b5c2b0391dbc9d4ce05dab3d4 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4185,
 /**/
     4184,
 /**/