From a9e66fbca8e2403206db165eef1075088633e128 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 21:44:55 -0700 Subject: [PATCH 1/7] simplify balance func --- indent/javascript.vim | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 71cc03f0..ab631660 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() From 6d057a7a36771fb1bda18fdc5d23246e64e4d383 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 22:23:14 -0700 Subject: [PATCH 2/7] Update javascript.vim --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ab631660..63c21ab4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -240,7 +240,7 @@ function GetJavascriptIndent() 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 From f4487a8c4600f5ba918130e167a82724ffdd767f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 23:04:26 -0700 Subject: [PATCH 3/7] Update javascript.vim --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 63c21ab4..11bb11c2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -236,7 +236,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 || 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]) From 28fc03b8ce88c25ee6635092ce571e1ba063a3b0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 23:53:54 -0700 Subject: [PATCH 4/7] Update javascript.vim --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 11bb11c2..9da7a80e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -252,7 +252,7 @@ function GetJavascriptIndent() let num = max([num,0]) if fclose - return !!num * indent(num) + return indent(num) endif let b:js_cache = [v:lnum,num,line('.') == v:lnum && num ? b:js_cache[2] : col('.')] From 28dcf6a6966dd92b80604690e972098715ff1f8f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 16 Oct 2016 23:57:30 -0700 Subject: [PATCH 5/7] Update javascript.vim --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9da7a80e..5e6bc5d1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -250,10 +250,10 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif - let num = max([num,0]) if fclose 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) From 0b538e20f1860a479bcbe154f585247d7144f2e4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 17 Oct 2016 00:01:00 -0700 Subject: [PATCH 6/7] Update javascript.vim --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5e6bc5d1..5ecfc31a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -280,11 +280,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 de113d0aefab4c6dd36e11d92dd30ca9acffb643 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 17 Oct 2016 00:14:12 -0700 Subject: [PATCH 7/7] Update javascript.vim --- indent/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5ecfc31a..91e0d6a1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -229,8 +229,7 @@ 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)