Merge pull request #20670 from zeertzjq/vim-9.0.0737

vim-patch:9.0.{partial:0737,0754}: lisp indent fixes
This commit is contained in:
zeertzjq 2022-10-15 20:27:34 +08:00 committed by GitHub
commit 0434f732a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 7 deletions

View File

@ -1814,17 +1814,15 @@ int open_line(int dir, int flags, int second_line_indent, bool *did_do_comment)
vreplace_mode = 0; vreplace_mode = 0;
} }
// May do lisp indenting.
if (!p_paste if (!p_paste
&& leader == NULL && leader == NULL
&& curbuf->b_p_lisp && curbuf->b_p_lisp
&& curbuf->b_p_ai) { && curbuf->b_p_ai) {
// do lisp indenting
fixthisline(get_lisp_indent); fixthisline(get_lisp_indent);
ai_col = (colnr_T)getwhitecols_curline(); ai_col = (colnr_T)getwhitecols_curline();
} } else if (do_cindent) {
// do 'cindent' or 'indentexpr' indenting
// May do indenting after opening a new line.
if (do_cindent) {
do_c_expr_indent(); do_c_expr_indent();
ai_col = (colnr_T)getwhitecols_curline(); ai_col = (colnr_T)getwhitecols_curline();
} }

View File

@ -1138,7 +1138,7 @@ static int lisp_match(char_u *p)
(void)copy_option_part(&word, (char *)buf, LSIZE, ","); (void)copy_option_part(&word, (char *)buf, LSIZE, ",");
len = (int)STRLEN(buf); len = (int)STRLEN(buf);
if ((STRNCMP(buf, p, len) == 0) && (p[len] == ' ')) { if ((STRNCMP(buf, p, len) == 0) && ascii_iswhite_or_nul(p[len])) {
return true; return true;
} }
} }

View File

@ -15,7 +15,6 @@ source test_fnamemodify.vim
source test_ga.vim source test_ga.vim
source test_glob2regpat.vim source test_glob2regpat.vim
source test_global.vim source test_global.vim
source test_lispwords.vim
source test_move.vim source test_move.vim
source test_put.vim source test_put.vim
source test_reltime.vim source test_reltime.vim

View File

@ -86,6 +86,22 @@ func Test_lisp_indent()
set nolisp set nolisp
endfunc endfunc
func Test_lispindent_negative()
" in legacy script there is no error
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() func Test_lisp_indent_works()
" This was reading beyond the end of the line " This was reading beyond the end of the line
new new