Mercurial > vim
changeset 2855:78859ef2982b v7.3.201
updated for version 7.3.201
Problem: "} else" still causes following lines to be indented too much.
Solution: Better detection for the "else" block. (Lech Lorens)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 25 May 2011 13:34:04 +0200 |
parents | d267ea4d16e4 |
children | 09fc31c1082e |
files | src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c |
diffstat | 4 files changed, 43 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/src/misc1.c +++ b/src/misc1.c @@ -7541,17 +7541,25 @@ get_c_indent() /* * When searching for a terminated line, don't use the - * one between the "if" and the "else". + * one between the "if" and the matching "else". * Need to use the scope of this "else". XXX * If whilelevel != 0 continue looking for a "do {". */ - if (cin_iselse(l) - && whilelevel == 0 - && ((trypos = find_start_brace(ind_maxcomment)) - == NULL + if (cin_iselse(l) && whilelevel == 0) + { + /* If we're looking at "} else", let's make sure we + * find the opening brace of the enclosing scope, + * not the one from "if () {". */ + if (*l == '}') + curwin->w_cursor.col = + (l - ml_get_curline()) + 1; + + if ((trypos = find_start_brace(ind_maxcomment)) + == NULL || find_match(LOOKFOR_IF, trypos->lnum, - ind_maxparen, ind_maxcomment) == FAIL)) - break; + ind_maxparen, ind_maxcomment) == FAIL) + break; + } } /*
--- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1413,6 +1413,21 @@ void func(void) } STARTTEST +:set cino& +2kdd=][ +ENDTEST + +void func(void) +{ + for (int i = 0; i < 10; ++i) + if (i & 1) { + foo(1); + } else + foo(0); +baz(); +} + +STARTTEST :g/^STARTTEST/.,/^ENDTEST/d :1;/start of AUTO/,$wq! test.out ENDTEST