| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.670 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.670 |
| Problem: Using 'cindent' for Javascript is less than perfect. |
| Solution: Improve indenting of continuation lines. (Hirohito Higashi) |
| Files: src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok |
| |
| |
| |
| |
| |
| *** 6670,6689 **** |
| pos_T cursor_save; |
| pos_T *trypos; |
| static pos_T pos_copy; |
| |
| cursor_save = curwin->w_cursor; |
| ! if ((trypos = findmatchlimit(NULL, c, 0, ind_maxparen)) != NULL) |
| { |
| /* check if the ( is in a // comment */ |
| if ((colnr_T)cin_skip2pos(trypos) > trypos->col) |
| trypos = NULL; |
| else |
| { |
| pos_copy = *trypos; /* copy trypos, findmatch will change it */ |
| trypos = &pos_copy; |
| curwin->w_cursor = *trypos; |
| ! if (ind_find_start_comment() != NULL) /* XXX */ |
| trypos = NULL; |
| } |
| } |
| curwin->w_cursor = cursor_save; |
| --- 6670,6712 ---- |
| pos_T cursor_save; |
| pos_T *trypos; |
| static pos_T pos_copy; |
| + int ind_maxp_wk; |
| |
| cursor_save = curwin->w_cursor; |
| ! 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 ((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,7030 **** |
| #define LOOKFOR_CPP_BASECLASS 9 |
| #define LOOKFOR_ENUM_OR_INIT 10 |
| #define LOOKFOR_JS_KEY 11 |
| ! #define LOOKFOR_NO_COMMA 12 |
| |
| int whilelevel; |
| linenr_T lnum; |
| --- 7047,7053 ---- |
| #define LOOKFOR_CPP_BASECLASS 9 |
| #define LOOKFOR_ENUM_OR_INIT 10 |
| #define LOOKFOR_JS_KEY 11 |
| ! #define LOOKFOR_COMMA 12 |
| |
| int whilelevel; |
| linenr_T lnum; |
| |
| *** 7842,7848 **** |
| else |
| { |
| if (lookfor != LOOKFOR_TERM |
| ! && lookfor != LOOKFOR_CPP_BASECLASS) |
| { |
| amount = scope_amount; |
| if (theline[0] == '{') |
| --- 7865,7872 ---- |
| else |
| { |
| if (lookfor != LOOKFOR_TERM |
| ! && lookfor != LOOKFOR_CPP_BASECLASS |
| ! && lookfor != LOOKFOR_COMMA) |
| { |
| amount = scope_amount; |
| if (theline[0] == '{') |
| |
| *** 8134,8156 **** |
| amount = get_indent(); |
| break; |
| } |
| ! if (lookfor == LOOKFOR_NO_COMMA) |
| { |
| ! 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; |
| } |
| |
| if (terminated == 0 || (lookfor != LOOKFOR_UNTERM |
| && terminated == ',')) |
| { |
| /* |
| * if we're in the middle of a paren thing, |
| * go back to the line that starts it so |
| --- 8158,8188 ---- |
| amount = get_indent(); |
| break; |
| } |
| ! if (lookfor == LOOKFOR_COMMA) |
| { |
| ! 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; |
| ! 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,8395 **** |
| --- 8421,8430 ---- |
| * 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,8425 **** |
| * 5, |
| * 6, |
| */ |
| ! lookfor = LOOKFOR_NO_COMMA; |
| ! amount = get_indent(); /* XXX */ |
| trypos = find_match_char('[', |
| curbuf->b_ind_maxparen); |
| if (trypos != NULL) |
| --- 8453,8461 ---- |
| * 5, |
| * 6, |
| */ |
| ! if (cin_iscomment(skipwhite(l))) |
| ! break; |
| ! lookfor = LOOKFOR_COMMA; |
| trypos = find_match_char('[', |
| curbuf->b_ind_maxparen); |
| if (trypos != NULL) |
| |
| *** 8449,8455 **** |
| cont_amount = cin_get_equal_amount( |
| curwin->w_cursor.lnum); |
| if (lookfor != LOOKFOR_TERM |
| ! && lookfor != LOOKFOR_JS_KEY) |
| lookfor = LOOKFOR_UNTERM; |
| } |
| } |
| --- 8485,8492 ---- |
| cont_amount = cin_get_equal_amount( |
| curwin->w_cursor.lnum); |
| if (lookfor != LOOKFOR_TERM |
| ! && lookfor != LOOKFOR_JS_KEY |
| ! && lookfor != LOOKFOR_COMMA) |
| lookfor = LOOKFOR_UNTERM; |
| } |
| } |
| |
| |
| |
| *** 2065,2070 **** |
| --- 2065,2228 ---- |
| 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 |
| |
| |
| |
| *** 1832,1834 **** |
| --- 1832,1987 ---- |
| })(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 |
| + |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 670, |
| /**/ |
| |
| -- |
| ARTHUR: What? |
| BLACK KNIGHT: None shall pass. |
| ARTHUR: I have no quarrel with you, good Sir knight, but I must cross |
| this bridge. |
| BLACK KNIGHT: Then you shall die. |
| The Quest for the Holy Grail (Monty Python) |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |