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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui