diff --git a/src/cindent.c b/src/cindent.c index 94c01db7e8..fa8059509e 100644 --- a/src/cindent.c +++ b/src/cindent.c @@ -1217,6 +1217,8 @@ find_last_paren(char_u *l, int start, int end) for (i = 0; l[i] != NUL; i++) { i = (int)(cin_skipcomment(l + i) - l); // ignore parens in comments + if (l[i] == NUL) + break; i = (int)(skip_string(l + i) - l); // ignore parens in quotes if (l[i] == start) ++open_count; diff --git a/src/testdir/test_cindent.vim b/src/testdir/test_cindent.vim index f050d82f8c..90dff6049e 100644 --- a/src/testdir/test_cindent.vim +++ b/src/testdir/test_cindent.vim @@ -5604,6 +5604,37 @@ def Test_cindent_comment_brackets() assert_equal(' arg3);', getline(3)) bwipe! + # stray } in a // line comment inside an aggregate (enum/struct) whose + # opening brace is at the end of the line must not affect the next member + new + setl cindent sw=4 + var code6 =<< trim [CODE] + typedef enum { + ND_BLOCK, // { ... } + ND_FUNCALL, + } NodeKind; + [CODE] + setline(1, code6) + cursor(3, 1) + normal == + assert_equal(' ND_FUNCALL,', getline(3)) + bwipe! + + # same, a struct member with a trailing // } comment + new + setl cindent sw=4 + var code7 =<< trim [CODE] + struct S { + int a; // } + int b; + }; + [CODE] + setline(1, code7) + cursor(3, 1) + normal == + assert_equal(' int b;', getline(3)) + bwipe! + enddef diff --git a/src/version.c b/src/version.c index 6f4499c39a..3b135e4b00 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 610, /**/ 609, /**/