diff --git a/7.4.670 b/7.4.670 new file mode 100644 index 0000000..36e3953 --- /dev/null +++ b/7.4.670 @@ -0,0 +1,578 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.670 +Fcc: outbox +From: Bram Moolenaar +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 + + +*** ../vim-7.4.669/src/misc1.c 2015-03-06 22:00:06.813457075 +0100 +--- src/misc1.c 2015-03-20 18:52:24.283668213 +0100 +*************** +*** 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; + } + } +*** ../vim-7.4.669/src/testdir/test3.in 2014-08-06 17:44:09.867161966 +0200 +--- src/testdir/test3.in 2015-03-20 18:48:42.478174688 +0100 +*************** +*** 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 +*** ../vim-7.4.669/src/testdir/test3.ok 2014-08-06 17:44:09.867161966 +0200 +--- src/testdir/test3.ok 2015-03-20 18:55:10.709787690 +0100 +*************** +*** 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 ++ +*** ../vim-7.4.669/src/version.c 2015-03-20 18:11:44.971196311 +0100 +--- src/version.c 2015-03-20 18:53:43.626771663 +0100 +*************** +*** 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 ///