# HG changeset patch # User Bram Moolenaar # Date 1404318468 -7200 # Node ID ad005d0114c1d2d83490787ef7ea2a3c6e5e7b9e # Parent 1cb48ecf240e33fb679bb3fc719d007e5a0a186f 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. diff --git a/src/misc1.c b/src/misc1.c --- 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) /* XX } /* + * 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 { diff --git a/src/testdir/test3.in b/src/testdir/test3.in --- a/src/testdir/test3.in +++ b/src/testdir/test3.in @@ -1950,6 +1950,10 @@ ENDTEST JSSTART (function($){ +if (cond && +cond) { +stmt; +} var class_name='myclass'; function private_method() { diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok --- a/src/testdir/test3.ok +++ b/src/testdir/test3.ok @@ -1728,6 +1728,10 @@ JSEND JSSTART (function($){ + if (cond && + cond) { + stmt; + } var class_name='myclass'; function private_method() { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -735,6 +735,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 350, +/**/ 349, /**/ 348,