From 614a09dd28f8cf5fa766d54b0d25b417817ed327 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 17:33:14 -0700 Subject: [PATCH 01/13] speed increase attempt --- indent/javascript.vim | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index faf592b3..cee48fb1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -46,7 +46,16 @@ let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:skip_expr = "(getline(line('.')) =~ '[''/\"\\`]' || !s:free || s:skip_func(s:looksyn ? s:looksyn : v:lnum) )&& synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" + +function s:skip_func(lnum) + if s:free == 0 + return 1 + endif + let s:free = !(search('`','nW',a:lnum)|| search('\*\/','nW',a:lnum)) + let s:looksyn = s:free ? line('.') : 0 + return s:looksyn != line('.') +endfunction if has('reltime') function s:GetPair(start,end,flags,time) @@ -151,7 +160,8 @@ function GetJavascriptIndent() return ind endif "}}} - + let s:free = 1 + let s:looksyn = 0 " 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) From 7f4473228b2988fb5926c40b261e30d034eba204 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 17:43:25 -0700 Subject: [PATCH 02/13] Update javascript.vim --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index cee48fb1..559cecc2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -46,10 +46,10 @@ let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "(getline(line('.')) =~ '[''/\"\\`]' || !s:free || s:skip_func(s:looksyn ? s:looksyn : v:lnum) )&& synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:skip_expr = "(getline(line('.')) =~ '[''/\"\\`]' || s:skip_func(s:looksyn ? s:looksyn : v:lnum) )&& synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) - if s:free == 0 + if !s:free return 1 endif let s:free = !(search('`','nW',a:lnum)|| search('\*\/','nW',a:lnum)) From ad0d73c9462ff9deaa2b6fbbbbfa887ab273d836 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 18:44:33 -0700 Subject: [PATCH 03/13] Update javascript.vim --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 559cecc2..5643d6cc 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -46,10 +46,10 @@ let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "(getline(line('.')) =~ '[''/\"\\`]' || s:skip_func(s:looksyn ? s:looksyn : v:lnum) )&& synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:skip_expr = "s:skip_func(s:looksyn ? s:looksyn : v:lnum) && synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) - if !s:free + if !s:free || getline(line('.')) =~ '[''/\"\\`]' return 1 endif let s:free = !(search('`','nW',a:lnum)|| search('\*\/','nW',a:lnum)) From 0dbc812d3ede9af117dff316a6b620617bb5f88c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 21:52:28 -0700 Subject: [PATCH 04/13] Update javascript.vim --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5643d6cc..06718d66 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -49,10 +49,10 @@ let s:syng_comment = '\%(comment\|doc\)' let s:skip_expr = "s:skip_func(s:looksyn ? s:looksyn : v:lnum) && synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) - if !s:free || getline(line('.')) =~ '[''/\"\\`]' + if !s:free || getline(line('.')) =~ '[''/"\\`]' return 1 endif - let s:free = !(search('`','nW',a:lnum)|| search('\*\/','nW',a:lnum)) + let s:free = !(search('`','nW',a:lnum) || search('\*\/','nW',a:lnum)) let s:looksyn = s:free ? line('.') : 0 return s:looksyn != line('.') endfunction From 31ad415907cd6c2b9d2dc97c4b3dbd23ee9f287c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 22:06:37 -0700 Subject: [PATCH 05/13] Update javascript.vim --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 06718d66..1a0bba92 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -49,12 +49,12 @@ let s:syng_comment = '\%(comment\|doc\)' let s:skip_expr = "s:skip_func(s:looksyn ? s:looksyn : v:lnum) && synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) - if !s:free || getline(line('.')) =~ '[''/"\\`]' + if !s:free || getline(line('.')) =~ '[''/"\\]' return 1 endif let s:free = !(search('`','nW',a:lnum) || search('\*\/','nW',a:lnum)) let s:looksyn = s:free ? line('.') : 0 - return s:looksyn != line('.') + return !s:looksyn endfunction if has('reltime') From 70c3acf26a4f9640623c0c29ce0e0740048675b3 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 22:18:50 -0700 Subject: [PATCH 06/13] 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 1a0bba92..f3a15675 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,7 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc.{{{2 - if (l:line !~ '^[''"`]' && syns =~? '\%(string\|template\)') || + if (l:line !~ '^[''"]' && syns =~? '\%(string\|template\)') || \ (l:line !~ '^\s*[/*]' && syns =~? s:syng_comment) return -1 endif From 6a8434c8ab74ebea10f77fcd26c701f7663006c8 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Sep 2016 22:46:28 -0700 Subject: [PATCH 07/13] 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 f3a15675..97273ffc 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -160,8 +160,7 @@ function GetJavascriptIndent() return ind endif "}}} - let s:free = 1 - let s:looksyn = 0 + let [s:looksyn,s:free] = [0,1] " 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) @@ -175,7 +174,7 @@ function GetJavascriptIndent() else let num = s:GetPair('[({[]','[])}]','bW',2000) endif - + let [s:looksyn,s:free] = [0,1] let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' From f6f51dbaab7ab096c6ebfa1fc44ffab58f733a75 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 00:00:19 -0700 Subject: [PATCH 08/13] Update javascript.vim --- indent/javascript.vim | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 97273ffc..3027e4fe 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -1,3 +1,4 @@ + " Vim indent file " Language: Javascript " Maintainer: vim-javascript community @@ -46,7 +47,8 @@ let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "s:skip_func(s:looksyn ? s:looksyn : v:lnum) && synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:fast_skip_expr = 's:skip_func(s:looksyn ? s:looksyn : v:lnum) && ' . s:skip_expr function s:skip_func(lnum) if !s:free || getline(line('.')) =~ '[''/"\\]' @@ -58,11 +60,11 @@ function s:skip_func(lnum) endfunction if has('reltime') - function s:GetPair(start,end,flags,time) - return searchpair(a:start,'',a:end,a:flags,s:skip_expr,max([prevnonblank(v:lnum) - 2000,0]),a:time) + function s:GetPair(start,end,flags,skip,time) + return searchpair(a:start,'',a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0]),a:time) endfunction else - function s:GetPair(start,end,flags,n) + function s:GetPair(start,end,flags,...) return searchpair(a:start,'',a:end,a:flags,0,max([prevnonblank(v:lnum) - 2000,0])) endfunction endif @@ -83,8 +85,8 @@ let g:javascript_continuation .= s:line_term function s:OneScope(lnum,text) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : \ cursor(a:lnum, match(' ' . a:text, ')' . s:line_term)) > -1 && - \ s:GetPair('(', ')', 'bW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && - \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\','nbW',100) <= 0) && + \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\l\+\_s*\%#','bW') && + \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\','nbW',s:skip_expr,100) <= 0) && \ (expand('') !=# 'each' || search('\C\') : '' endfunction @@ -160,9 +162,10 @@ function GetJavascriptIndent() return ind endif "}}} - let [s:looksyn,s:free] = [0,1] + " the containing paren, bracket, curly. Memoize, last lineNr either has the " same scope or starts a new one, unless if it closed a scope. + let [s:looksyn,s:free] = [0,1] call cursor(v:lnum,1) if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) @@ -170,13 +173,13 @@ function GetJavascriptIndent() elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] - let num = s:GetPair(pattern[0],pattern[1],'bW',2000) + let num = s:GetPair(pattern[0],pattern[1],'bW',s:fast_skip_expr,2000) else - let num = s:GetPair('[({[]','[])}]','bW',2000) + let num = s:GetPair('[({[]','[])}]','bW',s:fast_skip_expr,2000) endif - let [s:looksyn,s:free] = [0,1] - 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 ? b:js_cache[2] : col('.')] + if l:line =~ s:line_pre . '[])}]' return indent(num) endif @@ -184,7 +187,7 @@ function GetJavascriptIndent() let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), '\%(:\@ 0 && search('\C\ 0 && search('\C\ Date: Sun, 11 Sep 2016 00:04:23 -0700 Subject: [PATCH 09/13] 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 3027e4fe..d8417100 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -1,4 +1,3 @@ - " Vim indent file " Language: Javascript " Maintainer: vim-javascript community @@ -86,7 +85,7 @@ function s:OneScope(lnum,text) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : \ cursor(a:lnum, match(' ' . a:text, ')' . s:line_term)) > -1 && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\l\+\_s*\%#','bW') && - \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\','nbW',s:skip_expr,100) <= 0) && + \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\', 'nbW', s:skip_expr, 100) <= 0) && \ (expand('') !=# 'each' || search('\C\') : '' endfunction From c43271fc742ff7cfddb4d0853c82d1ed59487f66 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 00:11:02 -0700 Subject: [PATCH 10/13] 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 d8417100..4c94da96 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -48,7 +48,6 @@ let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" let s:fast_skip_expr = 's:skip_func(s:looksyn ? s:looksyn : v:lnum) && ' . s:skip_expr - function s:skip_func(lnum) if !s:free || getline(line('.')) =~ '[''/"\\]' return 1 @@ -178,7 +177,7 @@ function GetJavascriptIndent() endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - + if l:line =~ s:line_pre . '[])}]' return indent(num) endif From 132515abe524c900744cbcb29285da135a2b8010 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 00:27:27 -0700 Subject: [PATCH 11/13] 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 4c94da96..d0311b5a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -47,7 +47,7 @@ let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" -let s:fast_skip_expr = 's:skip_func(s:looksyn ? s:looksyn : v:lnum) && ' . s:skip_expr +let s:fast_skip_expr = 's:skip_func(s:looksyn ? s:looksyn : v:lnum - 1) && ' . s:skip_expr function s:skip_func(lnum) if !s:free || getline(line('.')) =~ '[''/"\\]' return 1 From 9452629b63d2571e09189bb469898f23ec482bb7 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 11:16:36 -0700 Subject: [PATCH 12/13] massive improvements! --- indent/javascript.vim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d0311b5a..c13f80ee 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -47,12 +47,13 @@ let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" -let s:fast_skip_expr = 's:skip_func(s:looksyn ? s:looksyn : v:lnum - 1) && ' . s:skip_expr function s:skip_func(lnum) if !s:free || getline(line('.')) =~ '[''/"\\]' - return 1 + return eval(s:skip_expr) + endif + if search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) + let s:free = !eval(s:skip_expr) endif - let s:free = !(search('`','nW',a:lnum) || search('\*\/','nW',a:lnum)) let s:looksyn = s:free ? line('.') : 0 return !s:looksyn endfunction @@ -84,7 +85,7 @@ function s:OneScope(lnum,text) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : \ cursor(a:lnum, match(' ' . a:text, ')' . s:line_term)) > -1 && \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\l\+\_s*\%#','bW') && - \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\', 'nbW', s:skip_expr, 100) <= 0) && + \ (expand('') !=# 'while' || s:GetPair('\C\', '\C\','nbW',s:skip_expr,100) <= 0) && \ (expand('') !=# 'each' || search('\C\') : '' endfunction @@ -171,9 +172,9 @@ function GetJavascriptIndent() elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] - let num = s:GetPair(pattern[0],pattern[1],'bW',s:fast_skip_expr,2000) + let num = s:GetPair(pattern[0],pattern[1],'bW','s:skip_func(s:looksyn ? s:looksyn : v:lnum - 1)',2000) else - let num = s:GetPair('[({[]','[])}]','bW',s:fast_skip_expr,2000) + let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn ? s:looksyn : v:lnum - 1)',2000) endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] From 21c3f0d2417b190ac4892d7cbbef64711b4a77f0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 12:08:33 -0700 Subject: [PATCH 13/13] Update javascript.vim --- indent/javascript.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c13f80ee..d7c5f208 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -54,8 +54,8 @@ function s:skip_func(lnum) if search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) let s:free = !eval(s:skip_expr) endif - let s:looksyn = s:free ? line('.') : 0 - return !s:looksyn + let s:looksyn = s:free ? line('.') : s:looksyn + return !s:free endfunction if has('reltime') @@ -164,7 +164,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. - let [s:looksyn,s:free] = [0,1] + let [s:looksyn,s:free] = [v:lnum - 1,1] call cursor(v:lnum,1) if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) @@ -172,9 +172,9 @@ function GetJavascriptIndent() elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] - let num = s:GetPair(pattern[0],pattern[1],'bW','s:skip_func(s:looksyn ? s:looksyn : v:lnum - 1)',2000) + let num = s:GetPair(pattern[0],pattern[1],'bW','s:skip_func(s:looksyn)',2000) else - let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn ? s:looksyn : v:lnum - 1)',2000) + let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')]