summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc1.c67
-rw-r--r--src/testdir/test3.in158
-rw-r--r--src/testdir/test3.ok153
-rw-r--r--src/version.c2
4 files changed, 365 insertions, 15 deletions
diff --git a/src/misc1.c b/src/misc1.c
index ac87ef8f..940a3e91 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -6670,20 +6670,43 @@ find_match_char(c, ind_maxparen) /* XXX */
pos_T cursor_save;
pos_T *trypos;
static pos_T pos_copy;
+ int ind_maxp_wk;
cursor_save = curwin->w_cursor;
- if ((trypos = findmatchlimit(NULL, c, 0, ind_maxparen)) != NULL)
+ ind_maxp_wk = ind_maxparen;
+retry:
+ if ((trypos = findmatchlimit(NULL, c, 0, ind_maxp_wk)) != NULL)
{
/* check if the ( is in a // comment */
if ((colnr_T)cin_skip2pos(trypos) > trypos->col)
+ {
+ ind_maxp_wk = ind_maxparen - (int)(cursor_save.lnum - trypos->lnum);
+ if (ind_maxp_wk > 0)
+ {
+ curwin->w_cursor = *trypos;
+ curwin->w_cursor.col = 0; /* XXX */
+ goto retry;
+ }
trypos = NULL;
+ }
else
{
+ pos_T *trypos_wk;
+
pos_copy = *trypos; /* copy trypos, findmatch will change it */
trypos = &pos_copy;
curwin->w_cursor = *trypos;
- if (ind_find_start_comment() != NULL) /* XXX */
+ if ((trypos_wk = ind_find_start_comment()) != NULL) /* XXX */
+ {
+ ind_maxp_wk = ind_maxparen - (int)(cursor_save.lnum
+ - trypos_wk->lnum);
+ if (ind_maxp_wk > 0)
+ {
+ curwin->w_cursor = *trypos_wk;
+ goto retry;
+ }
trypos = NULL;
+ }
}
}
curwin->w_cursor = cursor_save;
@@ -7024,7 +7047,7 @@ get_c_indent()
#define LOOKFOR_CPP_BASECLASS 9
#define LOOKFOR_ENUM_OR_INIT 10
#define LOOKFOR_JS_KEY 11
-#define LOOKFOR_NO_COMMA 12
+#define LOOKFOR_COMMA 12
int whilelevel;
linenr_T lnum;
@@ -7842,7 +7865,8 @@ get_c_indent()
else
{
if (lookfor != LOOKFOR_TERM
- && lookfor != LOOKFOR_CPP_BASECLASS)
+ && lookfor != LOOKFOR_CPP_BASECLASS
+ && lookfor != LOOKFOR_COMMA)
{
amount = scope_amount;
if (theline[0] == '{')
@@ -8134,23 +8158,31 @@ get_c_indent()
amount = get_indent();
break;
}
- if (lookfor == LOOKFOR_NO_COMMA)
+ if (lookfor == LOOKFOR_COMMA)
{
- if (terminated != ',')
+ if (tryposBrace != NULL && tryposBrace->lnum
+ >= curwin->w_cursor.lnum)
+ break;
+ if (terminated == ',')
/* line below current line is the one that starts a
* (possibly broken) line ending in a comma. */
break;
- amount = get_indent();
- if (curwin->w_cursor.lnum - 1 == ourscope)
- /* line above is start of the scope, thus current line
- * is the one that stars a (possibly broken) line
- * ending in a comma. */
- break;
+ else
+ {
+ amount = get_indent();
+ if (curwin->w_cursor.lnum - 1 == ourscope)
+ /* line above is start of the scope, thus current
+ * line is the one that stars a (possibly broken)
+ * line ending in a comma. */
+ break;
+ }
}
if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
&& terminated == ','))
{
+ if (*skipwhite(l) == '[' || l[STRLEN(l) - 1] == '[')
+ amount += ind_continuation;
/*
* if we're in the middle of a paren thing,
* go back to the line that starts it so
@@ -8389,7 +8421,10 @@ get_c_indent()
* 100 +
* -> here;
*/
+ l = ml_get_curline();
amount = cur_amount;
+ if (*skipwhite(l) == ']' || l[STRLEN(l) - 1] == ']')
+ break;
/*
* If previous line ends in ',', check whether we
@@ -8418,8 +8453,9 @@ get_c_indent()
* 5,
* 6,
*/
- lookfor = LOOKFOR_NO_COMMA;
- amount = get_indent(); /* XXX */
+ if (cin_iscomment(skipwhite(l)))
+ break;
+ lookfor = LOOKFOR_COMMA;
trypos = find_match_char('[',
curbuf->b_ind_maxparen);
if (trypos != NULL)
@@ -8449,7 +8485,8 @@ get_c_indent()
cont_amount = cin_get_equal_amount(
curwin->w_cursor.lnum);
if (lookfor != LOOKFOR_TERM
- && lookfor != LOOKFOR_JS_KEY)
+ && lookfor != LOOKFOR_JS_KEY
+ && lookfor != LOOKFOR_COMMA)
lookfor = LOOKFOR_UNTERM;
}
}
diff --git a/src/testdir/test3.in b/src/testdir/test3.in
index 7757569e..a321bb88 100644
--- a/src/testdir/test3.in
+++ b/src/testdir/test3.in
@@ -2065,6 +2065,164 @@ return true;
JSEND
STARTTEST
+:set cino=j1,J1,+2
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+// Results of JavaScript indent
+// 1
+(function(){
+var a = [
+'a',
+'b',
+'c',
+'d',
+'e',
+'f',
+'g',
+'h',
+'i'
+];
+}())
+
+// 2
+(function(){
+var a = [
+0 +
+5 *
+9 *
+'a',
+'b',
+0 +
+5 *
+9 *
+'c',
+'d',
+'e',
+'f',
+'g',
+'h',
+'i'
+];
+}())
+
+// 3
+(function(){
+var a = [
+0 +
+// comment 1
+5 *
+/* comment 2 */
+9 *
+'a',
+'b',
+0 +
+5 *
+9 *
+'c',
+'d',
+'e',
+'f',
+'g',
+'h',
+'i'
+];
+}())
+
+// 4
+{
+var a = [
+0,
+1
+];
+var b;
+var c;
+}
+
+// 5
+{
+var a = [
+[
+0
+],
+2,
+3
+];
+}
+
+// 6
+{
+var a = [
+[
+0,
+1
+],
+2,
+3
+];
+}
+
+// 7
+{
+var a = [
+// [
+0,
+// 1
+// ],
+2,
+3
+];
+}
+
+// 8
+var x = [
+(function(){
+var a,
+b,
+c,
+d,
+e,
+f,
+g,
+h,
+i;
+})
+];
+
+// 9
+var a = [
+0 +
+5 *
+9 *
+'a',
+'b',
+0 +
+5 *
+9 *
+'c',
+'d',
+'e',
+'f',
+'g',
+'h',
+'i'
+];
+
+// 10
+var a,
+b,
+c,
+d,
+e,
+f,
+g,
+h,
+i;
+JSEND
+
+STARTTEST
:g/^STARTTEST/.,/^ENDTEST/d
:1;/start of AUTO/,$wq! test.out
ENDTEST
diff --git a/src/testdir/test3.ok b/src/testdir/test3.ok
index e75de0ff..b1c8b708 100644
--- a/src/testdir/test3.ok
+++ b/src/testdir/test3.ok
@@ -1832,3 +1832,156 @@ JSSTART
})(jQuery);
JSEND
+
+JSSTART
+// Results of JavaScript indent
+// 1
+(function(){
+ var a = [
+ 'a',
+ 'b',
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i'
+ ];
+}())
+
+// 2
+(function(){
+ var a = [
+ 0 +
+ 5 *
+ 9 *
+ 'a',
+ 'b',
+ 0 +
+ 5 *
+ 9 *
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i'
+ ];
+}())
+
+// 3
+(function(){
+ var a = [
+ 0 +
+ // comment 1
+ 5 *
+ /* comment 2 */
+ 9 *
+ 'a',
+ 'b',
+ 0 +
+ 5 *
+ 9 *
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i'
+ ];
+}())
+
+// 4
+{
+ var a = [
+ 0,
+ 1
+ ];
+ var b;
+ var c;
+}
+
+// 5
+{
+ var a = [
+ [
+ 0
+ ],
+ 2,
+ 3
+ ];
+}
+
+// 6
+{
+ var a = [
+ [
+ 0,
+ 1
+ ],
+ 2,
+ 3
+ ];
+}
+
+// 7
+{
+ var a = [
+ // [
+ 0,
+ // 1
+ // ],
+ 2,
+ 3
+ ];
+}
+
+// 8
+var x = [
+ (function(){
+ var a,
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h,
+ i;
+ })
+];
+
+// 9
+var a = [
+ 0 +
+ 5 *
+ 9 *
+ 'a',
+ 'b',
+ 0 +
+ 5 *
+ 9 *
+ 'c',
+ 'd',
+ 'e',
+ 'f',
+ 'g',
+ 'h',
+ 'i'
+];
+
+// 10
+var a,
+ b,
+ c,
+ d,
+ e,
+ f,
+ g,
+ h,
+ i;
+JSEND
+
diff --git a/src/version.c b/src/version.c
index f7eae850..af86a172 100644
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 670,
+/**/
669,
/**/
668,