changeset 6020:ad005d0114c1 v7.4.350

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.
author Bram Moolenaar <bram@vim.org>
date Wed, 02 Jul 2014 18:27:48 +0200
parents 1cb48ecf240e
children 9c68b3561d82
files src/misc1.c src/testdir/test3.in src/testdir/test3.ok src/version.c
diffstat 4 files changed, 39 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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
 		    {
--- 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() {
--- 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() {
--- 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,