| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.195 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.195 |
| Problem: "} else" causes following lines to be indented too much. (Rouben |
| Rostamian) |
| Solution: Better detection for the "else". (Lech Lorens) |
| Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok |
| |
| |
| |
| |
| |
| *** 5482,5489 **** |
| * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or |
| * '}'. |
| * Don't consider "} else" a terminated line. |
| ! * Don't consider a line where there are unmatched opening braces before '}', |
| ! * ';' or ',' a terminated line. |
| * Return the character terminating the line (ending char's have precedence if |
| * both apply in order to determine initializations). |
| */ |
| --- 5482,5489 ---- |
| * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or |
| * '}'. |
| * Don't consider "} else" a terminated line. |
| ! * If a line begins with an "else", only consider it terminated if no unmatched |
| ! * opening braces follow (handle "else { foo();" correctly). |
| * Return the character terminating the line (ending char's have precedence if |
| * both apply in order to determine initializations). |
| */ |
| |
| *** 5493,5513 **** |
| int incl_open; /* include '{' at the end as terminator */ |
| int incl_comma; /* recognize a trailing comma */ |
| { |
| ! char_u found_start = 0; |
| ! unsigned n_open = 0; |
| |
| s = cin_skipcomment(s); |
| |
| if (*s == '{' || (*s == '}' && !cin_iselse(s))) |
| found_start = *s; |
| |
| while (*s) |
| { |
| /* skip over comments, "" strings and 'c'haracters */ |
| s = skip_string(cin_skipcomment(s)); |
| if (*s == '}' && n_open > 0) |
| --n_open; |
| ! if (n_open == 0 |
| && (*s == ';' || *s == '}' || (incl_comma && *s == ',')) |
| && cin_nocode(s + 1)) |
| return *s; |
| --- 5493,5517 ---- |
| int incl_open; /* include '{' at the end as terminator */ |
| int incl_comma; /* recognize a trailing comma */ |
| { |
| ! char_u found_start = 0; |
| ! unsigned n_open = 0; |
| ! int is_else = FALSE; |
| |
| s = cin_skipcomment(s); |
| |
| if (*s == '{' || (*s == '}' && !cin_iselse(s))) |
| found_start = *s; |
| |
| + if (!found_start) |
| + is_else = cin_iselse(s); |
| + |
| while (*s) |
| { |
| /* skip over comments, "" strings and 'c'haracters */ |
| s = skip_string(cin_skipcomment(s)); |
| if (*s == '}' && n_open > 0) |
| --n_open; |
| ! if ((!is_else || n_open == 0) |
| && (*s == ';' || *s == '}' || (incl_comma && *s == ',')) |
| && cin_nocode(s + 1)) |
| return *s; |
| |
| |
| |
| *** 1345,1351 **** |
| |
| STARTTEST |
| :set cino& |
| ! 2kdd=][ |
| ENDTEST |
| |
| void func(void) |
| --- 1345,1351 ---- |
| |
| STARTTEST |
| :set cino& |
| ! 2kdd=4][ |
| ENDTEST |
| |
| void func(void) |
| |
| *** 1359,1364 **** |
| --- 1359,1392 ---- |
| printf("Foo!\n"); |
| } |
| |
| + void func1(void) |
| + { |
| + char* tab[] = {"foo", "bar", |
| + "baz", "quux", |
| + "this line used", "to be indented incorrectly"}; |
| + foo(); |
| + } |
| + |
| + void func2(void) |
| + { |
| + int tab[] = |
| + {1, 2, |
| + 3, 4, |
| + 5, 6}; |
| + |
| + printf("This line used to be indented incorrectly.\n"); |
| + } |
| + |
| + void func3(void) |
| + { |
| + int tab[] = { |
| + 1, 2, |
| + 3, 4, |
| + 5, 6}; |
| + |
| + printf("Don't you dare indent this line incorrectly!\n); |
| + } |
| + |
| STARTTEST |
| :set cino& |
| 2kdd=][ |
| |
| |
| |
| *** 1216,1221 **** |
| --- 1216,1249 ---- |
| printf("Foo!\n"); |
| } |
| |
| + void func1(void) |
| + { |
| + char* tab[] = {"foo", "bar", |
| + "baz", "quux", |
| + "this line used", "to be indented incorrectly"}; |
| + foo(); |
| + } |
| + |
| + void func2(void) |
| + { |
| + int tab[] = |
| + {1, 2, |
| + 3, 4, |
| + 5, 6}; |
| + |
| + printf("This line used to be indented incorrectly.\n"); |
| + } |
| + |
| + void func3(void) |
| + { |
| + int tab[] = { |
| + 1, 2, |
| + 3, 4, |
| + 5, 6}; |
| + |
| + printf("Don't you dare indent this line incorrectly!\n); |
| + } |
| + |
| |
| void func(void) |
| { |
| |
| |
| |
| *** 711,712 **** |
| --- 711,714 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 195, |
| /**/ |
| |
| -- |
| I AM THANKFUL... |
| ...for the taxes that I pay because it means that I am employed. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |