diff options
author | Bram Moolenaar <Bram@vim.org> | 2014-07-02 18:27:48 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2014-07-02 18:27:48 +0200 |
commit | 81439a6d1b45bbef9c8dc03d76f01b6a8165e2ce (patch) | |
tree | 1e15dcd6ee0a9487a4d06c7db9bc71c6c9460084 /src/misc1.c | |
parent | dab70c63e16687b2cb784a3a9eecdbea6ecd7065 (diff) | |
download | vim-81439a6d1b45bbef9c8dc03d76f01b6a8165e2ce.zip |
updated for version 7.4.350
Problem: Using C indenting for Javascript does not work well for a {} block
inside parenthesis.
Solution: When looking for a matching paren ignore one that is before the
start of a {} block.
Diffstat (limited to 'src/misc1.c')
-rw-r--r-- | src/misc1.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/misc1.c b/src/misc1.c index c0a045d14..fbebd5aec 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -6614,7 +6614,7 @@ find_start_brace() /* XXX */ } /* - * Find the matching '(', failing if it is in a comment. + * Find the matching '(', ignoring it if it is in a comment. * Return NULL if no match found. */ static pos_T * @@ -6645,6 +6645,32 @@ find_match_paren(ind_maxparen) /* XXX */ } /* + * Find the matching '(', ignoring it if it is in a comment or before an + * unmatched {. + * Return NULL if no match found. + */ + static pos_T * +find_match_paren_after_brace(ind_maxparen) /* XXX */ + int ind_maxparen; +{ + pos_T *trypos = find_match_paren(ind_maxparen); + + if (trypos != NULL) + { + pos_T *tryposBrace = find_start_brace(); + + /* If both an unmatched '(' and '{' is found. Ignore the '(' + * position if the '{' is further down. */ + if (tryposBrace != NULL + && (trypos->lnum != tryposBrace->lnum + ? trypos->lnum < tryposBrace->lnum + : trypos->col < tryposBrace->col)) + trypos = NULL; + } + return trypos; +} + +/* * Return ind_maxparen corrected for the difference in line number between the * cursor position and "startpos". This makes sure that searching for a * matching paren above the cursor line doesn't find a match because of @@ -7419,7 +7445,8 @@ get_c_indent() { curwin->w_cursor.lnum = our_paren_pos.lnum; curwin->w_cursor.col = col; - if (find_match_paren(curbuf->b_ind_maxparen) != NULL) + if (find_match_paren_after_brace(curbuf->b_ind_maxparen) + != NULL) amount += curbuf->b_ind_unclosed2; else { |