Mercurial > vim
changeset 2776:cdefcbb70e8c v7.3.164
updated for version 7.3.164
Problem: C-indenting: a preprocessor statement confuses detection of a
function delcaration.
Solution: Ignore preprocessor lines. (Lech Lorens) Also recognize the style
to put a comma before the argument name.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Thu, 28 Apr 2011 13:02:09 +0200 |
parents | 8bc600c61a20 |
children | 30bcf93b3521 |
files | src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c |
diffstat | 4 files changed, 78 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/misc1.c +++ b/src/misc1.c @@ -5396,8 +5396,7 @@ cin_get_equal_amount(lnum) cin_ispreproc(s) char_u *s; { - s = skipwhite(s); - if (*s == '#') + if (*skipwhite(s) == '#') return TRUE; return FALSE; } @@ -5513,6 +5512,10 @@ cin_isfuncdecl(sp, first_lnum) else s = *sp; + /* Ignore line starting with #. */ + if (cin_ispreproc(s)) + return FALSE; + while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"') { if (cin_iscomment(s)) /* ignore comments */ @@ -5538,13 +5541,29 @@ cin_isfuncdecl(sp, first_lnum) retval = TRUE; goto done; } - if (*s == ',' && cin_nocode(s + 1)) - { - /* ',' at the end: continue looking in the next line */ + if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s)) + { + int comma = (*s == ','); + + /* ',' at the end: continue looking in the next line. + * At the end: check for ',' in the next line, for this style: + * func(arg1 + * , arg2) */ + for (;;) + { + if (lnum >= curbuf->b_ml.ml_line_count) + break; + s = ml_get(++lnum); + if (!cin_ispreproc(s)) + break; + } if (lnum >= curbuf->b_ml.ml_line_count) break; - - s = ml_get(++lnum); + /* Require a comma at end of the line or a comma or ')' at the + * start of next line. */ + s = skipwhite(s); + if (!comma && *s != ',' && *s != ')') + break; } else if (cin_iscomment(s)) /* ignore comments */ s = cin_skipcomment(s);
--- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1315,6 +1315,35 @@ int main () } STARTTEST +:set cino=(0,ts +2kdd=][ +ENDTEST + +void func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + +STARTTEST +:set cino=(0 +2kdd=][ +ENDTEST + +void +func(int a +#if defined(FOO) + , int b + , int c +#endif + ) +{ +} + +STARTTEST :g/^STARTTEST/.,/^ENDTEST/d :1;/start of AUTO/,$wq! test.out ENDTEST