patch 9.0.0754: 'indentexpr' overrules lisp indenting in one situation v9.0.0754
authorBram Moolenaar <Bram@vim.org>
Sat, 15 Oct 2022 09:49:36 +0000 (10:49 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 Oct 2022 09:49:36 +0000 (10:49 +0100)
Problem:    'indentexpr' overrules lisp indenting in one situation.
Solution:   Add "else" to keep the lisp indent. (issue #11327)

src/change.c
src/testdir/test_lispindent.vim
src/version.c

index 84afcc73387e6138f9fddb30647d8d4c9ed59926..c409acdadd5e2a68cc480e18019e8725132916a8 100644 (file)
@@ -2269,19 +2269,18 @@ open_line(
     else
        vreplace_mode = 0;
 
-    // May do lisp indenting.
     if (!p_paste
            && leader == NULL
            && curbuf->b_p_lisp
            && curbuf->b_p_ai)
     {
+       // do lisp indenting
        fixthisline(get_lisp_indent);
        ai_col = (colnr_T)getwhitecols_curline();
     }
-
-    // May do indenting after opening a new line.
-    if (do_cindent)
+    else if (do_cindent)
     {
+       // do 'cindent' or 'indentexpr' indenting
        do_c_expr_indent();
        ai_col = (colnr_T)getwhitecols_curline();
     }
index 8f2d3324b257f6cdb0db9016d7a721fa4616b333..3c8660e0ab1c5bfce89f845897fa6408ea70eea9 100644 (file)
@@ -91,6 +91,17 @@ func Test_lispindent_negative()
   call assert_equal(-1, lispindent(-1))
 endfunc
 
+func Test_lispindent_with_indentexpr()
+  enew
+  setl ai lisp nocin indentexpr=11
+  exe "normal a(x\<CR>1\<CR>2)\<Esc>"
+  let expected = ['(x', '  1', '  2)']
+  call assert_equal(expected, getline(1, 3))
+  normal 1G=G
+  call assert_equal(expected, getline(1, 3))
+  bwipe!
+endfunc
+
 func Test_lisp_indent_works()
   " This was reading beyond the end of the line
   new
index 3bb2a2f990a22628b394d65b5646f95be46d4568..90fff9a0fa28d0370c892c40c7cc88cf6e9aa9ae 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    754,
 /**/
     753,
 /**/