From baa07dd0d5bf521cf88419d00d2a5d7672dd8e60 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 12 Oct 2016 21:20:29 -0700 Subject: [PATCH 01/28] refactor isblock for jsx (#668) * react/jsx interpolated expressions * refactor isBlock --- indent/javascript.vim | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9720c7f8..446b4343 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: October 9, 2016 +" Last Change: October 12, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -38,7 +38,6 @@ else endif let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' -let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' let s:expr_case = '\<\%(\%(case\>\s*\S.\{-}\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. @@ -130,25 +129,32 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() if getline(line('.'))[col('.')-1] == '{' - if search('\C\') ==# 'return' + return 0 + endif return expand('') !~# - \ '^\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' + \ '^\%(var\|const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' elseif char == '>' - return search('=\%#','bW') || synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' + return prechar == '=' || syn =~? '^jsflow' elseif char == ':' return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' - elseif char == '{' - return s:IsBlock() else - return char !~# '[-=~!<*+,./?^%|&\[(]' + return char !~# '[-=~!<*+,/?^%|&([]' endif else return 1 From 1811b3e925d712847d4d294d67f6b2ec4b776cbb Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 13 Oct 2016 02:51:19 -0700 Subject: [PATCH 02/28] various little updates (#670) --- indent/javascript.vim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 446b4343..4e651613 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -132,15 +132,16 @@ function s:IsBlock() let l:ln = line('.') if search('\S','bW') let char = getline(line('.'))[col('.')-1] - let prechar = getline(line('.'))[col('.')-2] - if char == '/' && prechar == '*' && synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' + let pchar = getline(line('.'))[col('.')-2] + let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') + if char == '/' && pchar == '*' && syn =~? 'comment' if !(search('\/\*','bW') && search('\S','bW')) return 1 endif let char = getline(line('.'))[col('.')-1] - let prechar = getline(line('.'))[col('.')-2] + let pchar = getline(line('.'))[col('.')-2] + let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') endif - let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') if syn =~? '\%(xml\|jsx\)' return char != '{' elseif char =~# '\l' @@ -148,9 +149,9 @@ function s:IsBlock() return 0 endif return expand('') !~# - \ '^\%(var\|const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' + \ '^\%(const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|v\%(ar\|oid\)\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' elseif char == '>' - return prechar == '=' || syn =~? '^jsflow' + return pchar == '=' || syn =~? '^jsflow' elseif char == ':' return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' else From 31b2fff3eec03303ea6cdea23a88bdbaee2afb92 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 13 Oct 2016 16:48:38 -0700 Subject: [PATCH 03/28] cleaning --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4e651613..9fb4f8e6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -134,8 +134,8 @@ function s:IsBlock() let char = getline(line('.'))[col('.')-1] let pchar = getline(line('.'))[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') - if char == '/' && pchar == '*' && syn =~? 'comment' - if !(search('\/\*','bW') && search('\S','bW')) + if pchar . char == '*/' && syn =~? 'comment' + if !search('\/\*','bW') || !search('\S','bW') return 1 endif let char = getline(line('.'))[col('.')-1] From 3a3cae8a659cea07561c42dfe9831bbe16f3d1ec Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 14 Oct 2016 21:38:17 -0700 Subject: [PATCH 04/28] do while made accurate (#671) Oval loop --- indent/javascript.vim | 64 +++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 33 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9fb4f8e6..0de83559 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,8 +37,6 @@ else endfunction endif -let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' - let s:expr_case = '\<\%(\%(case\>\s*\S.\{-}\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' @@ -111,7 +109,9 @@ function s:iscontOne(i,num,cont) if indent(l:i) < ind " first line always true for !a:cont, false for !!a:cont if s:OneScope(l:i,s:Trimline(l:i)) if expand('') ==# 'while' && - \ s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num + !!a:num) > 0 + \ s:GetPair('\C\','\C\','bW','line2byte(line(".")) + col(".") <' + \ . (line2byte(l:num) + b:js_cache[2]) . '||' + \ . s:skip_expr . '|| !s:IsBlock()',100,l:num) > 0 return 0 endif let bL += 1 @@ -128,38 +128,36 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() - if getline(line('.'))[col('.')-1] == '{' - let l:ln = line('.') - if search('\S','bW') + let l:ln = line('.') + if search('\S','bW') + let char = getline(line('.'))[col('.')-1] + let pchar = getline(line('.'))[col('.')-2] + let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') + if pchar . char == '*/' && syn =~? 'comment' + if !search('\/\*','bW') || !search('\S','bW') + return 1 + endif let char = getline(line('.'))[col('.')-1] let pchar = getline(line('.'))[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') - if pchar . char == '*/' && syn =~? 'comment' - if !search('\/\*','bW') || !search('\S','bW') - return 1 - endif - let char = getline(line('.'))[col('.')-1] - let pchar = getline(line('.'))[col('.')-2] - let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') - endif - if syn =~? '\%(xml\|jsx\)' - return char != '{' - elseif char =~# '\l' - if line('.') == l:ln && expand('') ==# 'return' - return 0 - endif - return expand('') !~# - \ '^\%(const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|v\%(ar\|oid\)\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' - elseif char == '>' - return pchar == '=' || syn =~? '^jsflow' - elseif char == ':' - return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' - else - return char !~# '[-=~!<*+,/?^%|&([]' + endif + if syn =~? '\%(xml\|jsx\)' + return char != '{' + elseif char =~# '\l' + if line('.') == l:ln && expand('') ==# 'return' + return 0 endif + return index(split('const let import export yield default delete var void typeof throw new in instanceof') + \ , expand('')) < 0 + elseif char == '>' + return pchar == '=' || syn =~? '^jsflow' + elseif char == ':' + return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' else - return 1 + return char !~# '[-=~!<*+,/?^%|&([]' endif + else + return 1 endif endfunction @@ -254,14 +252,14 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif - let num = (num > 0) * num + let num = max([num,0]) if l:line =~ '^[])}]' return !!num * indent(num) endif - let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] + let b:js_cache = [v:lnum,num,line('.') == v:lnum && num ? b:js_cache[2] : col('.')] call cursor(v:lnum,1) - if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,num + 1) > 0 + if l:line =~# '^while\>' && s:GetPair('\C\','\C\','bW',s:skip_expr . '|| !s:IsBlock()',100,num + 1) > 0 return indent(line('.')) endif @@ -277,7 +275,7 @@ function GetJavascriptIndent() let isOp = l:line =~# g:javascript_opfirst || pline !~# s:expr_case . '$' && pline =~# g:javascript_continuation let bL = s:iscontOne(l:lnum,num,isOp) let bL -= (bL && l:line =~ '^{') * s:W - if isOp && (!num || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) + if isOp && (!num || cursor(b:js_cache[1],b:js_cache[2]) || (getline(line('.'))[col('.')-1] == '{' && s:IsBlock())) return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL elseif num return indent(num) + s:W + switch_offset + bL From 8df58fec268b66e6800168f7676bfe063c41b2e2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 15 Oct 2016 00:47:11 -0700 Subject: [PATCH 05/28] cleaning --- indent/javascript.vim | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0de83559..93c3f9d2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -241,10 +241,8 @@ function GetJavascriptIndent() elseif l:line =~ '^[])}]' let id = stridx('])}',l:line[0]) let num = s:GetPair(escape('[({'[id],'['), escape('])}'[id],']'),'bW','s:skip_func(s:looksyn)',2000) - elseif syns != '' && getline(v:lnum)[0] =~ '\s' - let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : - \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] - let num = s:GetPair(pattern[0],pattern[1],'bW','s:skip_func(s:looksyn)',2000) + elseif getline(v:lnum)[0] =~ '\s' && syns =~? 'block' + let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) endif From 3d59c74c7c66d5064757042d2f7994721ee47b80 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 15 Oct 2016 00:57:16 -0700 Subject: [PATCH 06/28] date, first char whitespace --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 93c3f9d2..120cc1c1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: October 12, 2016 +" Last Change: October 15, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -241,7 +241,7 @@ function GetJavascriptIndent() elseif l:line =~ '^[])}]' let id = stridx('])}',l:line[0]) let num = s:GetPair(escape('[({'[id],'['), escape('])}'[id],']'),'bW','s:skip_func(s:looksyn)',2000) - elseif getline(v:lnum)[0] =~ '\s' && syns =~? 'block' + elseif indent(v:lnum) && syns =~? 'block' let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) From d55813b142406b649786bc8caf23253d421fbddc Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 15 Oct 2016 01:02:09 -0700 Subject: [PATCH 07/28] ws start, again --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 120cc1c1..5f55ee9a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -233,7 +233,7 @@ function GetJavascriptIndent() " the containing paren, bracket, curly. Memoize, last lineNr either has the " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) - if getline(l:lnum) !~ '^\S' + if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) From 371a71aae9198e4a4d3f304f1122fffce8ccb025 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 15 Oct 2016 09:46:20 -0700 Subject: [PATCH 08/28] template pline --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5f55ee9a..d68c0107 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -165,7 +165,7 @@ endfunction function s:PrevCodeLine(lnum) let l:lnum = prevnonblank(a:lnum) while l:lnum - if synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom + if synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"`]'),0),'name') !~? s:syng_strcom return l:lnum endif let l:lnum = prevnonblank(l:lnum - 1) From e4452cf879c665c521ddc6c3b67e37c1715465d6 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 15 Oct 2016 14:49:24 -0700 Subject: [PATCH 09/28] remove identical --- indent/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d68c0107..4dc1077b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -233,12 +233,13 @@ function GetJavascriptIndent() " the containing paren, bracket, curly. Memoize, last lineNr either has the " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) + let fclose = l:line =~ '^[])}]' if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) let num = b:js_cache[1] - elseif l:line =~ '^[])}]' + elseif fclose let id = stridx('])}',l:line[0]) let num = s:GetPair(escape('[({'[id],'['), escape('])}'[id],']'),'bW','s:skip_func(s:looksyn)',2000) elseif indent(v:lnum) && syns =~? 'block' @@ -251,7 +252,7 @@ function GetJavascriptIndent() endif let num = max([num,0]) - if l:line =~ '^[])}]' + if fclose return !!num * indent(num) endif let b:js_cache = [v:lnum,num,line('.') == v:lnum && num ? b:js_cache[2] : col('.')] From c516241246cd634d8da30561fb6a8b6c90f34f30 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 00:05:55 -0700 Subject: [PATCH 10/28] more variables --- indent/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4dc1077b..71cc03f0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -265,7 +265,8 @@ function GetJavascriptIndent() let s:W = s:sw() let pline = s:Trimline(l:lnum) call cursor(b:js_cache[1],b:js_cache[2]) - let switch_offset = !num || !(search(')\_s*\%#','bW') && + let bchar = getline(b:js_cache[1])[b:js_cache[2]-1] == '{' + let switch_offset = !num || !bchar || !(search(')\_s*\%#','bW') && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ Date: Mon, 17 Oct 2016 00:38:22 -0700 Subject: [PATCH 11/28] simplify balance func (#672) --- indent/javascript.vim | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 71cc03f0..91e0d6a1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -174,24 +174,23 @@ endfunction " Check if line 'lnum' has a balanced amount of parentheses. function s:Balanced(lnum) - let [open_0,open_2,open_4] = [0,0,0] + let l:open = 0 let l:line = getline(a:lnum) let pos = match(l:line, '[][(){}]', 0) while pos != -1 if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom - let idx = stridx('(){}[]', l:line[pos]) - if !(idx % 2) - let open_{idx} += 1 + if l:line[pos] =~ '[{([]' + let l:open += 1 else - let open_{idx - 1} -= 1 - if open_{idx - 1} < 0 + let l:open -= 1 + if l:open < 0 return 0 endif endif endif let pos = match(l:line, '[][(){}]', pos + 1) endwhile - return !(open_4 || open_2 || open_0) + return !l:open endfunction function GetJavascriptIndent() @@ -230,18 +229,17 @@ function GetJavascriptIndent() return ind endif - " the containing paren, bracket, curly. Memoize, last lineNr either has the - " same scope or starts a new one, unless if it closed a scope. + " the containing paren, bracket, curly. Many hacks for performance call cursor(v:lnum,1) let fclose = l:line =~ '^[])}]' if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && - \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) + \ (b:js_cache[0] > l:lnum || !fclose && s:Balanced(l:lnum)) let num = b:js_cache[1] elseif fclose let id = stridx('])}',l:line[0]) - let num = s:GetPair(escape('[({'[id],'['), escape('])}'[id],']'),'bW','s:skip_func(s:looksyn)',2000) + return indent(s:GetPair(escape('[({'[id],'['), '])}'[id],'bW','s:skip_func(s:looksyn)',2000)) elseif indent(v:lnum) && syns =~? 'block' let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else @@ -251,10 +249,10 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif - let num = max([num,0]) if fclose - return !!num * indent(num) + return indent(num) endif + let num = max([num,0]) let b:js_cache = [v:lnum,num,line('.') == v:lnum && num ? b:js_cache[2] : col('.')] call cursor(v:lnum,1) @@ -281,11 +279,11 @@ function GetJavascriptIndent() return indent(num) + s:W + switch_offset + bL endif return bL + finally let &magic = save_magic endtry endfunction - let &cpo = s:cpo_save unlet s:cpo_save From e643047f4da62b3ae394fcc4a415c3a4f08654d6 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 18 Oct 2016 14:29:31 -0700 Subject: [PATCH 12/28] simplify trimline (#673) remove janky binary search --- indent/javascript.vim | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 91e0d6a1..9d2d25e2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -63,23 +63,14 @@ else endfunction endif -" indent/python.vim function s:Trimline(ln) - let pline = getline(a:ln) - let min = match(pline,'\/[/*]') + 1 - if min && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? '\%(comment\|doc\)' - let max = match(pline,'.*\zs\/[/*]') + 1 - while min < max - let col = (min + max) / 2 - if synIDattr(synID(a:ln, col, 0), 'name') =~? '\%(comment\|doc\)' - let max = col - else - let min = match(pline,'\/[/*]',col) + 1 - endif - endwhile - let pline = strpart(pline, 0, min - 1) - endif - return substitute(pline,'\s*$','','') + let pline = substitute(getline(a:ln),'\s*$','','') + let max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) + while max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? '\%(comment\|doc\)' + let pline = substitute(strpart(pline, 0, max),'\s*$','','') + let max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) + endwhile + return pline endfunction " configurable regexes that define continuation lines, not including (, {, or [. From 69f2c87dce41a904faa21c05b3dda8dc5322055f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 19 Oct 2016 19:36:27 -0700 Subject: [PATCH 13/28] small minification and perf (#675) --- indent/javascript.vim | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9d2d25e2..097b3bbb 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: October 15, 2016 +" Last Change: October 19, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -50,7 +50,7 @@ function s:skip_func(lnum) return !s:free endif let s:looksyn = line('.') - return (search('\/','nbW',line('.')) || search('[''"\\]','nW',line('.'))) && eval(s:skip_expr) + return (strridx(getline('.'),'/',col('.')-1) + 1 || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) endfunction if has('reltime') @@ -65,10 +65,10 @@ endif function s:Trimline(ln) let pline = substitute(getline(a:ln),'\s*$','','') - let max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) - while max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? '\%(comment\|doc\)' - let pline = substitute(strpart(pline, 0, max),'\s*$','','') - let max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) + let l:max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) + while l:max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? '\%(comment\|doc\)' + let pline = substitute(strpart(pline, 0, l:max),'\s*$','','') + let l:max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) endwhile return pline endfunction @@ -85,8 +85,8 @@ let g:javascript_opfirst = '^' . g:javascript_opfirst let g:javascript_continuation .= '$' function s:OneScope(lnum,text) - return cursor(a:lnum, match(' ' . a:text, '\%(\\)$')) > -1 || - \ cursor(a:lnum, match(' ' . a:text, ')$')) > -1 && + return cursor(a:lnum, match(' ' . a:text, '\%(\\)$')) + 1 || + \ cursor(a:lnum, match(' ' . a:text, ')$')) + 1 && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && \ search('\C\<\%(for\%(\_s\+\%(await\|each\)\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') endfunction @@ -121,15 +121,15 @@ endfunction function s:IsBlock() let l:ln = line('.') if search('\S','bW') - let char = getline(line('.'))[col('.')-1] - let pchar = getline(line('.'))[col('.')-2] + let char = getline('.')[col('.')-1] + let pchar = getline('.')[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') if pchar . char == '*/' && syn =~? 'comment' if !search('\/\*','bW') || !search('\S','bW') return 1 endif - let char = getline(line('.'))[col('.')-1] - let pchar = getline(line('.'))[col('.')-2] + let char = getline('.')[col('.')-1] + let pchar = getline('.')[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') endif if syn =~? '\%(xml\|jsx\)' @@ -143,7 +143,7 @@ function s:IsBlock() elseif char == '>' return pchar == '=' || syn =~? '^jsflow' elseif char == ':' - return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' + return strpart(getline('.'),0,col('.')) =~# s:expr_case . '$' else return char !~# '[-=~!<*+,/?^%|&([]' endif @@ -254,7 +254,7 @@ function GetJavascriptIndent() let s:W = s:sw() let pline = s:Trimline(l:lnum) call cursor(b:js_cache[1],b:js_cache[2]) - let bchar = getline(b:js_cache[1])[b:js_cache[2]-1] == '{' + let bchar = getline('.')[col('.')-1] == '{' let switch_offset = !num || !bchar || !(search(')\_s*\%#','bW') && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ Date: Thu, 20 Oct 2016 17:47:59 -0700 Subject: [PATCH 14/28] init (#676) --- indent/javascript.vim | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 097b3bbb..abd02a66 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,15 +74,10 @@ function s:Trimline(ln) endfunction " configurable regexes that define continuation lines, not including (, {, or [. -if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,?^%|*&]\|\/[/*]\@!\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' -endif -if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<=,.?/*^%|&:]\|+\@\|\,?^%|*&]\|\/[/*]\@!\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)') +let s:javascript_continuation = get(g:,'javascript_continuation', + \ '\%([<=,.?/*^%|&:]\|+\@\|\\)$')) + 1 || @@ -188,9 +183,7 @@ function GetJavascriptIndent() try let save_magic = &magic set magic - if !exists('b:js_cache') - let b:js_cache = [0,0,0] - endif + let b:js_cache = get(b:,'js_cache',[0,0,0]) " Get the current line. let l:line = getline(v:lnum) let syns = synIDattr(synID(v:lnum, 1, 0), 'name') @@ -261,7 +254,7 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) " most significant, find the indent amount - let isOp = l:line =~# g:javascript_opfirst || pline !~# s:expr_case . '$' && pline =~# g:javascript_continuation + let isOp = l:line =~# s:javascript_opfirst || pline !~# s:expr_case . '$' && pline =~# s:javascript_continuation let bL = s:iscontOne(l:lnum,num,isOp) let bL -= (bL && l:line =~ '^{') * s:W if isOp && (!num || bchar && cursor(b:js_cache[1],b:js_cache[2])+1 && s:IsBlock()) From 53f843b646eb5a677d3ea9f03c51010b1f3ffd96 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 20 Oct 2016 21:34:53 -0700 Subject: [PATCH 15/28] shorten s:var names --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index abd02a66..560653ac 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,9 +74,9 @@ function s:Trimline(ln) endfunction " configurable regexes that define continuation lines, not including (, {, or [. -let s:javascript_opfirst = '^' . get(g:,'javascript_opfirst', +let s:opfirst = '^' . get(g:,'javascript_opfirst', \ '\%([<>,?^%|*&]\|\/[/*]\@!\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)') -let s:javascript_continuation = get(g:,'javascript_continuation', +let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.?/*^%|&:]\|+\@\|\ Date: Fri, 21 Oct 2016 01:32:41 -0700 Subject: [PATCH 16/28] other small touches (#677) --- indent/javascript.vim | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 560653ac..6717e79e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -199,7 +199,7 @@ function GetJavascriptIndent() return -1 endif let l:lnum = s:PrevCodeLine(v:lnum - 1) - if l:lnum == 0 + if !l:lnum return 0 endif @@ -215,15 +215,14 @@ function GetJavascriptIndent() " the containing paren, bracket, curly. Many hacks for performance call cursor(v:lnum,1) - let fclose = l:line =~ '^[])}]' + let idx = stridx('])}',l:line[0]) if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && - \ (b:js_cache[0] > l:lnum || !fclose && s:Balanced(l:lnum)) + \ (b:js_cache[0] > l:lnum || idx < 0 && s:Balanced(l:lnum)) let num = b:js_cache[1] - elseif fclose - let id = stridx('])}',l:line[0]) - return indent(s:GetPair(escape('[({'[id],'['), '])}'[id],'bW','s:skip_func(s:looksyn)',2000)) + elseif idx + 1 + return indent(s:GetPair(escape('[({'[idx],'['), '])}'[idx],'bW','s:skip_func(s:looksyn)',2000)) elseif indent(v:lnum) && syns =~? 'block' let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else @@ -233,7 +232,7 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif - if fclose + if idx + 1 return indent(num) endif let num = max([num,0]) From da8ac5b8e8464a0ed0a55f9117fe4b9e8d2de286 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 21 Oct 2016 14:55:59 -0700 Subject: [PATCH 17/28] remove pattern match --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6717e79e..7d8de736 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,7 @@ function s:IsBlock() elseif char == ':' return strpart(getline('.'),0,col('.')) =~# s:expr_case . '$' else - return char !~# '[-=~!<*+,/?^%|&([]' + return stridx('-=~!<*+,/?^%|&([',char) < 0 endif else return 1 From dc34b2461d2b70bbb74fee0e73c931c426556f91 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 21 Oct 2016 21:44:02 -0700 Subject: [PATCH 18/28] small fixes (#678) --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7d8de736..f24afc2f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -165,7 +165,7 @@ function s:Balanced(lnum) let pos = match(l:line, '[][(){}]', 0) while pos != -1 if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom - if l:line[pos] =~ '[{([]' + if stridx('[({',l:line[pos]) + 1 let l:open += 1 else let l:open -= 1 @@ -215,14 +215,14 @@ function GetJavascriptIndent() " the containing paren, bracket, curly. Many hacks for performance call cursor(v:lnum,1) - let idx = stridx('])}',l:line[0]) + let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1 if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && \ (b:js_cache[0] > l:lnum || idx < 0 && s:Balanced(l:lnum)) let num = b:js_cache[1] elseif idx + 1 - return indent(s:GetPair(escape('[({'[idx],'['), '])}'[idx],'bW','s:skip_func(s:looksyn)',2000)) + return indent(s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000)) elseif indent(v:lnum) && syns =~? 'block' let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else @@ -255,7 +255,7 @@ function GetJavascriptIndent() " most significant, find the indent amount let isOp = l:line =~# s:opfirst || pline !~# s:expr_case . '$' && pline =~# s:continuation let bL = s:iscontOne(l:lnum,num,isOp) - let bL -= (bL && l:line =~ '^{') * s:W + let bL -= (bL && strridx(l:line,'{',0) + 1) * s:W if isOp && (!num || bchar && cursor(b:js_cache[1],b:js_cache[2])+1 && s:IsBlock()) return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL elseif num From 5d8153eec0b3de21b6fc03253b2c0f76e451610e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 21 Oct 2016 22:10:54 -0700 Subject: [PATCH 19/28] string match overkill using strridx --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f24afc2f..543f6806 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -255,7 +255,7 @@ function GetJavascriptIndent() " most significant, find the indent amount let isOp = l:line =~# s:opfirst || pline !~# s:expr_case . '$' && pline =~# s:continuation let bL = s:iscontOne(l:lnum,num,isOp) - let bL -= (bL && strridx(l:line,'{',0) + 1) * s:W + let bL -= (bL && l:line[0] == '{') * s:W if isOp && (!num || bchar && cursor(b:js_cache[1],b:js_cache[2])+1 && s:IsBlock()) return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL elseif num From c746dbc7f17148e2148339ce116d531326387831 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 22 Oct 2016 00:04:48 -0700 Subject: [PATCH 20/28] reltime search --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 543f6806..f2c1e123 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -58,8 +58,8 @@ if has('reltime') return searchpair(a:start,'',a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time) endfunction else - function s:GetPair(start,end,flags,...) - return searchpair(a:start,'',a:end,a:flags,"line('.') < prevnonblank(v:lnum) - 2000 ? dummy : 0") + function s:GetPair(start,end,flags,skip,...) + return searchpair(a:start,'',a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)])) endfunction endif From b3edf7f9e59cbf5d70c00ee42af7b6e874c452f4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 22 Oct 2016 12:13:33 -0700 Subject: [PATCH 21/28] cleaner cursor call --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f2c1e123..07f4bc1f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -245,7 +245,7 @@ function GetJavascriptIndent() let s:W = s:sw() let pline = s:Trimline(l:lnum) - call cursor(b:js_cache[1],b:js_cache[2]) + call call('cursor',b:js_cache[1:]) let bchar = getline('.')[col('.')-1] == '{' let switch_offset = !num || !bchar || !(search(')\_s*\%#','bW') && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ Date: Sun, 23 Oct 2016 00:24:00 -0700 Subject: [PATCH 22/28] check for case statement in switch (#682) --- indent/javascript.vim | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 07f4bc1f..4aeeb6da 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -205,14 +205,6 @@ function GetJavascriptIndent() let l:line = substitute(l:line,'^\s*\%(\/\*.\{-}\*\/\s*\)*','','') - if l:line =~# '^' . s:expr_case - let cpo_switch = &cpo - set cpo+=% - let ind = cindent(v:lnum) - let &cpo = cpo_switch - return ind - endif - " the containing paren, bracket, curly. Many hacks for performance call cursor(v:lnum,1) let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1 @@ -243,20 +235,27 @@ function GetJavascriptIndent() return indent(line('.')) endif + call call('cursor',b:js_cache[1:]) let s:W = s:sw() let pline = s:Trimline(l:lnum) - call call('cursor',b:js_cache[1:]) let bchar = getline('.')[col('.')-1] == '{' - let switch_offset = !num || !bchar || !(search(')\_s*\%#','bW') && - \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ 0 && search('\C\ Date: Sun, 23 Oct 2016 15:47:21 -0700 Subject: [PATCH 23/28] refactor --- indent/javascript.vim | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4aeeb6da..be178758 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -212,23 +212,27 @@ function GetJavascriptIndent() let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && \ (b:js_cache[0] > l:lnum || idx < 0 && s:Balanced(l:lnum)) - let num = b:js_cache[1] + call call('cursor',b:js_cache[1:]) elseif idx + 1 - return indent(s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000)) + call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000) elseif indent(v:lnum) && syns =~? 'block' - let num = s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) + call s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) else - let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) + call s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) endif else - let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) + call s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif if idx + 1 - return indent(num) + if idx == 2 && search('\S','bW',line('.')) && getline('.')[col('.')-1] == ')' + call s:GetPair('(',')','bW',s:skip_expr,200) + endif + return indent(line('.')) endif - let num = max([num,0]) - let b:js_cache = [v:lnum,num,line('.') == v:lnum && num ? b:js_cache[2] : col('.')] + + let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : [line('.'),col('.')]) + let num = b:js_cache[1] call cursor(v:lnum,1) if l:line =~# '^while\>' && s:GetPair('\C\','\C\','bW',s:skip_expr . '|| !s:IsBlock()',100,num + 1) > 0 From 4b435ebb41211e4b1038944e6ad25fd1404c20e6 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 23 Oct 2016 22:29:43 -0700 Subject: [PATCH 24/28] small fix --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index be178758..3aaef6f3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -211,7 +211,7 @@ function GetJavascriptIndent() if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && - \ (b:js_cache[0] > l:lnum || idx < 0 && s:Balanced(l:lnum)) + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) call call('cursor',b:js_cache[1:]) elseif idx + 1 call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000) From 2676ca045307cece4c5d2542a76b2eaaedf36236 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 24 Oct 2016 15:53:34 -0700 Subject: [PATCH 25/28] Prevent giant loop, refactor --- indent/javascript.vim | 62 +++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 26 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 3aaef6f3..da5f3061 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: October 19, 2016 +" Last Change: October 24, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -63,7 +63,7 @@ else endfunction endif -function s:Trimline(ln) +function s:Trim(ln) let pline = substitute(getline(a:ln),'\s*$','','') let l:max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) while l:max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? '\%(comment\|doc\)' @@ -88,12 +88,12 @@ endfunction function s:iscontOne(i,num,cont) let [l:i, l:cont, l:num] = [a:i, a:cont, a:num + !a:num] - let pind = a:num ? indent(l:num) : -s:W - let ind = indent(l:i) + (!l:cont * s:W) + let pind = a:num ? indent(l:num) + s:W : 0 + let ind = indent(l:i) + (a:cont ? 0 : s:W) let bL = 0 - while l:i >= l:num && (!l:cont || ind > pind + s:W) + while l:i >= l:num && (!l:cont || ind > pind) if indent(l:i) < ind " first line always true for !a:cont, false for !!a:cont - if s:OneScope(l:i,s:Trimline(l:i)) + if s:OneScope(l:i,s:Trim(l:i)) if expand('') ==# 'while' && \ s:GetPair('\C\','\C\','bW','line2byte(line(".")) + col(".") <' \ . (line2byte(l:num) + b:js_cache[2]) . '||' @@ -106,6 +106,8 @@ function s:iscontOne(i,num,cont) break endif let ind = indent(l:i) + elseif !a:cont + break endif let l:i = s:PrevCodeLine(l:i - 1) endwhile @@ -234,32 +236,40 @@ function GetJavascriptIndent() let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : [line('.'),col('.')]) let num = b:js_cache[1] - call cursor(v:lnum,1) - if l:line =~# '^while\>' && s:GetPair('\C\','\C\','bW',s:skip_expr . '|| !s:IsBlock()',100,num + 1) > 0 - return indent(line('.')) + call call('cursor',b:js_cache[1:]) + let [s:W, pline, isOp, stmt, bL, switch_offset] = [s:sw(), s:Trim(l:lnum),0,0,0,0] + if num + if getline('.')[col('.')-1] == '{' + if search(')\_s*\%#','bW') + let stmt = 1 + if s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ 0 && search('\C\' && s:GetPair('\C\','\C\','bW',s:skip_expr . '|| !s:IsBlock()',100,num + 1) > 0 + return indent(line('.')) endif + let isOp = l:line =~# s:opfirst || pline =~# s:continuation + let bL = s:iscontOne(l:lnum,num,isOp) + let bL -= (bL && l:line[0] == '{') * s:W endif " most significant, find the indent amount - let isOp = l:line =~# s:opfirst || (in_switch && pline =~# s:expr_case . '$' ? 0 : pline =~# s:continuation) - let bL = s:iscontOne(l:lnum,num,isOp) - let bL -= (bL && l:line[0] == '{') * s:W - if isOp && (!num || in_switch || bchar && call('cursor',b:js_cache[1:])+1 && s:IsBlock()) + if isOp return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL elseif num return indent(num) + s:W + switch_offset + bL From 672c379b18e3147ba8a2e7c687e02f7ee8fb64b8 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 24 Oct 2016 21:17:18 -0700 Subject: [PATCH 26/28] Update javascript.vim --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index da5f3061..31c7bc9f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -12,7 +12,7 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() -setlocal nolisp noautoindent nosmartindent +setlocal nolisp autoindent nosmartindent setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1 @@ -236,7 +236,6 @@ function GetJavascriptIndent() let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : [line('.'),col('.')]) let num = b:js_cache[1] - call call('cursor',b:js_cache[1:]) let [s:W, pline, isOp, stmt, bL, switch_offset] = [s:sw(), s:Trim(l:lnum),0,0,0,0] if num if getline('.')[col('.')-1] == '{' @@ -268,7 +267,7 @@ function GetJavascriptIndent() let bL -= (bL && l:line[0] == '{') * s:W endif - " most significant, find the indent amount + " main return if isOp return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL elseif num From 88b068088dac712b4ab587ee346e806757edac18 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 24 Oct 2016 21:28:25 -0700 Subject: [PATCH 27/28] cleaning --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 31c7bc9f..a74e53c3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -100,7 +100,7 @@ function s:iscontOne(i,num,cont) \ . s:skip_expr . '|| !s:IsBlock()',100,l:num) > 0 return 0 endif - let bL += 1 + let bL += s:W let [l:cont, l:i] = [0, line('.')] elseif !l:cont break @@ -111,7 +111,7 @@ function s:iscontOne(i,num,cont) endif let l:i = s:PrevCodeLine(l:i - 1) endwhile - return bL * s:W + return bL endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader From 23bb9c3e1e7bcdc8e63c1ca23bfdeff22d664a1a Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 24 Oct 2016 21:34:36 -0700 Subject: [PATCH 28/28] last cleaning --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a74e53c3..5191a2c2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -12,7 +12,7 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() -setlocal nolisp autoindent nosmartindent +setlocal autoindent nolisp nosmartindent setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1