From 045cbaff2280bde3421fb574adef516a6a59110e Mon Sep 17 00:00:00 2001 From: mrhooray Date: Tue, 11 Mar 2014 12:04:44 -0700 Subject: [PATCH 001/929] support CommonJS syntax highlighting --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ded23301..bb92a1c0 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -35,6 +35,7 @@ syntax keyword jsOperator delete instanceof typeof void new in syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false +syntax keyword jsCommonJS require module exports "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -182,7 +183,7 @@ endif "DOM/HTML/CSS "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise +syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -291,6 +292,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsExceptions Special HiLink jsFutureKeys Special HiLink jsBuiltins Special + HiLink jsCommonJS Include HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From 8704ea152b99311f8c4cf334ff5e4bfa81cf6b16 Mon Sep 17 00:00:00 2001 From: Christian Wesselhoeft Date: Mon, 12 May 2014 21:38:40 -0700 Subject: [PATCH 002/929] Add some ES6 keywords. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0bd0ac08..f8d249cf 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -121,7 +121,7 @@ syntax keyword jsStatement break continue with syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for syntax keyword jsLabel case default -syntax keyword jsKeyword yield +syntax keyword jsKeyword yield import export default extends class syntax keyword jsException try catch throw finally syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window @@ -131,7 +131,7 @@ syntax keyword jsExceptions Error EvalError InternalError RangeError Referen syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval -syntax keyword jsFutureKeys abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws goto private transient debugger implements protected volatile double import public +syntax keyword jsFutureKeys abstract enum int short boolean interface static byte long super char final native synchronized float package throws goto private transient debugger implements protected volatile double public "" DOM/HTML/CSS specified things From d9baadd38fda087040c8ea5e8da5e8cbbca36375 Mon Sep 17 00:00:00 2001 From: Riobard Date: Thu, 3 Apr 2014 14:44:49 -0230 Subject: [PATCH 003/929] Allow customizing individual concealing characters --- README.md | 18 +++++++++++++----- syntax/javascript.vim | 27 +++++++-------------------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 3987b978..83dcdf47 100644 --- a/README.md +++ b/README.md @@ -55,11 +55,6 @@ Enables JavaScript code folding. Default Value: 1 -#### g:javascript_conceal - -Enables concealing characters. For example, `function` is replaced with `ƒ` - -Default Value: 0 #### javascript_ignore_javaScriptdoc @@ -67,6 +62,19 @@ Disables JSDoc syntax highlighting Default Value: 0 +#### Concealing Characters + +You can customize concealing characters by defining one or more of the following +variables: + + let g:javascript_conceal_function = "ƒ" + let g:javascript_conceal_null = "ø" + let g:javascript_conceal_this = "@" + let g:javascript_conceal_return = "⇚" + let g:javascript_conceal_undefined = "¿" + let g:javascript_conceal_NaN = "ℕ" + let g:javascript_conceal_prototype = "¶" + ## Contributing This project uses the [git diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0bd0ac08..1fddb5b7 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -100,21 +100,12 @@ syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+- syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\s*function\s*\)\@=/ contained -if g:javascript_conceal == 1 - syntax keyword jsNull null conceal cchar=ø - syntax keyword jsThis this conceal cchar=@ - syntax keyword jsReturn return conceal cchar=⇚ - syntax keyword jsUndefined undefined conceal cchar=¿ - syntax keyword jsNan NaN conceal cchar=ℕ - syntax keyword jsPrototype prototype conceal cchar=¶ -else - syntax keyword jsNull null - syntax keyword jsThis this - syntax keyword jsReturn return - syntax keyword jsUndefined undefined - syntax keyword jsNan NaN - syntax keyword jsPrototype prototype -endif +exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') +exe 'syntax keyword jsReturn return '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') +exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') +exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') +exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') +exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') "" Statement Keywords syntax keyword jsStatement break continue with @@ -203,11 +194,7 @@ if main_syntax == "javascript" syntax sync match jsHighlight grouphere jsBlock /{/ endif -if g:javascript_conceal == 1 - syntax match jsFunction /\/ nextgroup=jsFuncName,jsFuncArgs skipwhite conceal cchar=ƒ -else - syntax match jsFunction /\/ nextgroup=jsFuncName,jsFuncArgs skipwhite -endif +exe 'syntax match jsFunction /\/ nextgroup=jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest nextgroup=jsFuncBlock keepend skipwhite skipempty From 1881c848a049c2071acad6d97f3e4b114b502304 Mon Sep 17 00:00:00 2001 From: Quinn Strahl Date: Tue, 8 Jul 2014 16:10:35 -0400 Subject: [PATCH 004/929] Add blurb about pull requests to CONTRIBUTING.md --- CONTRIBUTING.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1128b9bb..c47cbc86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,6 +8,11 @@ the price of admission is 1 pull request. Please follow the general code style guides (read the code) and in your pull request explain the reason for the proposed change and how it is valuable. +## Pull Requests + +Please make your pull requests against the `develop` branch; we stage changes +for testing there to avoid unexpected breakages for our users. :) + ## Bug report Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). From ca201905da0b44b703cd744e65d29bb9d3a11926 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Wed, 9 Jul 2014 19:06:53 +0200 Subject: [PATCH 005/929] Fix gq to not split strings halfway through --- indent/javascript.vim | 50 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index 29fba2ba..f1bc70dd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -15,6 +15,7 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() +setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e " Only define the function once. @@ -437,3 +438,52 @@ endfunction let &cpo = s:cpo_save unlet s:cpo_save + +function! Fixedgq(lnum, count) + let l:count = a:count + + if len(getline(a:lnum)) < 80 && l:count == 1 " No need for gq + return 1 + endif + + " Put all the lines on one line and do normal spliting after that + if l:count > 1 + while l:count > 1 + let l:count -= 1 + normal J + endwhile + endif + + let l:winview = winsaveview() + + call cursor(a:lnum, 81) + let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) + call cursor(a:lnum, 81) + let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) + + " No need for special treatment, normal gq handles edgecases better + if breakpoint[1] == orig_breakpoint[1] + call winrestview(l:winview) + return 1 + endif + + " Try breaking after string + if breakpoint[1] == indent(a:lnum) + call cursor(a:lnum, 81) + let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) + endif + + + if breakpoint[1] != 0 + call feedkeys("r\") + else + let l:count = l:count - 1 + endif + + " run gq on new lines + if l:count == 1 + call feedkeys("gqq") + endif + + return 0 +endfunction From 03bd5d28bc488a5dc6ebd9796af4a06a143d752d Mon Sep 17 00:00:00 2001 From: Xueqiao Xu Date: Thu, 10 Jul 2014 11:20:52 -0700 Subject: [PATCH 006/929] Add Closure Compiler annotations --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5d0e4d11..427b71f3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -56,15 +56,15 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocComment matchgroup=jsComment start="/\*\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - syntax match jsDocTags contained "@\(alias\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + syntax match jsDocTags contained "@\(alias\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param syntax match jsDocTags contained "@\(arg\|argument\|param\|property\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param - syntax match jsDocTags contained "@\(callback\|enum\|external\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite + syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite " tags containing references syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|event\|example\|file[oO]verview\|function\|global\|ignore\|inner\|instance\|license\|method\|mixin\|overview\|private\|protected\|public\|readonly\|since\|static\|todo\|summary\|undocumented\|virtual\)\>" + syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite From 0077e5782dff5213cf013470d7937aed30825096 Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Wed, 16 Jul 2014 19:22:34 +0200 Subject: [PATCH 007/929] Fix some gq bugs when tw was set --- indent/javascript.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f1bc70dd..42682e9b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -442,6 +442,10 @@ unlet s:cpo_save function! Fixedgq(lnum, count) let l:count = a:count + if mode() == 'i' " gq was not pressed, but tw was set + return 1 + endif + if len(getline(a:lnum)) < 80 && l:count == 1 " No need for gq return 1 endif @@ -468,7 +472,7 @@ function! Fixedgq(lnum, count) endif " Try breaking after string - if breakpoint[1] == indent(a:lnum) + if breakpoint[1] <= indent(a:lnum) call cursor(a:lnum, 81) let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) endif From 18106a3db0ce01b74c9b65b30870af2f04e20beb Mon Sep 17 00:00:00 2001 From: Quinn Strahl Date: Thu, 14 Aug 2014 14:39:25 -0400 Subject: [PATCH 008/929] Use &tw instead of hard-coded 80 for formatting --- indent/javascript.vim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 42682e9b..c4d24a43 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -440,13 +440,15 @@ let &cpo = s:cpo_save unlet s:cpo_save function! Fixedgq(lnum, count) + let l:tw = &tw ? &tw : 72; + let l:count = a:count if mode() == 'i' " gq was not pressed, but tw was set return 1 endif - if len(getline(a:lnum)) < 80 && l:count == 1 " No need for gq + if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq return 1 endif @@ -460,9 +462,9 @@ function! Fixedgq(lnum, count) let l:winview = winsaveview() - call cursor(a:lnum, 81) + call cursor(a:lnum, l:tw + 1) let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) - call cursor(a:lnum, 81) + call cursor(a:lnum, l:tw + 1) let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) " No need for special treatment, normal gq handles edgecases better @@ -473,7 +475,7 @@ function! Fixedgq(lnum, count) " Try breaking after string if breakpoint[1] <= indent(a:lnum) - call cursor(a:lnum, 81) + call cursor(a:lnum, l:tw + 1) let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) endif From 51a337b77335aae369b194076d9eb2a2990eba2b Mon Sep 17 00:00:00 2001 From: Quinn Strahl Date: Thu, 14 Aug 2014 14:53:37 -0400 Subject: [PATCH 009/929] Use a default &tw of 80 for formatting --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c4d24a43..5cde88d1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -440,7 +440,7 @@ let &cpo = s:cpo_save unlet s:cpo_save function! Fixedgq(lnum, count) - let l:tw = &tw ? &tw : 72; + let l:tw = &tw ? &tw : 80; let l:count = a:count From 057ed8049c2bf81502f9da8e264ad5ea2f01f3bf Mon Sep 17 00:00:00 2001 From: Jed Borovik Date: Sat, 20 Sep 2014 22:48:04 -0700 Subject: [PATCH 010/929] Add @api annotation --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 427b71f3..dfec8071 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -56,7 +56,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocComment matchgroup=jsComment start="/\*\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - syntax match jsDocTags contained "@\(alias\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param syntax match jsDocTags contained "@\(arg\|argument\|param\|property\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param From 9b8524865e024f8c816f918296af3c413aca03e1 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Thu, 9 Oct 2014 22:25:08 -0700 Subject: [PATCH 011/929] regexp: prevent ")" inside character class from terminating group /([)])/ is currently not handled correctly: the first ")" mistakenly terminates the jsRegexpGroup and consequently the jsRegexpCharClass, since the former contains the latter. This commit adds a skip pattern to prevent a ")" character inside a character class from terminating a jsRegexpGroup. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 427b71f3..2aac3043 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -92,7 +92,7 @@ syntax match jsRegexpQuantifier "\v\\@]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity From 86e376c62495e7644a886b36c0763de69369a902 Mon Sep 17 00:00:00 2001 From: Quinn Strahl Date: Mon, 24 Nov 2014 10:13:02 -0500 Subject: [PATCH 012/929] Make strings EOL-terminated --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 2aac3043..754dbbfe 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -82,9 +82,9 @@ syntax case match syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained syntax match jsTemplateVar "\${.\{-}}" contained -syntax region jsStringD start=+"+ skip=+\\\\\|\\$"+ end=+"+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsStringS start=+'+ skip=+\\\\\|\\$'+ end=+'+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\\\|\\$`+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsStringD start=+"+ skip=+\\\\"\|\\$+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsStringS start=+'+ skip=+\\\\'\|\\$+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsTemplateString start=+`+ skip=+\\\\`\|\\$+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained From dc8b363b9b194037bf46a8278280f8a502804b06 Mon Sep 17 00:00:00 2001 From: Quinn Strahl Date: Mon, 24 Nov 2014 16:13:48 -0500 Subject: [PATCH 013/929] Simplify string skip pattern --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 754dbbfe..beb6b527 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -82,9 +82,9 @@ syntax case match syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained syntax match jsTemplateVar "\${.\{-}}" contained -syntax region jsStringD start=+"+ skip=+\\\\"\|\\$+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsStringS start=+'+ skip=+\\\\'\|\\$+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\\`\|\\$+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained From 5d204c996f04256b302fd48769e28b4e792bb9d3 Mon Sep 17 00:00:00 2001 From: Bastian Winkler Date: Mon, 1 Dec 2014 13:12:36 +0100 Subject: [PATCH 014/929] Add syntax support for ES6 generators --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index beb6b527..ff4d1f80 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -194,8 +194,9 @@ if main_syntax == "javascript" syntax sync match jsHighlight grouphere jsBlock /{/ endif -exe 'syntax match jsFunction /\/ nextgroup=jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' @@ -250,6 +251,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsKeyword Keyword HiLink jsArrowFunction Type HiLink jsFunction Type + HiLink jsGenerator jsFunction HiLink jsFuncName Function HiLink jsArgsObj Special HiLink jsError Error From e84c352a5aa6347ea913e70b157ba47b32ffa13a Mon Sep 17 00:00:00 2001 From: crusoexia Date: Sat, 6 Dec 2014 10:28:34 +0800 Subject: [PATCH 015/929] add js assignment expression and relate identifier match syntax --- syntax/javascript.vim | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index beb6b527..81fa234d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -97,8 +97,14 @@ syntax region jsRegexpString start=+\(\(\(return\|case\)\s\+\)\@<=\|\(\([)\] syntax match jsNumber /\<-\=\d\+L\=\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ -syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\)\@=/ contains=jsFunctionKey contained -syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\s*function\s*\)\@=/ contained +syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained +syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained + +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis +syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained +syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis contained +syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained +syntax match jsFuncAssignIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') exe 'syntax keyword jsReturn return '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') @@ -174,7 +180,7 @@ endif "DOM/HTML/CSS "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS +syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold From 063e7a0f61970847b64533b5fc1036b53310fca2 Mon Sep 17 00:00:00 2001 From: David Chambers Date: Sun, 7 Dec 2014 22:03:38 -0800 Subject: [PATCH 016/929] number: match literals such as 1e-3 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ff4d1f80..f63abc39 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -94,7 +94,7 @@ syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ +syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\(\s*:\)\@=/ contains=jsFunctionKey contained From 8f0bc59dd7732b49bd21181aa353b915dc57e034 Mon Sep 17 00:00:00 2001 From: Ryan McIntyre Date: Mon, 8 Dec 2014 21:05:52 -0500 Subject: [PATCH 017/929] modified jsDocParam to highlight jsdoc optional parameter and default value --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index beb6b527..c6bb6902 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -70,7 +70,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\"\|{\|}\|\w\|\.\|:\|\/\)\+" + syntax match jsDocParam contained "\%(#\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From 54481c98e56cee66b9cf1524341a85f8bf3ba14d Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 19 Dec 2014 13:35:39 -0800 Subject: [PATCH 018/929] Added jsNoise matching to jsAssignmentExpr --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0ab714b6..3ff4a10c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -100,7 +100,7 @@ syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+- syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis contained syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained From 75d9087840101230af0aee67765b52af006400ac Mon Sep 17 00:00:00 2001 From: Jelte Fennema Date: Thu, 8 Jan 2015 12:35:15 +0100 Subject: [PATCH 019/929] Disable custom gq for comments --- indent/javascript.vim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5cde88d1..d483409e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -443,11 +443,17 @@ function! Fixedgq(lnum, count) let l:tw = &tw ? &tw : 80; let l:count = a:count + let l:first_char = indent(a:lnum) + 1 if mode() == 'i' " gq was not pressed, but tw was set return 1 endif + " This gq is only meant to do code with strings, not comments + if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char) + return 1 + endif + if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq return 1 endif From ead4c2ca335518a6c2bc06e010afb44680d91d41 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 8 Jan 2015 11:52:49 -0800 Subject: [PATCH 020/929] Updated README to properly reflect Vundle's API --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 83dcdf47..0718620c 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,12 @@ then simply perform the following commands to fix your current buffer: Add to vimrc: - Bundle "pangloss/vim-javascript" + Plugin "pangloss/vim-javascript" And install it: :so ~/.vimrc - :BundleInstall + :PluginInstall ### Install with [pathogen](https://github.com/tpope/vim-pathogen) From 29c2875e6e82e469afcf33352ba321d351acd3e6 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 15 Jan 2015 13:36:41 -0800 Subject: [PATCH 021/929] Renamed and fixed block comments --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0ef56cbc..c8e02b09 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -53,7 +53,7 @@ if !exists("javascript_ignore_javaScriptdoc") "syntax include @javaHtml :p:h/html.vim "unlet b:current_syntax - syntax region jsDocComment matchgroup=jsComment start="/\*\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold + syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite @@ -180,7 +180,7 @@ endif "DOM/HTML/CSS "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsDocComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -225,7 +225,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsComment Comment HiLink jsLineComment Comment HiLink jsEnvComment PreProc - HiLink jsDocComment Comment + HiLink jsBlockComment Comment HiLink jsCommentTodo Todo HiLink jsCvsTag Function HiLink jsDocTags Special From 1ee35c5d5dd96675ffcea5659b6ce44cd8e4db56 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 15 Jan 2015 13:59:41 -0800 Subject: [PATCH 022/929] Alignment fixes and removal of deprecated comments --- syntax/javascript.vim | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index c8e02b09..4300ddb7 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -79,26 +79,26 @@ endif "" JSDoc end syntax case match "" Syntax in the JavaScript code -syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ -syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax match jsTemplateVar "\${.\{-}}" contained -syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained +syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ +syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained +syntax match jsTemplateVar "\${.\{-}}" contained +syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained -syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained +syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained syntax match jsRegexpQuantifier "\v\\@]" contained -syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ -syntax keyword jsNumber Infinity -syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ -syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained -syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained +syntax match jsRegexpOr "\v\<@!\|" contained +syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained +syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod +syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ +syntax keyword jsNumber Infinity +syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ +syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained +syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained @@ -304,10 +304,9 @@ if version >= 508 || !exists("did_javascript_syn_inits") endif " Define the htmlJavaScript for HTML syntax html.vim -"syntax clear htmlJavaScript -"syntax clear jsExpression syntax cluster htmlJavaScript contains=@jsAll,jsBracket,jsParen,jsBlock syntax cluster javaScriptExpression contains=@jsAll,jsBracket,jsParen,jsBlock,@htmlPreproc + " Vim's default html.vim highlights all javascript as 'Special' hi! def link javaScript NONE From 1769504fd3f9c53525dca17d9ad4f84159de8dff Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Tue, 20 Jan 2015 11:37:58 -0800 Subject: [PATCH 023/929] Adds es6 modules support and change class --- syntax/javascript.vim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4300ddb7..5b523e44 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -35,7 +35,7 @@ syntax keyword jsOperator delete instanceof typeof void new in syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax keyword jsCommonJS require module exports +syntax keyword jsModules import export default from as "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -118,7 +118,8 @@ syntax keyword jsStatement break continue with syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for syntax keyword jsLabel case default -syntax keyword jsKeyword yield import export default extends class +syntax keyword jsKeyword yield +syntax keyword jsClass extends class syntax keyword jsException try catch throw finally syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window @@ -180,7 +181,7 @@ endif "DOM/HTML/CSS "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsModules syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -267,6 +268,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsParensErrC Error HiLink jsOperator Operator HiLink jsStorageClass StorageClass + HiLink jsClass Structure HiLink jsThis Special HiLink jsNan Number HiLink jsNull Type @@ -287,7 +289,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsExceptions Special HiLink jsFutureKeys Special HiLink jsBuiltins Special - HiLink jsCommonJS Include + HiLink jsModules Include HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From c76ae11fb6fd39a881b05d331fc960375fd3f8cb Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 12:28:06 -0800 Subject: [PATCH 024/929] Better module support --- syntax/javascript.vim | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5b523e44..06b5b989 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -35,7 +35,11 @@ syntax keyword jsOperator delete instanceof typeof void new in syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax keyword jsModules import export default from as +syntax match jsModules /import\|export/ +syntax keyword jsModuleWords default from as contained + +syntax region jsModuleContainer start="\(import\|export\) \?" end="$" contains=jsModuleWords,jsStringS,jsStringD,jsTemplateString,jsModules,jsArrowFunction,jsClass,jsFunction,jsStorageClass,jsOperator + "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -84,7 +88,7 @@ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" c syntax match jsTemplateVar "\${.\{-}}" contained syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`\|$+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained @@ -179,9 +183,8 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things - "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsModules +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsModuleContainer syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -290,6 +293,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFutureKeys Special HiLink jsBuiltins Special HiLink jsModules Include + HiLink jsModuleWords Include HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From fcf7a26b33c5c164c9b8b868cb86c37d7d03f11c Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 12:41:53 -0800 Subject: [PATCH 025/929] More rigid syntax checking --- syntax/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 06b5b989..2e78296a 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -38,8 +38,9 @@ syntax keyword jsBooleanFalse false syntax match jsModules /import\|export/ syntax keyword jsModuleWords default from as contained -syntax region jsModuleContainer start="\(import\|export\) \?" end="$" contains=jsModuleWords,jsStringS,jsStringD,jsTemplateString,jsModules,jsArrowFunction,jsClass,jsFunction,jsStorageClass,jsOperator +syntax region jsImportContainer start="import \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsStringS,jsStringD,jsTemplateString +syntax region jsExportContainer start="export \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -184,7 +185,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsModuleContainer +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold From 97ff4e35c4d41e718037165eb2906cde4ca25e39 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 12:56:54 -0800 Subject: [PATCH 026/929] Removes static and super from reserved words --- README.md | 2 ++ syntax/javascript.vim | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0718620c..4f29b897 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,8 @@ variables: let g:javascript_conceal_undefined = "¿" let g:javascript_conceal_NaN = "ℕ" let g:javascript_conceal_prototype = "¶" + let g:javascript_conceal_static = "•" + let g:javascript_conceal_super = "Ω" ## Contributing diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 2e78296a..76bc9bf5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -117,6 +117,8 @@ exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefi exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') +exe 'syntax keyword jsStatic static '.(exists('g:javascript_conceal_static') ? 'conceal cchar='.g:javascript_conceal_static : '') +exe 'syntax keyword jsSuper super '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') "" Statement Keywords syntax keyword jsStatement break continue with @@ -134,7 +136,7 @@ syntax keyword jsExceptions Error EvalError InternalError RangeError Referen syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval -syntax keyword jsFutureKeys abstract enum int short boolean interface static byte long super char final native synchronized float package throws goto private transient debugger implements protected volatile double public +syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public "" DOM/HTML/CSS specified things @@ -185,7 +187,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -274,6 +276,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsStorageClass StorageClass HiLink jsClass Structure HiLink jsThis Special + HiLink jsStatic Special + HiLink jsSuper Special HiLink jsNan Number HiLink jsNull Type HiLink jsUndefined Type From f4c1c9cf87dc28f84682ee888400e31b3c15ba92 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 12:58:36 -0800 Subject: [PATCH 027/929] Fixes code whitespace issue --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 76bc9bf5..99502580 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -35,7 +35,7 @@ syntax keyword jsOperator delete instanceof typeof void new in syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax match jsModules /import\|export/ +syntax match jsModules /import\|export/ syntax keyword jsModuleWords default from as contained syntax region jsImportContainer start="import \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsStringS,jsStringD,jsTemplateString From 687a90049b7781cd0bf270573db7d8f529fe034f Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 12:59:42 -0800 Subject: [PATCH 028/929] Adds Symbol to global --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 99502580..e7aa4d5b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -129,7 +129,7 @@ syntax keyword jsKeyword yield syntax keyword jsClass extends class syntax keyword jsException try catch throw finally -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From 8dbf2245629be2bc314a91e4acfdee0e25ec6fcf Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 13:00:25 -0800 Subject: [PATCH 029/929] Adds Map, WeakMap, and Set --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index e7aa4d5b..6619b364 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -129,7 +129,7 @@ syntax keyword jsKeyword yield syntax keyword jsClass extends class syntax keyword jsException try catch throw finally -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From bed1189698f62712db2d5a1eb7ac9cc594477833 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 13:44:59 -0800 Subject: [PATCH 030/929] Adds tagged templates --- syntax/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6619b364..2f1a9ebb 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -89,7 +89,8 @@ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" c syntax match jsTemplateVar "\${.\{-}}" contained syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsTaggedTemplate start=/\k\+\(\n\|\s\)\?`/ end=+`\|$+ contains=jsTemplateString syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained @@ -187,7 +188,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -243,6 +244,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsStringS String HiLink jsStringD String HiLink jsTemplateString String + HiLink jsTaggedTemplate StorageClass HiLink jsTernaryIfOperator Conditional HiLink jsRegexpString String HiLink jsRegexpBoundary SpecialChar From 2a037505ffcf923ae7ebc4e97ede37b2e82648ca Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 13:45:25 -0800 Subject: [PATCH 031/929] Adds Promise to globals --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 2f1a9ebb..a6f277de 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -130,7 +130,7 @@ syntax keyword jsKeyword yield syntax keyword jsClass extends class syntax keyword jsException try catch throw finally -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From b3c811bc5ed9e00b03d6c5e02133c96f4e5b203e Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 14:00:02 -0800 Subject: [PATCH 032/929] Adds of operator --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a6f277de..da2c2d75 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -37,6 +37,7 @@ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false syntax match jsModules /import\|export/ syntax keyword jsModuleWords default from as contained +syntax keyword jsOf of contained syntax region jsImportContainer start="import \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsStringS,jsStringD,jsTemplateString @@ -191,7 +192,7 @@ endif "DOM/HTML/CSS syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold +syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf @@ -275,6 +276,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsParensErrB Error HiLink jsParensErrC Error HiLink jsOperator Operator + HiLink jsOf Operator HiLink jsStorageClass StorageClass HiLink jsClass Structure HiLink jsThis Special From 6d167f10eb1c9aefea54951c26307612fc4da129 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 25 Jan 2015 14:13:23 -0800 Subject: [PATCH 033/929] Adds support for default arguments --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index da2c2d75..4dd5c8fb 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -213,7 +213,7 @@ exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsF syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ syntax keyword jsArgsObj arguments contained containedin=jsFuncBlock From 5fa60043d753388c18df34319ed5eb28a286964c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 25 Jan 2015 23:39:15 -0800 Subject: [PATCH 034/929] A fix for #212 --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d483409e..9a20c192 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -53,7 +53,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term From 7848de5df449ab9812461cd12f482783adb51ac6 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Mon, 26 Jan 2015 19:35:12 -0800 Subject: [PATCH 035/929] Fixes module syntax for common js --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4dd5c8fb..29ff8063 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -35,13 +35,13 @@ syntax keyword jsOperator delete instanceof typeof void new in syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax match jsModules /import\|export/ +syntax keyword jsModules import export contained syntax keyword jsModuleWords default from as contained syntax keyword jsOf of contained -syntax region jsImportContainer start="import \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsStringS,jsStringD,jsTemplateString +syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString -syntax region jsExportContainer start="export \?" end="$" contains=jsModuleWords,jsModules,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained From 2180f51d060a96b76389ad1a4efb3606c3f08e79 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Wed, 28 Jan 2015 01:13:08 -0800 Subject: [PATCH 036/929] Fixes tagged templates on multi lines --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4dd5c8fb..7481a566 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -91,7 +91,7 @@ syntax match jsTemplateVar "\${.\{-}}" contained syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsTaggedTemplate start=/\k\+\(\n\|\s\)\?`/ end=+`\|$+ contains=jsTemplateString +syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`\|$+ contains=jsTemplateString syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained From b022c816a513dd783c671dc86c97a9457705eb51 Mon Sep 17 00:00:00 2001 From: Daniel Sabelnikov Date: Thu, 29 Jan 2015 14:24:46 +0300 Subject: [PATCH 037/929] issue#34 --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9a20c192..0a2f839e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -49,11 +49,11 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term From 368bad6632a7d5c8f45c63df1975ec5faf2a418c Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Mon, 2 Feb 2015 15:33:42 -0800 Subject: [PATCH 038/929] Adds jsClass to all expressions --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index fb89f4b3..56c7422d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -189,7 +189,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold From e9709a9fb29ed0739eb244b5e70211c1ab647535 Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 8 Feb 2015 19:14:50 -0800 Subject: [PATCH 039/929] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f29b897..27cc1e1a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# vim-javascript v0.9.0 +# vim-javascript v0.10.0 JavaScript bundle for vim, this bundle provides syntax and indent plugins. From 6cad2d987a0b9a2c41a035026673cb8d4db94e0e Mon Sep 17 00:00:00 2001 From: Josh Perez Date: Sun, 15 Feb 2015 17:42:41 -0800 Subject: [PATCH 040/929] Fixes #242 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 56c7422d..a2c49ab3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -91,7 +91,7 @@ syntax match jsTemplateVar "\${.\{-}}" contained syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`\|$+ contains=jsTemplateString +syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`+ contains=jsTemplateString keepend syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained From 3afb1731ab5708963da85c321406d8e6f7294a2b Mon Sep 17 00:00:00 2001 From: Jeroen van Baarsen Date: Thu, 5 Mar 2015 15:14:22 +0100 Subject: [PATCH 041/929] Vundle requires single quotes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 27cc1e1a..1cc50aee 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ then simply perform the following commands to fix your current buffer: Add to vimrc: - Plugin "pangloss/vim-javascript" + Plugin 'pangloss/vim-javascript' And install it: From b39a28f650b0c365a2d12590ae52d52f95f8c550 Mon Sep 17 00:00:00 2001 From: Pierre Ozoux Date: Thu, 26 Mar 2015 16:59:12 +0000 Subject: [PATCH 042/929] One liner for Pathogen --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 27cc1e1a..34145e4d 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,7 @@ And install it: ### Install with [pathogen](https://github.com/tpope/vim-pathogen) - cd ~/.vim/bundle - git clone https://github.com/pangloss/vim-javascript.git + git clone https://github.com/pangloss/vim-javascript.git ~/.vim/bundle/vim-javascript ## Configuration From 152e2e58a67c427bc7613ece02dfe86463ae6464 Mon Sep 17 00:00:00 2001 From: Joe Lencioni Date: Sun, 26 Apr 2015 07:43:43 -0700 Subject: [PATCH 043/929] Add `setlocal suffixesadd+=.js` to ftplugin This suffixesadd setting helps Vim understand text that references a path and does not contain the .js extension, as is often the case in CommonJS style require statements. This improves motions like `gf` and commands like `:find`. More information: http://usevim.com/2013/01/04/vim101-jumping/ --- ftplugin/javascript.vim | 1 + 1 file changed, 1 insertion(+) create mode 100644 ftplugin/javascript.vim diff --git a/ftplugin/javascript.vim b/ftplugin/javascript.vim new file mode 100644 index 00000000..9e2fc9b0 --- /dev/null +++ b/ftplugin/javascript.vim @@ -0,0 +1 @@ +setlocal suffixesadd+=.js From 8bd60a331642e1d71f5edcae05f0df55ae25c0de Mon Sep 17 00:00:00 2001 From: Joe Lencioni Date: Sun, 26 Apr 2015 10:43:59 -0700 Subject: [PATCH 044/929] Add `const` and `let` to indent file These keywords are part of ES6 and are used like the `var` keyword. This commit makes the indentation file treat them the same as `var`. --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0a2f839e..e30580c3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -29,7 +29,7 @@ set cpo&vim " 1. Variables {{{1 " ============ -let s:js_keywords = '^\s*\(break\|case\|catch\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' +let s:js_keywords = '^\s*\(break\|case\|catch\|const\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|regex\|comment\c' @@ -60,7 +60,7 @@ let s:one_line_scope_regex = '\<\%(if\|else\|for\|while\)\>[^{;]*' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term -let s:var_stmt = '^\s*var' +let s:var_stmt = '^\s*(const\|let\|var)' let s:comma_first = '^\s*,' let s:comma_last = ',\s*$' From 89ce201ec50381b7a11da7e6bb0089b81dadcf48 Mon Sep 17 00:00:00 2001 From: crusoexia Date: Thu, 28 May 2015 22:16:31 +0800 Subject: [PATCH 045/929] fix issue #107, makes 'arguments' become global keyword --- syntax/javascript.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a2c49ab3..7c719de4 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -38,10 +38,11 @@ syntax keyword jsBooleanFalse false syntax keyword jsModules import export contained syntax keyword jsModuleWords default from as contained syntax keyword jsOf of contained +syntax keyword jsArgsObj arguments syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -107,9 +108,9 @@ syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+ syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained -syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis contained +syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained syntax match jsFuncAssignIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained @@ -189,7 +190,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -216,7 +217,6 @@ syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ -syntax keyword jsArgsObj arguments contained containedin=jsFuncBlock syntax match jsArrowFunction /=>/ From 9564d9076b1a22b246a3a0c218788bdbed4d62c8 Mon Sep 17 00:00:00 2001 From: Alexander Skafte Date: Thu, 18 Jun 2015 20:54:46 +0200 Subject: [PATCH 046/929] Found a typo It shouldn't say "gackgroundPosition", right? --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 56c7422d..1efe8c68 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -175,7 +175,7 @@ if exists("javascript_enable_domhtmlcss") syntax keyword jsCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout syntax keyword jsCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop syntax keyword jsCssStyles contained listStyle listStyleImage listStylePosition listStyleType - syntax keyword jsCssStyles contained background backgroundAttachment backgroundColor backgroundImage gackgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat + syntax keyword jsCssStyles contained background backgroundAttachment backgroundColor backgroundImage backgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat syntax keyword jsCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType syntax keyword jsCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText syntax keyword jsCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor From bcf4bfee6c56990b3e435f41a88acd9f2227ce0e Mon Sep 17 00:00:00 2001 From: Gianni Chiappetta Date: Wed, 15 Jul 2015 13:29:06 -0400 Subject: [PATCH 047/929] Add jsNoise and jsBlock to jsImportContainer --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7c719de4..1ad89979 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -40,7 +40,7 @@ syntax keyword jsModuleWords default from as contained syntax keyword jsOf of contained syntax keyword jsArgsObj arguments -syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString +syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj From 139f6f6aed6aba06e6d2d1267abd968109518bef Mon Sep 17 00:00:00 2001 From: Chris Carpita Date: Wed, 15 Jul 2015 16:16:19 -0400 Subject: [PATCH 048/929] fix: export region should support es6 class and block openings Currently, the following syntax results in an error on the closing brace: ```js export default { } // <-- error here export default class Modules extends Base { } // <-- error here ``` This patch adds jsBlock to be included in a jsExportContainer region so that region matching will continue to the end of the class or block. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 1ad89979..1f3c6768 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -42,7 +42,7 @@ syntax keyword jsArgsObj arguments syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained From 325c0487f90707ef3e3669c1125779c7e5734037 Mon Sep 17 00:00:00 2001 From: Chris Carpita Date: Thu, 16 Jul 2015 23:27:02 -0400 Subject: [PATCH 049/929] fix GH-272: Highlight arrow funcs without parenthesized params Arrow expressions with "naked" single parameters are currently not being recognized as such, due to the mis-labeling of the expression as assignment. ```js // The part: `x =` looks like assignment to syntax rules: let myFunc = x => 3; ``` This change introduces a negative lookahead for the `>` character in the assignment matcher. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 1ad89979..b01b0881 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -108,7 +108,7 @@ syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+ syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained From a489b170684eaf5d0f5b5fa8ee0dc9a063297a79 Mon Sep 17 00:00:00 2001 From: Chris Carpita Date: Thu, 16 Jul 2015 23:45:32 -0400 Subject: [PATCH 050/929] fix GH-247: Single-line comments after import statement The single line comment in the following statement is currently no highlighted: ```js import Y from 'Y' // this should be a comment ``` This introduces jsLineComment as being containable in an import statement, and also closes the import statement on semicolon so that other expressions can be highlighted correctly. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 1ad89979..08bfd4c5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -40,7 +40,7 @@ syntax keyword jsModuleWords default from as contained syntax keyword jsOf of contained syntax keyword jsArgsObj arguments -syntax region jsImportContainer start="^\s\?import \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock +syntax region jsImportContainer start="^\s\?import \?" end="@\(;|$\)" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj From bf0858a188365839495bf2feed6212dc24a950e0 Mon Sep 17 00:00:00 2001 From: glortho Date: Fri, 17 Jul 2015 16:46:09 -0400 Subject: [PATCH 051/929] Adding support for ES7/ES2016 decorators --- syntax/javascript.vim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6867b120..5b29833f 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -107,6 +107,8 @@ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained +syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite +syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained @@ -190,7 +192,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -303,6 +305,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsBuiltins Special HiLink jsModules Include HiLink jsModuleWords Include + HiLink jsDecorator Special HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From dfc554e8aac36cd910947e1e69ac12d765157010 Mon Sep 17 00:00:00 2001 From: Chris Carpita Date: Tue, 21 Jul 2015 15:25:26 -0400 Subject: [PATCH 052/929] fix: import statement ending regex --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5b29833f..e157a44c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -40,7 +40,7 @@ syntax keyword jsModuleWords default from as contained syntax keyword jsOf of contained syntax keyword jsArgsObj arguments -syntax region jsImportContainer start="^\s\?import \?" end="@\(;|$\)" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock +syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock From 487e0c659bcb95f136012566242e527271fab12e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20LAJOIE?= Date: Tue, 3 Mar 2015 15:01:59 +0100 Subject: [PATCH 053/929] Manage case indent * Multi case * half indent for case * indent when typing : in case case is now use as a block delimiter Before: switch(name) { case 1: break; case 2: a = b; foo(); bar(); break; case 4: case 3: if (true) { foo(); } bar(); c = d; break; default: foo(); break; } After: switch(name) { case 1: break; case 2: a = b; foo(); bar(); break; case 4: case 3: if (true) { foo(); } bar(); c = d; break; default: foo(); break; } --- indent/javascript.vim | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e30580c3..20c84481 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -16,7 +16,7 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],0\,,!^F,o,O,e +setlocal indentkeys=0{,0},0),0],0\,:,!^F,o,O,e " Only define the function once. if exists("*GetJavascriptIndent") @@ -29,8 +29,8 @@ set cpo&vim " 1. Variables {{{1 " ============ -let s:js_keywords = '^\s*\(break\|case\|catch\|const\|continue\|debugger\|default\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' - +let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' +let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|regex\|comment\c' @@ -53,7 +53,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term @@ -300,6 +300,17 @@ function GetJavascriptIndent() " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) + if (line =~ s:expr_case) + if (getline(prevline) =~ s:expr_case) + return indent(prevline) + else + if (getline(prevline) =~ s:block_regex) + return indent(prevline) + &sw/2 + else + return indent(prevline) - &sw/2 + endif + endif + endif " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the " others we indent to the containing line's MSL's level. Return -1 if fail. @@ -342,6 +353,9 @@ function GetJavascriptIndent() if (getline(prevline) =~ s:comma_first) return indent(prevline) - &sw endif + if (getline(prevline) =~ s:expr_case) + return indent(prevline) + &sw/2 + endif if (line =~ s:ternary) if (getline(prevline) =~ s:ternary_q) @@ -385,15 +399,19 @@ function GetJavascriptIndent() return 0 endif - " Set up variables for current line. - let line = getline(lnum) - let ind = indent(lnum) " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) - return indent(s:GetMSL(lnum, 0)) + &sw + if (line =~ s:expr_case) + return indent(s:GetMSL(lnum, 0)) + &sw/2 + else + return indent(s:GetMSL(lnum, 0)) + &sw + endif endif + " Set up variables for current line. + let line = getline(lnum) + let ind = indent(lnum) " If the previous line contained an opening bracket, and we are still in it, " add indent depending on the bracket type. if line =~ '[[({]' From 5cbbdd4e514da3404c6b3596135fe1dc48c99222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20LAJOIE?= Date: Tue, 3 Mar 2015 21:05:05 +0100 Subject: [PATCH 054/929] Case indent: use cinoptions : and = values :N Place case labels N characters from the indent of the switch(). (default 'shiftwidth'). =N Place statements occurring after a case label N characters from the indent of the label. (default 'shiftwidth'). (Same as default cindent) --- indent/javascript.vim | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 20c84481..0f526db9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -68,6 +68,16 @@ let s:comma_last = ',\s*$' let s:ternary = '^\s\+[?|:]' let s:ternary_q = '^\s\+?' +let s:case_indent = &sw +let s:case_indent_after = &sw +let m = matchlist(&cinoptions, ':\(.\)') +if (len(m) > 2) + let s:case_indent = m[1] +endif +let m = matchlist(&cinoptions, '=\(.\)') +if (len(m) > 2) + let s:case_indent_after = m[1] +endif " 2. Auxiliary Functions {{{1 " ====================== @@ -305,9 +315,9 @@ function GetJavascriptIndent() return indent(prevline) else if (getline(prevline) =~ s:block_regex) - return indent(prevline) + &sw/2 + return indent(prevline) + s:case_indent else - return indent(prevline) - &sw/2 + return indent(prevline) - s:case_indent_after endif endif endif @@ -354,7 +364,7 @@ function GetJavascriptIndent() return indent(prevline) - &sw endif if (getline(prevline) =~ s:expr_case) - return indent(prevline) + &sw/2 + return indent(prevline) + s:case_indent_after endif if (line =~ s:ternary) From e9ee38953ea60455fc3db0c8c6dd35aa912ad78a Mon Sep 17 00:00:00 2001 From: Will Binns-Smith Date: Sat, 18 Jul 2015 23:28:09 -0700 Subject: [PATCH 055/929] Add support for async and await keywords --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5b29833f..0b03a493 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -133,6 +133,7 @@ syntax keyword jsLabel case default syntax keyword jsKeyword yield syntax keyword jsClass extends class syntax keyword jsException try catch throw finally +syntax keyword jsAsyncKeyword async await syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ @@ -192,7 +193,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator,jsAsyncKeyword syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -267,6 +268,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsStatement Statement HiLink jsException Exception HiLink jsKeyword Keyword + HiLink jsAsyncKeyword Keyword HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction From 131c2d364eac7a40630e7eadffe5e1f0b3559b50 Mon Sep 17 00:00:00 2001 From: Viacheslav Lotsmanov Date: Wed, 16 Sep 2015 12:07:49 +0300 Subject: [PATCH 056/929] Added jsdoc synonym @prop for @property --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 05f5fe34..d49cd027 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -65,7 +65,7 @@ if !exists("javascript_ignore_javaScriptdoc") " tags containing a param syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|param\|property\)\>" nextgroup=jsDocType skipwhite + syntax match jsDocTags contained "@\(arg\|argument\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite " tags containing references From 49d46bf9e9fac03ff760961a7c73265ddbbda476 Mon Sep 17 00:00:00 2001 From: Delapouite Date: Wed, 23 Sep 2015 20:07:06 +0200 Subject: [PATCH 057/929] feat(conceal): add arrow_function option --- README.md | 19 ++++++++++--------- syntax/javascript.vim | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 1cc50aee..797c89e4 100644 --- a/README.md +++ b/README.md @@ -67,15 +67,16 @@ Default Value: 0 You can customize concealing characters by defining one or more of the following variables: - let g:javascript_conceal_function = "ƒ" - let g:javascript_conceal_null = "ø" - let g:javascript_conceal_this = "@" - let g:javascript_conceal_return = "⇚" - let g:javascript_conceal_undefined = "¿" - let g:javascript_conceal_NaN = "ℕ" - let g:javascript_conceal_prototype = "¶" - let g:javascript_conceal_static = "•" - let g:javascript_conceal_super = "Ω" + let g:javascript_conceal_function = "ƒ" + let g:javascript_conceal_null = "ø" + let g:javascript_conceal_this = "@" + let g:javascript_conceal_return = "⇚" + let g:javascript_conceal_undefined = "¿" + let g:javascript_conceal_NaN = "ℕ" + let g:javascript_conceal_prototype = "¶" + let g:javascript_conceal_static = "•" + let g:javascript_conceal_super = "Ω" + let g:javascript_conceal_arrow_function = "⇒" ## Contributing diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..0b7fcd03 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -221,7 +221,7 @@ syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end= syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ -syntax match jsArrowFunction /=>/ +exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') " Define the default highlighting. " For version 5.7 and earlier: only when not done already From de7a60c5c803fb240610d6dc233ae13c61b30468 Mon Sep 17 00:00:00 2001 From: Vitor Cortez Date: Wed, 30 Sep 2015 23:38:41 -0300 Subject: [PATCH 058/929] Add dollar sign to jsDocParam matches --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..ae4b3d1a 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -77,7 +77,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" + syntax match jsDocParam contained "\%(#\|\$\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From 4c983baf28818fdf941faa73cab6e81d3f45d0a3 Mon Sep 17 00:00:00 2001 From: Simon Olofsson Date: Tue, 6 Oct 2015 11:58:51 +0200 Subject: [PATCH 059/929] Add common DOM Functions getElementById, getElementsByClassName, querySelector and querySelectorAll are often used Functions. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..a3086cb8 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -166,7 +166,7 @@ if exists("javascript_enable_domhtmlcss") " DOM2 things syntax match jsDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/ - syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementsByTagName\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite + syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementById\|getElementsByClassName\|getElementsByTagName\|querySelector\|querySelectorAll\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite " HTML things syntax match jsHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/ syntax match jsHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=jsParen skipwhite From 7b9e11ad89549f08e1c750fc46bff0a03f059d95 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Wed, 30 Dec 2015 16:43:57 -0800 Subject: [PATCH 060/929] Make arrow-functions one-liners Summary: This fixes the indentation for expression arrow functions that are continued on multiple lines. This does not affect the `FunctionBody` variant of arrow functions, which were already correct due to the opening brace. Resolves pangloss/vim-javascript#332. Test Plan: Type ```javascript const myNiftyArrowFunction = (foo, bar) => foo + bar; myNiftyArrowFunction(1, 2); ``` and note that it's indented correctly as you type. Then run `gg=G` and make sure that it stays indented correctly. Note also that the indentation of ```javascript const myFunctionBodiedArrowFunction = (foo, bar) => { doAThing(); return foo + bar; }; myFunctionBodiedArrowFunction(1, 2); ``` is still correct. --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0f526db9..6ce1db8f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -55,7 +55,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@[^{;]*' . s:line_term +let s:one_line_scope_regex = '\%(\<\%(if\|else\|for\|while\)\>\|=>\)[^{;]*' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From c024f95c08b9bbd897f082620ddd14fb9fe8eff1 Mon Sep 17 00:00:00 2001 From: William Chargin Date: Fri, 1 Jan 2016 15:52:13 -0800 Subject: [PATCH 061/929] Respect 'very-magic' in 'jsAssignmentExpr' regexp Summary: This regex was modified in 325c0487f90707ef3e3669c1125779c7e5734037, where the tokens `\(>\)\@!` were added. This was supposed to be a negative lookahead for a literal `>`. However, this didn't work because the regexp has the `\v` flag, so the regexp actually ended up matching nothing. Closes #333. Test Plan: Install the [gerw/vim-HiLinkTrace][HLT] plugin. Write `let x = 3` in a new JavaScript file. Place the cursor on the `x` and enter `:HLT`. Before the patch is applied, the `SynStack` and `HltTrace` fields of the message should be blank. Then, apply the patch, relaunch vim, and repeat the `HLT` command; the message should now contain `SynStack: jsAssignmentExpr->...`. [HLT]: https://github.com/gerw/vim-HiLinkTrace --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d49cd027..af2ee5ab 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -110,7 +110,7 @@ syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\(>\)\@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj +syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\>@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained From ca58cdddebf27d330eb0d27efa749fda7063cb68 Mon Sep 17 00:00:00 2001 From: Kevin Fahy Date: Fri, 8 Jan 2016 21:27:29 -0800 Subject: [PATCH 062/929] Fix nested template variable syntax highlighting Accept JS expressions in template variables so that their contents are highlighted normally. Change `jsTemplateVar` to a region rather than a match. Fixes #316 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 74fa7ffd..58aad0c5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -88,7 +88,7 @@ syntax case match "" Syntax in the JavaScript code syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax match jsTemplateVar "\${.\{-}}" contained +syntax region jsTemplateVar matchgroup=jsBraces start=+${+ end=+}+ contained contains=@jsExpression syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc From ee412e34c850e319171503142066bb75cab50964 Mon Sep 17 00:00:00 2001 From: James Whitney Date: Wed, 20 Jan 2016 01:21:53 +1100 Subject: [PATCH 063/929] Add jsComment to jsFuncArgs Fixes #297 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 74fa7ffd..b4e9b132 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -217,7 +217,7 @@ exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsF syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ From f41da19fc0b60ec578263392932b05fe0c618d3b Mon Sep 17 00:00:00 2001 From: James Whitney Date: Wed, 20 Jan 2016 08:56:19 +1100 Subject: [PATCH 064/929] Add jsLineComment to jsFuncArgs Fixes #297 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b4e9b132..4fa4906e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -217,7 +217,7 @@ exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsF syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ From 68290c3e7fdb1fe2e4874be2cd881457bdd320c8 Mon Sep 17 00:00:00 2001 From: Artem Baguinski Date: Tue, 26 Jan 2016 10:28:36 +0100 Subject: [PATCH 065/929] make the m variable script-local --- indent/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6ce1db8f..e1e1fc7e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -70,13 +70,13 @@ let s:ternary_q = '^\s\+?' let s:case_indent = &sw let s:case_indent_after = &sw -let m = matchlist(&cinoptions, ':\(.\)') -if (len(m) > 2) - let s:case_indent = m[1] +let s:m = matchlist(&cinoptions, ':\(.\)') +if (len(s:m) > 2) + let s:case_indent = s:m[1] endif -let m = matchlist(&cinoptions, '=\(.\)') -if (len(m) > 2) - let s:case_indent_after = m[1] +let s:m = matchlist(&cinoptions, '=\(.\)') +if (len(s:m) > 2) + let s:case_indent_after = s:m[1] endif " 2. Auxiliary Functions {{{1 " ====================== From 32137f1f0c228d25b45057bd4e0b7329ab181c0e Mon Sep 17 00:00:00 2001 From: Zheng Chaoping Date: Fri, 29 Jan 2016 23:07:52 +0800 Subject: [PATCH 066/929] Use shfitwidth() instead of &sw in indent/javascript.vim --- indent/javascript.vim | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e1e1fc7e..1aeeb89a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -26,6 +26,17 @@ endif let s:cpo_save = &cpo set cpo&vim +" Get shiftwidth value +if exists('*shiftwidth') + func s:sw() + return shiftwidth() + endfunc +else + func s:sw() + return &sw + endfunc +endif + " 1. Variables {{{1 " ============ @@ -68,8 +79,8 @@ let s:comma_last = ',\s*$' let s:ternary = '^\s\+[?|:]' let s:ternary_q = '^\s\+?' -let s:case_indent = &sw -let s:case_indent_after = &sw +let s:case_indent = s:sw() +let s:case_indent_after = s:sw() let s:m = matchlist(&cinoptions, ':\(.\)') if (len(s:m) > 2) let s:case_indent = s:m[1] @@ -201,9 +212,9 @@ function s:GetVarIndent(lnum) " if the previous line doesn't end in a comma, return to regular indent if (line !~ s:comma_last) - return indent(prev_lnum) - &sw + return indent(prev_lnum) - s:sw() else - return indent(lvar) + &sw + return indent(lvar) + s:sw() endif endif @@ -342,7 +353,7 @@ function GetJavascriptIndent() return indent(prevline) " otherwise we indent 1 level else - return indent(lvar) + &sw + return indent(lvar) + s:sw() endif endif endif @@ -361,7 +372,7 @@ function GetJavascriptIndent() " If the line is comma first, dedent 1 level if (getline(prevline) =~ s:comma_first) - return indent(prevline) - &sw + return indent(prevline) - s:sw() endif if (getline(prevline) =~ s:expr_case) return indent(prevline) + s:case_indent_after @@ -371,7 +382,7 @@ function GetJavascriptIndent() if (getline(prevline) =~ s:ternary_q) return indent(prevline) else - return indent(prevline) + &sw + return indent(prevline) + s:sw() endif endif @@ -413,9 +424,9 @@ function GetJavascriptIndent() " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) if (line =~ s:expr_case) - return indent(s:GetMSL(lnum, 0)) + &sw/2 + return indent(s:GetMSL(lnum, 0)) + s:sw()/2 else - return indent(s:GetMSL(lnum, 0)) + &sw + return indent(s:GetMSL(lnum, 0)) + s:sw() endif endif @@ -428,12 +439,12 @@ function GetJavascriptIndent() let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 if col('.') + 1 == col('$') - return ind + &sw + return ind + s:sw() else return virtcol('.') endif elseif counts[1] == '1' || counts[2] == '1' - return ind + &sw + return ind + s:sw() else call cursor(v:lnum, vcol) end @@ -443,18 +454,18 @@ function GetJavascriptIndent() " -------------------------- let ind_con = ind - let ind = s:IndentWithContinuation(lnum, ind_con, &sw) + let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) " }}}2 " " let ols = s:InOneLineScope(lnum) if ols > 0 - let ind = ind + &sw + let ind = ind + s:sw() else let ols = s:ExitingOneLineScope(lnum) while ols > 0 && ind > 0 - let ind = ind - &sw + let ind = ind - s:sw() let ols = s:InOneLineScope(ols - 1) endwhile endif From bc74a6fff6ab7d0b616bd7a361c06277a193172f Mon Sep 17 00:00:00 2001 From: Damion Vega Date: Sat, 13 Feb 2016 23:02:00 -0700 Subject: [PATCH 067/929] Added Buffer to jsGlobalObjects --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4fa4906e..20930a86 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -135,7 +135,7 @@ syntax keyword jsClass extends class syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From 62c15f60211b45d0ce0d9becf5ce4983aa5ddb62 Mon Sep 17 00:00:00 2001 From: Cameron Steffen Date: Mon, 7 Sep 2015 00:39:32 -0500 Subject: [PATCH 068/929] Issue #294 better one line scope --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1aeeb89a..a39e1335 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -66,7 +66,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@\|=>\)[^{;]*' . s:line_term +let s:one_line_scope_regex = '\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From fd99d77784979ce8097c3432cf838e7e3a47650c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 4 Mar 2016 17:11:14 -0800 Subject: [PATCH 069/929] Adding first pass at ES6 Class support --- syntax/javascript.vim | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dc6e5e0b..4305b13b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -42,7 +42,7 @@ syntax keyword jsArgsObj arguments syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -131,7 +131,6 @@ syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for syntax keyword jsLabel case default syntax keyword jsKeyword yield -syntax keyword jsClass extends class syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await @@ -193,12 +192,13 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass,jsArgsObj,jsDecorator,jsAsyncKeyword +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition contained fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -223,6 +223,10 @@ syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +syntax keyword jsClassKeywords extends class contained +syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty +syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n]*/ contains=jsClassKeywords nextgroup=jsClassBlock skipwhite skipempty + " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet @@ -282,7 +286,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsOperator Operator HiLink jsOf Operator HiLink jsStorageClass StorageClass - HiLink jsClass Structure + HiLink jsClassKeywords Structure HiLink jsThis Special HiLink jsStatic Special HiLink jsSuper Special @@ -299,6 +303,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsBraces Noise HiLink jsFuncBraces Noise HiLink jsFuncParens Noise + HiLink jsClassBraces Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsGlobalObjects Special @@ -320,6 +325,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsCssStyles Label + HiLink jsClassMethodDefinitions Type + delcommand HiLink endif From 995183bd1e39fe3b4094dd217470ce92cc183972 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 4 Mar 2016 19:52:27 -0800 Subject: [PATCH 070/929] ES6 Class Fixes * Added support for . within class definition and mapped to jsClassNoise * Linked jsClassNoise to Noise * Tweaked code/whitespace alignment of the jsClass* section --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4305b13b..3f2ef5be 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -224,8 +224,9 @@ syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax keyword jsClassKeywords extends class contained +syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n]*/ contains=jsClassKeywords nextgroup=jsClassBlock skipwhite skipempty +syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n.]*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -304,6 +305,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncBraces Noise HiLink jsFuncParens Noise HiLink jsClassBraces Noise + HiLink jsClassNoise Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsGlobalObjects Special From 43784bc2ac2729197fd14e3c79bdb53e11753f37 Mon Sep 17 00:00:00 2001 From: juneidy Date: Mon, 21 Dec 2015 08:48:17 +0800 Subject: [PATCH 071/929] Added jsduck documentation types Allowed single quote for param, misplaced localdoc Allowed dash for param --- syntax/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dc6e5e0b..5a6a8dd1 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -63,21 +63,21 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite + syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite " tags containing references syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" + syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\$\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" + syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From 5fea23eee943645dc648a98ae265ad209d5484ad Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 31 Mar 2016 21:59:50 -0700 Subject: [PATCH 072/929] fast attempt for issues with multiple declarations --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a39e1335..82cd621c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -64,7 +64,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@\|\<\%(if\|for\|while\)\>\s*(.*)\)' . s:line_term From a57c0a154960604e85f2ce53b0c5fc09b4433148 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:16:33 -0700 Subject: [PATCH 073/929] Higher specificity for jsTemplate braces --- syntax/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 18f8df97..4613136e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -88,7 +88,7 @@ syntax case match "" Syntax in the JavaScript code syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax region jsTemplateVar matchgroup=jsBraces start=+${+ end=+}+ contained contains=@jsExpression +syntax region jsTemplateVar matchgroup=jsTemplateBraces start=+${+ end=+}+ contained contains=@jsExpression syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc @@ -308,6 +308,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsClassNoise Noise HiLink jsSpecial Special HiLink jsTemplateVar Special + HiLink jsTemplateBraces jsBraces HiLink jsGlobalObjects Special HiLink jsExceptions Special HiLink jsFutureKeys Special From 73232334f004e21e556ff84041481722c0d2904a Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:50:52 -0700 Subject: [PATCH 074/929] Improvements to rest highlighting * Added higher specificity to the dots in the spread declaration --- syntax/javascript.vim | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4613136e..5bd26ccc 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -215,11 +215,12 @@ endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty -syntax match jsFuncArgCommas contained ',' -syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ +syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax match jsFuncArgCommas contained ',' +syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots +syntax match jsFuncArgRestDots contained /\.\.\./ exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') @@ -316,6 +317,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModules Include HiLink jsModuleWords Include HiLink jsDecorator Special + HiLink jsFuncArgRestDots Noise HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From c1ea11050a996d050fa0a2ef41419bac603b9007 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 16:53:50 -0700 Subject: [PATCH 075/929] Adding jsFuncBlock support --- syntax/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5bd26ccc..dfbb261f 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -198,7 +198,7 @@ syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contai syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition contained fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -214,6 +214,7 @@ if main_syntax == "javascript" endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite @@ -222,8 +223,6 @@ syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ -exe 'syntax match jsArrowFunction /=>/ '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') - syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty From ae177c45e0ec305b14a9cc93e508ca170c6dce00 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 18:01:36 -0700 Subject: [PATCH 076/929] First pass at handling lamba arguments --- syntax/javascript.vim | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dfbb261f..f6379319 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -192,7 +192,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold @@ -214,7 +214,7 @@ if main_syntax == "javascript" endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite @@ -223,6 +223,11 @@ syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ +" Matches a single keyword argument with no parens +syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +" Matches a series of arguments surrounded in parens +syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend + syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty From 91f860b1b038a9b501af31440d80a4ab183dc04b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 18:15:23 -0700 Subject: [PATCH 077/929] Linking jsArrowFuncArgs to jsFuncArgs --- syntax/javascript.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index f6379319..079fe3f5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -282,6 +282,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction + HiLink jsArrowFuncArgs jsFuncArgs HiLink jsFuncName Function HiLink jsArgsObj Special HiLink jsError Error From 82473d0d6e6455c9a9d93faff1a655d4ea173a35 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 19:38:07 -0700 Subject: [PATCH 078/929] Allow ... in arrow arguments definition --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 079fe3f5..2ba6dd74 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -226,7 +226,7 @@ syntax match jsFuncArgRestDots contained /\.\.\./ " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\|\.\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained From 6590bbcdf3e88eb3c8da32ab66f3baaffcbbf5ea Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 3 Apr 2016 20:18:41 -0700 Subject: [PATCH 079/929] Fix Generator definitions Tacking this on since it relates to ES6 functions. The generator astericks were breaking the highlighting of function arguments. This should fix generators --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 2ba6dd74..d696a0af 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -216,7 +216,7 @@ endif exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') -syntax match jsGenerator contained '\*' nextgroup=jsFuncName skipwhite +syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' From d8c18d9d3a6b40496791d41efb49a2b26856c21e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 4 Apr 2016 01:56:52 -0700 Subject: [PATCH 080/929] Fix Comment Regions Our comment detection was a bit buggy because we did not use the extend keyword. This meant that if the comment was contained within a region or a match of sorts, it would get pre-maturely ended by a containing group. Using the extend keyword means that it will override any containing parent matcher and still display a comment, which is how JS actually interprets the code. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d696a0af..21c33880 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -46,11 +46,11 @@ syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsM "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained -syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell +syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold syntax region jsCvsTag start="\$\cid:" end="\$" oneline contained -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold +syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend "" JSDoc / JSDoc Toolkit if !exists("javascript_ignore_javaScriptdoc") From 36f34b25d63211f1fab20c1f748a3dd070b4c270 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 4 Apr 2016 02:10:46 -0700 Subject: [PATCH 081/929] Improved function declaration destructuring This should vastly improve how destructuring is handled in function declarations. It is still far from perfect, and a major problem right now is how to support multiple lines in lambda functions --- syntax/javascript.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 21c33880..212d452d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -218,15 +218,16 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains= syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr,jsComment,jsLineComment nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ +syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\)/ extend " Matches a single keyword argument with no parens -syntax match jsArrowFuncArgs /\(\k\)\+\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /(\(\k\|,\|\s\|\n\|\.\)*)\s\+\(=>\)\@=/ skipwhite contains=jsFuncArgs extend +syntax match jsArrowFuncArgs /(\%(.\)*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained @@ -323,6 +324,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleWords Include HiLink jsDecorator Special HiLink jsFuncArgRestDots Noise + HiLink jsFuncArgDestructuring Noise HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From 113abc2678fe27d570990daac0c0c0d68a0efe8b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 5 Apr 2016 17:23:10 -0700 Subject: [PATCH 082/929] Fix jsBlock vs jsFuncBlock priority Since we had to remove the contained argument for jsFuncBlock, it caused false positives for object definitions at the top level of a file. I've made jsBlock a higher priorty than jsFuncBlock by placing jsBlock AFTER jsFuncBlock. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 212d452d..0fa7130d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -196,9 +196,9 @@ syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTa syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis From 293108695f704e70aeb86fb4d7596bce751c5701 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 9 Apr 2016 23:05:16 -0700 Subject: [PATCH 083/929] line following arrow indentation --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a39e1335..f3a567f0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -60,13 +60,13 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@].*,\)' . s:line_term " Regex that defines continuation lines. " TODO: this needs to deal with if ...: and so on let s:msl_regex = s:continuation_regex.'|'.s:expr_case -let s:one_line_scope_regex = '\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)' . s:line_term +let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)\|=>\)' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From f286f94dcdb62ce8e5264aff641e3abe275daab0 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 9 Apr 2016 14:34:23 -0700 Subject: [PATCH 084/929] Fix lambda definitions in class definitions --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0fa7130d..70b796fb 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -196,7 +196,7 @@ syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTa syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions contained fold +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf From 734cdfc04eddf77e2d37c4f7291defff6334198b Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 12 Apr 2016 11:02:15 -0700 Subject: [PATCH 085/929] Improve one line scope #293 this will detect the start and end parentheses,allowing statements with parentheses to come after the condition parens.This regex can detect with up to 4 levels of nesting. --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9ed79e4d..27249a8a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -66,7 +66,7 @@ let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@\|\<\%(if\|for\|while\)\>\s*(.*)\)\|=>\)' . s:line_term +let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*([^()]*)[^()]*\))[^()]*\))[^()]*\))\)\|=>\)' . s:line_term " Regex that defines blocks. let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term From f13009e4071c492f48fedc2afd9a07c046e17189 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 14 Apr 2016 14:57:40 -0700 Subject: [PATCH 086/929] Adding [ and ] to jsFuncArgDestructuring --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 70b796fb..b9f8fc98 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -222,7 +222,7 @@ syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ -syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\)/ extend +syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\|\[\|\]\)/ extend " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction From 17fa18caeaa0c0f7df33a3a77ead1afebb9b29c1 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 15 Apr 2016 19:32:22 -0700 Subject: [PATCH 087/929] simplifies the parentheses handling also a possible fix for the last example in #329 and #315 --- indent/javascript.vim | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9ed79e4d..217bf3bb 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -69,9 +69,9 @@ let s:msl_regex = s:continuation_regex.'\|'.s:expr_case let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)\|=>\)' . s:line_term " Regex that defines blocks. -let s:block_regex = '\%([{[]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term +let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term -let s:var_stmt = '^\s*(const\|let\|var)' +let s:var_stmt = '^\s*\%(const\|let\|var\)' let s:comma_first = '^\s*,' let s:comma_last = ',\s*$' @@ -240,7 +240,7 @@ function s:LineHasOpeningBrackets(lnum) endif let pos = match(line, '[][(){}]', pos + 1) endwhile - return (open_0 > 0) . (open_2 > 0) . (open_4 > 0) + return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0) . (open_4 > 0) endfunction function s:Match(lnum, regex) @@ -448,7 +448,19 @@ function GetJavascriptIndent() else call cursor(v:lnum, vcol) end - endif + elseif line =~ ')' || line =~ s:comma_last + let counts = s:LineHasOpeningBrackets(lnum) + if counts[0] == '2' + call cursor(lnum, 1) + " Search for the opening tag + let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) + if mnum > 0 + return indent(s:GetMSL(mnum, 0)) + end + elseif line !~ s:var_stmt + return indent(prevline) + end + end " 3.4. Work on the MSL line. {{{2 " -------------------------- From 7d371ddeada2091a2bd32c0e1bb9e567731a8071 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 19 Apr 2016 12:44:08 -0700 Subject: [PATCH 088/929] Fixing comments in ES6 Class declarations --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b9f8fc98..6ff1a01c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -196,7 +196,7 @@ syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTa syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold -syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs contained fold +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf From 3208fc5d6ce9ae676cb0b97400a7b7a7efa9704b Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 19 Apr 2016 19:54:44 -0700 Subject: [PATCH 089/929] Operator first support,including ternary,dot etc. the previous pr is being difficult, sorry --- indent/javascript.vim | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 217bf3bb..71c08017 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,14 +71,13 @@ let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(.*)\)\| " Regex that defines blocks. let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term +let s:operator_first = '^\s*\%([-*/+.:?]\|||\|&&\)' + let s:var_stmt = '^\s*\%(const\|let\|var\)' let s:comma_first = '^\s*,' let s:comma_last = ',\s*$' -let s:ternary = '^\s\+[?|:]' -let s:ternary_q = '^\s\+?' - let s:case_indent = s:sw() let s:case_indent_after = s:sw() let s:m = matchlist(&cinoptions, ':\(.\)') @@ -378,13 +377,38 @@ function GetJavascriptIndent() return indent(prevline) + s:case_indent_after endif - if (line =~ s:ternary) - if (getline(prevline) =~ s:ternary_q) + " If line starts with an operator... + if (s:Match(v:lnum, s:operator_first)) + if (s:Match(prevline, s:operator_first)) + " and so does previous line, don't indent return indent(prevline) - else + end + let counts = s:LineHasOpeningBrackets(prevline) + if counts[0] == '2' + call cursor(prevline, 1) + " Search for the opening tag + let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) + if mnum > 0 && s:Match(mnum, s:operator_first) + return indent(mnum) + end + elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + " otherwise, indent 1 level return indent(prevline) + s:sw() - endif - endif + end + " If previous line starts with an operator... + elseif s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) + let counts = s:LineHasOpeningBrackets(prevline) + if counts[0] == '2' && counts[1] == '1' + call cursor(prevline, 1) + " Search for the opening tag + let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) + if mnum > 0 && !s:Match(mnum, s:operator_first) + return indent(mnum) + s:sw() + end + elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + return indent(prevline) - s:sw() + end + end " If we are in a multi-line comment, cindent does the right thing. if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) From 992b76dc5d1c21cc4689b7d069edaa4c077735fe Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 17 Apr 2016 21:11:27 -0700 Subject: [PATCH 090/929] Temporarily disabled jsArrowFuncArgs with parens This is until we can figure out how to properly match all the crazy use cases. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6ff1a01c..de7be809 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -227,7 +227,7 @@ syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\|\[\|\]\)/ e " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /(\%(.\)*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction +" syntax match jsArrowFuncArgs /(\%(.\)*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained From 16673accd3c491be227cb9e22a0fef33cc812521 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 20 Apr 2016 14:24:01 -0700 Subject: [PATCH 091/929] Adding a license note to the README I basically just copied what Tim Pope has done for his projects, an example can be seen here: https://github.com/tpope/vim-pathogen#license --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 797c89e4..1ad4078c 100644 --- a/README.md +++ b/README.md @@ -91,3 +91,7 @@ proposed change and how it is valuable. ## Bug report Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). + +## License + +Distributed under the same terms as Vim itself. See `:help license`. From 6cb0c96b66c1c2554ba0ebd8ead7f9ac938ce49a Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 20 Apr 2016 17:04:57 -0700 Subject: [PATCH 092/929] old changes reset --- indent/javascript.vim | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 82cd621c..c3d331ce 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -43,7 +43,10 @@ endif let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = 'string\|regex\|comment\c' +let s:syng_strcom = '\%(\%(template\)\@ Date: Thu, 21 Apr 2016 16:31:06 -0700 Subject: [PATCH 093/929] #324 This should work --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5dfdc6ca..05713a33 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -119,13 +119,13 @@ function s:PrevNonBlankNonString(lnum) " Go in and out of blocks comments as necessary. " If the line isn't empty (with opt. comment) or in a string, end search. let line = getline(lnum) - if line =~ '/\*' + if s:IsInMultilineComment(lnum, matchend(line, '/\*') - 1) if in_block let in_block = 0 else break endif - elseif !in_block && line =~ '\*/' + elseif !in_block && s:IsInMultilineComment(lnum, matchend(line, '\*/') - 1) let in_block = 1 elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) break From b9feef0864cfd77822ace829267b91c33df7c34f Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 17 Apr 2016 21:20:44 -0700 Subject: [PATCH 094/929] Improved lambda argument handling --- syntax/javascript.vim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index de7be809..d3af0a12 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -195,10 +195,10 @@ endif "DOM/HTML/CSS syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold +syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment contained fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold extend syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -213,21 +213,21 @@ if main_syntax == "javascript" syntax sync match jsHighlight grouphere jsBlock /{/ endif +syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ -syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|(\|)\|\[\|\]\)/ extend " Matches a single keyword argument with no parens -syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction +syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend " Matches a series of arguments surrounded in parens -" syntax match jsArrowFuncArgs /(\%(.\)*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction +syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained From a607a7d36012c16e45040f105fad2162b992a101 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 20 Apr 2016 18:59:41 -0700 Subject: [PATCH 095/929] spanning multiple lines detection In progress but here are the effects so far ``` if ( a == b && c == d && e == f || g == h || i == j ) { a = b + c - d; } ``` as opposed to this which would indent everything following it: ``` if ( a == b && c == d && e == f || g == h || i == j ) { a = b + c - d; } ``` --- indent/javascript.vim | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5dfdc6ca..ca0ded20 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -145,9 +145,21 @@ function s:GetMSL(lnum, in_one_line_scope) " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) let col = match(line, s:msl_regex) + 1 + let line2 = getline(msl) + let col2 = matchend(line2, ')') if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line)) let msl = lnum + + " if there are more closing brackets, continue from the line which has the matching opening bracket + elseif col2 > 0 && !s:IsInStringOrComment(msl, col2) && s:LineHasOpeningBrackets(msl)[0] == '2' + call cursor(msl, 1) + if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 + let lnum = line('.') + let msl = lnum + endif + else + " Don't use lines that are part of a one line scope as msl unless the " flag in_one_line_scope is set to 1 " @@ -158,7 +170,7 @@ function s:GetMSL(lnum, in_one_line_scope) if msl_one_line == 0 break endif - endif + end let lnum = s:PrevNonBlankNonString(lnum - 1) endwhile return msl @@ -396,7 +408,7 @@ function GetJavascriptIndent() return indent(prevline) + s:sw() end " If previous line starts with an operator... - elseif s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) + elseif s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) && !s:Match(prevline, '};\=' . s:line_term) let counts = s:LineHasOpeningBrackets(prevline) if counts[0] == '2' && counts[1] == '1' call cursor(prevline, 1) @@ -472,7 +484,14 @@ function GetJavascriptIndent() else call cursor(v:lnum, vcol) end - elseif line =~ ')' || line =~ s:comma_last + elseif line =~ '.\+};\=' . s:line_term + call cursor(lnum, 1) + " Search for the opening tag + let mnum = searchpair('{', '', '}', 'bW', s:skip_expr) + if mnum > 0 + return indent(s:GetMSL(mnum, 0)) + end + elseif line =~ '.\+);\=' || line =~ s:comma_last let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '2' call cursor(lnum, 1) @@ -481,7 +500,7 @@ function GetJavascriptIndent() if mnum > 0 return indent(s:GetMSL(mnum, 0)) end - elseif line !~ s:var_stmt + elseif line !~ s:var_stmt return indent(prevline) end end From 1da09b62272c3860c2a9119d5081041de034d381 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 22 Apr 2016 16:05:45 -0700 Subject: [PATCH 096/929] Move jsDocTag @file to a different jsDocTag group Apparently there is no `nextgroup` match for the @file type. Fixes #341 --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d3af0a12..4624c718 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -63,7 +63,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|file\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite " tags containing type and param syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite " tags containing type but no param @@ -71,7 +71,7 @@ if !exists("javascript_ignore_javaScriptdoc") " tags containing references syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" + syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite From af37b2253c975c6608992d3ece93b02314b604c5 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Apr 2016 09:44:06 -0700 Subject: [PATCH 097/929] [-+] not by another --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 2d7f3524..cadd33cf 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -63,7 +63,7 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*+/.:]\|\%(<%\)\@].*,\)' . s:line_term +let s:continuation_regex = '\%([\\*/.:]\|+\@].*,\)' . s:line_term " Regex that defines continuation lines. " TODO: this needs to deal with if ...: and so on @@ -74,7 +74,7 @@ let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^() " Regex that defines blocks. let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term -let s:operator_first = '^\s*\%([-*/+.:?]\|||\|&&\)' +let s:operator_first = '^\s*\%([*/.:?]\|\([-+]\)\1\@!\|||\|&&\)' let s:var_stmt = '^\s*\%(const\|let\|var\)' From f7cec8c79798e8d79f2bf95fe1a5f4eee44086bf Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 22:13:25 -0700 Subject: [PATCH 098/929] Fixing bizarre jsDocParam bug --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4624c718..10d15689 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -77,7 +77,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{\|}\|\w\|\.\|:\|\/\|\[\|]\|=\)\+" + syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags syntax case match From e74d7582248949f605af9098b90222d19d56b546 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 24 Apr 2016 12:13:21 -0700 Subject: [PATCH 099/929] Refactored README.md * De-prioritized the not on regexes * Added vim-plug installation instructions * Improved header hierarchy * Improved configuration variables documentation * Removed some deprecated instructions * Tweaks misc content --- README.md | 67 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 39 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 1ad4078c..f5459983 100644 --- a/README.md +++ b/README.md @@ -1,68 +1,64 @@ # vim-javascript v0.10.0 -JavaScript bundle for vim, this bundle provides syntax and indent plugins. +JavaScript bundle for vim, this bundle provides syntax highlighting and +improved indentation. -## A Quick Note on Regexes -Vim 7.4 was released recently, and unfortunately broke how this plugin -handles regexes. There was no real easy way for us to fix this unless we -completely rewrote how regexes work. +## Installation -Good News: There was a recent update to Vim 7.4 that fixes this issue. +### Install with [Vundle](https://github.com/gmarik/vundle) -Make sure you are at least using Vim 7.4, with patches 1-7. +Add to vimrc: -If you are stuck on an older version of Vim 7.4 with no way to update, -then simply perform the following commands to fix your current buffer: + Plugin 'pangloss/vim-javascript' -``` -:set regexpengine=1 -:syntax enable -``` +And install it: -## Installation + :so ~/.vimrc + :PluginInstall -### Install with [Vundle](https://github.com/gmarik/vundle) +### Install with [vim-plug](https://github.com/junegunn/vim-plug) Add to vimrc: - Plugin 'pangloss/vim-javascript' + Plug 'pangloss/vim-javascript' And install it: :so ~/.vimrc - :PluginInstall + :PlugInstall ### Install with [pathogen](https://github.com/tpope/vim-pathogen) cd ~/.vim/bundle git clone https://github.com/pangloss/vim-javascript.git -## Configuration + +## Configuration Variables The following variables control certain syntax highlighting features. You can add them to your `.vimrc` to enable/disable their features. -#### javascript_enable_domhtmlcss +``` +let g:javascript_enable_domhtmlcss = 1 +``` Enables HTML/CSS syntax highlighting in your JavaScript file. Default Value: 0 -#### b:javascript_fold +----------------- -Enables JavaScript code folding. - -Default Value: 1 - - -#### javascript_ignore_javaScriptdoc +``` +let g:javascript_ignore_javaScriptdoc = 1 +``` Disables JSDoc syntax highlighting Default Value: 0 -#### Concealing Characters + +## Concealing Characters You can customize concealing characters by defining one or more of the following variables: @@ -78,6 +74,7 @@ variables: let g:javascript_conceal_super = "Ω" let g:javascript_conceal_arrow_function = "⇒" + ## Contributing This project uses the [git @@ -88,10 +85,24 @@ the price of admission is 1 pull request. Please follow the general code style guides (read the code) and in your pull request explain the reason for the proposed change and how it is valuable. -## Bug report + +## Bug Reports Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). + +## A Quick Note on Regexes + +Vim 7.4 with patches LESS than 1-7 exhibits a bug that broke how we handle +javascript regexes. Please update to a newer version or run the following +commands to fix: + +``` +:set regexpengine=1 +:syntax enable +``` + + ## License Distributed under the same terms as Vim itself. See `:help license`. From 2f0b1d266f396aed09d06c87ec5533974d6e4994 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 24 Apr 2016 12:14:25 -0700 Subject: [PATCH 100/929] Removing deprecated folding logic b:javascript_fold is no longer used anymore. Folding is done through `set foldmethod=syntax` --- syntax/javascript.vim | 6 ------ 1 file changed, 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 10d15689..9a6933e3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -16,12 +16,6 @@ if !exists('g:javascript_conceal') let g:javascript_conceal = 0 endif -"" Drop fold if it is set but VIM doesn't support it. -let b:javascript_fold='true' -if version < 600 " Don't support the old version - unlet! b:javascript_fold -endif - "" dollar sign is permittd anywhere in an identifier setlocal iskeyword+=$ From 48067d6dc9eb2361b24d4fc3c3a4f87303c7c007 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 24 Apr 2016 12:16:38 -0700 Subject: [PATCH 101/929] Add code folding documentation --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index f5459983..617df9f1 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,17 @@ Disables JSDoc syntax highlighting Default Value: 0 +----------------- + +``` +set foldmethod=syntax +``` + +Enables code folding based on our syntax file. + +Please note this can have a dramatic effect on performance and because it is a +global vim option, we do not set it ourselves. + ## Concealing Characters From a51d0f3c4057bfd05c8695fdb5cfec79a0dfe9f5 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Apr 2016 13:00:38 -0700 Subject: [PATCH 102/929] Update javascript.vim https://github.com/pangloss/vim-javascript/pull/367#issuecomment-214022633 --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index cadd33cf..80778907 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -159,7 +159,7 @@ function s:GetMSL(lnum, in_one_line_scope) let msl = lnum " if there are more closing brackets, continue from the line which has the matching opening bracket - elseif col2 > 0 && !s:IsInStringOrComment(msl, col2) && s:LineHasOpeningBrackets(msl)[0] == '2' + elseif col2 > 0 && !s:IsInStringOrComment(msl, col2) && s:LineHasOpeningBrackets(msl)[0] == '2' && !a:in_one_line_scope call cursor(msl, 1) if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 let lnum = line('.') @@ -490,12 +490,12 @@ function GetJavascriptIndent() if line =~ '[[({]' let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 - if col('.') + 1 == col('$') + if col('.') + 1 == col('$') || line =~ s:one_line_scope_regex return ind + s:sw() else return virtcol('.') endif - elseif counts[1] == '1' || counts[2] == '1' + elseif counts[1] == '1' || counts[2] == '1' && counts[0] != '2' return ind + s:sw() else call cursor(v:lnum, vcol) From 1c75d8a3c61de3c97edae7070ba3656974600a34 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 24 Apr 2016 11:38:42 -0700 Subject: [PATCH 103/929] Fix JSDoc record matching This should fix #320 --- syntax/javascript.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 9a6933e3..ca615470 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -67,8 +67,10 @@ if !exists("javascript_ignore_javaScriptdoc") " other tags (no extra syntax) syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - syntax region jsDocType start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite + syntax region jsDocType matchgroup=jsDocTypeBrackets start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite + syntax region jsDocTypeRecord start=/{/ end=/}/ contained extend contains=jsDocTypeRecord + syntax region jsDocTypeRecord start=/\[/ end=/\]/ contained extend contains=jsDocTypeRecord syntax region jsDocTypeNoParam start="{" end="}" oneline contained syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" @@ -248,6 +250,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsDocTags Special HiLink jsDocSeeTag Function HiLink jsDocType Type + HiLink jsDocTypeBrackets jsDocType + HiLink jsDocTypeRecord jsDocType HiLink jsDocTypeNoParam Type HiLink jsDocParam Label HiLink jsStringS String From a7f221678a912ad44654b013770338dc80df7c16 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 18:12:34 -0700 Subject: [PATCH 104/929] Optimize JSNoise and JSOperator regexes Not using groups seems to help a bunch with performance --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ca615470..5635d11e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -21,12 +21,12 @@ setlocal iskeyword+=$ syntax sync fromstart -syntax match jsNoise /\%(:\|,\|\;\|\.\)/ +syntax match jsNoise /[:,\;\.]\{1}/ "" Program Keywords syntax keyword jsStorageClass const var let syntax keyword jsOperator delete instanceof typeof void new in -syntax match jsOperator /\(!\||\|&\|+\|-\|<\|>\|=\|%\|\/\|*\|\~\|\^\)/ +syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false syntax keyword jsModules import export contained From 01ecaf9ab2640e13e4708b00f9eb2173a18de712 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 18:14:02 -0700 Subject: [PATCH 105/929] Removing deprecated selectors I think these matchers where for functions, and from another era of project ownership. They added a TON of performance overhead, and I could never replicate a scenario where they matched. --- syntax/javascript.vim | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5635d11e..1ff8bda9 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -36,7 +36,7 @@ syntax keyword jsArgsObj arguments syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr,jsArgsObj,jsBlock,jsClassDefinition +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained @@ -106,12 +106,6 @@ syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite -syntax match jsAssignmentExpr /\v%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\>@!/ contains=jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise,jsArgsObj -syntax match jsAssignExpIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained -syntax match jsFuncAssignExpr /\v%(%([a-zA-Z_$]\k*\.)*[a-zA-Z_$]\k*\s*\=\s*){-1,}\ze%(function\s*\*?\s*\()/ contains=jsFuncAssignObjChain,jsFuncAssignIdent,jsFunction,jsPrototype,jsOperator,jsThis,jsArgsObj contained -syntax match jsFuncAssignObjChain /\v%([a-zA-Z_$]\k*\.)+/ contains=jsPrototype,jsNoise contained -syntax match jsFuncAssignIdent /\v[a-zA-Z_$]\k*\ze%(\s*\=)/ contained - exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') exe 'syntax keyword jsReturn return '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') @@ -188,7 +182,7 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend From f7d220719168fe0ca84eb9c9a3d77bdc50388584 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 18:16:50 -0700 Subject: [PATCH 106/929] Optimized jsGlobalObjects We had some special matching for Intl and certain submethods. It seems needless to do this for the following reasons: * The look behind added massive overhead (especially since the rule was not contained) * We never do any special matching for any other global objects, so why these? --- syntax/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 1ff8bda9..e9d4b986 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -124,8 +124,7 @@ syntax keyword jsKeyword yield syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window -syntax match jsGlobalObjects /\%(Intl\.\)\@<=\(Collator\|DateTimeFormat\|NumberFormat\)/ +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From 33eb9fe82ac16f8e9fe994224aeffc502e0cef41 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 18:18:14 -0700 Subject: [PATCH 107/929] Optimized jsArrowFuncArgs selector Shaved off some average time by removing the groups, which weren't really needed to begin with --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index e9d4b986..47f9483f 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -214,7 +214,7 @@ syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\)) syntax match jsFuncArgRestDots contained /\.\.\./ " Matches a single keyword argument with no parens -syntax match jsArrowFuncArgs /\(\k\)\+\s*\(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend +syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend " Matches a series of arguments surrounded in parens syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend From 508c1a337bc06556a9d425f77f86788f303195d3 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 18:20:01 -0700 Subject: [PATCH 108/929] Remove syntax sync clear The optimizations it provides really doesn't seem to help much and usually just results in weird syntax matching errors unless you run `syntax sync fromstart` --- syntax/javascript.vim | 6 ------ 1 file changed, 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 47f9483f..504c5594 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -196,12 +196,6 @@ syntax match jsParensErrA contained "\]" syntax match jsParensErrB contained ")" syntax match jsParensErrC contained "}" -if main_syntax == "javascript" - syntax sync clear - syntax sync ccomment jsComment minlines=200 - syntax sync match jsHighlight grouphere jsBlock /{/ -endif - syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') From 3a4991eaf5c52ea4d546402418a02a22ae60a0df Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 21:28:52 -0700 Subject: [PATCH 109/929] Improved jsTaggedTemplate performance Another match that turns up pretty high in the list of total time spent under `syntime` --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 504c5594..ea934452 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -88,7 +88,7 @@ syntax region jsTemplateVar matchgroup=jsTemplateBraces start=+${+ end=+}+ syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsTaggedTemplate start=/\k\+\(\(\n\|\s\)\+\)\?`/ end=+`+ contains=jsTemplateString keepend +syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString keepend syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained From 842b0ceaa87936c1eb449617e7045ad33b81854e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 21 Apr 2016 21:37:03 -0700 Subject: [PATCH 110/929] Improved performance of jsRegexpString --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ea934452..3d9ab190 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -97,7 +97,7 @@ syntax match jsRegexpOr "\v\<@!\|" contained syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ From c2bc4c70140ec761fe02c6b3a9a8370a182e931f Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 24 Apr 2016 14:18:56 -0700 Subject: [PATCH 111/929] Limiting jsRegexpString look behinds --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3d9ab190..3bdb39a6 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -97,7 +97,7 @@ syntax match jsRegexpOr "\v\<@!\|" contained syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ From 4b6f9c5d9d15deb12d14d85a155d73c9b7da6019 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 25 Apr 2016 11:48:35 -0700 Subject: [PATCH 112/929] Bumping version number to v1.0.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 617df9f1..fb5139c9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# vim-javascript v0.10.0 +# vim-javascript v1.0.0 JavaScript bundle for vim, this bundle provides syntax highlighting and improved indentation. From 105a4aadfebcefda2645e0eec079cde72479788b Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 25 Apr 2016 15:58:39 -0700 Subject: [PATCH 113/929] Switch mechanics, indent also now that I know about cindent i'm curious if there are other places like this to remove code and increase performance --- indent/javascript.vim | 38 ++++---------------------------------- 1 file changed, 4 insertions(+), 34 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 80778907..0e1c8e84 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -65,10 +65,6 @@ let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. let s:continuation_regex = '\%([\\*/.:]\|+\@].*,\)' . s:line_term -" Regex that defines continuation lines. -" TODO: this needs to deal with if ...: and so on -let s:msl_regex = s:continuation_regex.'\|'.s:expr_case - let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*([^()]*)[^()]*\))[^()]*\))[^()]*\))\)\|=>\)' . s:line_term " Regex that defines blocks. @@ -81,16 +77,6 @@ let s:var_stmt = '^\s*\%(const\|let\|var\)' let s:comma_first = '^\s*,' let s:comma_last = ',\s*$' -let s:case_indent = s:sw() -let s:case_indent_after = s:sw() -let s:m = matchlist(&cinoptions, ':\(.\)') -if (len(s:m) > 2) - let s:case_indent = s:m[1] -endif -let s:m = matchlist(&cinoptions, '=\(.\)') -if (len(s:m) > 2) - let s:case_indent_after = s:m[1] -endif " 2. Auxiliary Functions {{{1 " ====================== @@ -152,10 +138,10 @@ function s:GetMSL(lnum, in_one_line_scope) " If we have a continuation line, or we're in a string, use line as MSL. " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) - let col = match(line, s:msl_regex) + 1 + let col = match(line, s:continuation_regex) + 1 let line2 = getline(msl) let col2 = matchend(line2, ')') - if (col > 0 && !s:IsInStringOrComment(lnum, col)) || s:IsInString(lnum, strlen(line)) + if (col > 0 && !s:IsInStringOrComment(lnum, col) && !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) let msl = lnum " if there are more closing brackets, continue from the line which has the matching opening bracket @@ -327,7 +313,6 @@ endfunction function GetJavascriptIndent() " 3.1. Setup {{{2 " ---------- - " Set up variables for restoring position in file. Could use v:lnum here. let vcol = col('.') @@ -341,15 +326,7 @@ function GetJavascriptIndent() let prevline = prevnonblank(v:lnum - 1) if (line =~ s:expr_case) - if (getline(prevline) =~ s:expr_case) - return indent(prevline) - else - if (getline(prevline) =~ s:block_regex) - return indent(prevline) + s:case_indent - else - return indent(prevline) - s:case_indent_after - endif - endif + return cindent(v:lnum) endif " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the @@ -393,9 +370,6 @@ function GetJavascriptIndent() if (getline(prevline) =~ s:comma_first) return indent(prevline) - s:sw() endif - if (getline(prevline) =~ s:expr_case) - return indent(prevline) + s:case_indent_after - endif " If line starts with an operator... if (s:Match(v:lnum, s:operator_first)) @@ -475,11 +449,7 @@ function GetJavascriptIndent() " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) - if (line =~ s:expr_case) - return indent(s:GetMSL(lnum, 0)) + s:sw()/2 - else - return indent(s:GetMSL(lnum, 0)) + s:sw() - endif + return indent(s:GetMSL(lnum, 0)) + s:sw() endif " Set up variables for current line. From dde16a0564a78c58939721d7127e412f648a72da Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 26 Apr 2016 13:20:04 -0700 Subject: [PATCH 114/929] Fix class definitions with no name Fixes #401 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3bdb39a6..4ca08ecd 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -215,7 +215,7 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite conta syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /class [a-zA-Z_$][0-9a-zA-Z_$ \n.]*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty +syntax match jsClassDefinition /class\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " Define the default highlighting. " For version 5.7 and earlier: only when not done already From c4ccee6950c465d2a78c9f0b284a6ccf1b48a1a4 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 26 Apr 2016 21:27:06 -0700 Subject: [PATCH 115/929] Custom jsFuncName for object definitions This ES6 version of jsFuncName requires some special handling to not, by default, overwrite jsObjectKey and also not overwrite jsFuncCall. --- syntax/javascript.vim | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4ca08ecd..a49c31f0 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -185,9 +185,9 @@ syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTa syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend -syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment contained fold +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment,jsGenerator contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition fold extend +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition extend syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression,jsTernaryIf "" catch errors caused by wrong parenthesis @@ -200,8 +200,11 @@ syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') -syntax match jsGenerator contained '\*' nextgroup=jsFuncName,jsFuncArgs skipwhite -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite +syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs skipwhite skipempty +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty +" These versions of jsFuncName is for use in object declarations with no key +syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator +syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots From b4e2faecd485f078a03c4ecef405c548c0992018 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 27 Apr 2016 15:52:33 -0700 Subject: [PATCH 116/929] Update javascript.vim --- indent/javascript.vim | 53 +++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0e1c8e84..788d4753 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -360,7 +360,7 @@ function GetJavascriptIndent() if line[col-1]==')' && col('.') != col('$') - 1 let ind = virtcol('.')-1 else - let ind = indent(s:GetMSL(line('.'), 0)) + let ind = s:InMultiVarStatement(line('.')) ? indent(line('.')) : indent(s:GetMSL(line('.'), 0)) endif endif return ind @@ -369,7 +369,9 @@ function GetJavascriptIndent() " If the line is comma first, dedent 1 level if (getline(prevline) =~ s:comma_first) return indent(prevline) - s:sw() - endif + elseif getline(s:PrevNonBlankNonString(prevline - 1)) =~ '[])}]' . s:comma_last && getline(prevline) !~ s:comma_last && getline(prevline) !~ s:block_regex + return indent(prevline) - s:sw() + end " If line starts with an operator... if (s:Match(v:lnum, s:operator_first)) @@ -390,17 +392,26 @@ function GetJavascriptIndent() return indent(prevline) + s:sw() end " If previous line starts with an operator... - elseif s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) && !s:Match(prevline, '};\=' . s:line_term) + elseif (s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) && !s:Match(prevline, '};\=' . s:line_term)) || s:Match(prevline, ');\=' . s:line_term) let counts = s:LineHasOpeningBrackets(prevline) - if counts[0] == '2' && counts[1] == '1' + if counts[0] == '2' && !s:Match(prevline, s:operator_first) call cursor(prevline, 1) " Search for the opening tag let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) - if mnum > 0 && !s:Match(mnum, s:operator_first) - return indent(mnum) + s:sw() + if mnum > 0 && s:Match(mnum, s:operator_first) + return indent(mnum) - s:sw() + end + elseif s:Match(prevline, s:operator_first) + if counts[0] == '2' && counts[1] == '1' + call cursor(prevline, 1) + " Search for the opening tag + let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) + if mnum > 0 && !s:Match(mnum, s:operator_first) + return indent(mnum) + s:sw() + end + elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + return indent(prevline) - s:sw() end - elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' - return indent(prevline) - s:sw() end end @@ -449,7 +460,7 @@ function GetJavascriptIndent() " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) - return indent(s:GetMSL(lnum, 0)) + s:sw() + return s:InMultiVarStatement(lnum) ? indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw() endif " Set up variables for current line. @@ -457,7 +468,7 @@ function GetJavascriptIndent() let ind = indent(lnum) " If the previous line contained an opening bracket, and we are still in it, " add indent depending on the bracket type. - if line =~ '[[({]' + if line =~ '[[({})\]]' let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 if col('.') + 1 == col('$') || line =~ s:one_line_scope_regex @@ -465,29 +476,17 @@ function GetJavascriptIndent() else return virtcol('.') endif - elseif counts[1] == '1' || counts[2] == '1' && counts[0] != '2' - return ind + s:sw() - else - call cursor(v:lnum, vcol) - end - elseif line =~ '.\+};\=' . s:line_term - call cursor(lnum, 1) - " Search for the opening tag - let mnum = searchpair('{', '', '}', 'bW', s:skip_expr) - if mnum > 0 - return indent(s:GetMSL(mnum, 0)) - end - elseif line =~ '.\+);\=' || line =~ s:comma_last - let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '2' + elseif counts[0] == '2' call cursor(lnum, 1) " Search for the opening tag let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) if mnum > 0 return indent(s:GetMSL(mnum, 0)) end - elseif line !~ s:var_stmt - return indent(prevline) + elseif counts[1] == '1' || counts[2] == '1' && counts[0] != '2' + return ind + s:sw() + else + call cursor(v:lnum, vcol) end end From 50c433e8249bcd7a46ca57361dec7756b99c3de9 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 29 Apr 2016 11:21:09 -0700 Subject: [PATCH 117/929] Fix Issue 406 I am commenting this out since I am working through a better implementation. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a49c31f0..8ef89b0c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -203,8 +203,8 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains= syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs skipwhite skipempty syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty " These versions of jsFuncName is for use in object declarations with no key -syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator -syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator +" syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator +" syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots From d2fa17618209e051f9d3ea815c6dffd4fe9a221c Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 29 Apr 2016 18:15:46 -0700 Subject: [PATCH 118/929] multiline comment (#408) * Update javascript.vim * Update javascript.vim --- indent/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 788d4753..e8afa805 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -70,7 +70,7 @@ let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^() " Regex that defines blocks. let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term -let s:operator_first = '^\s*\%([*/.:?]\|\([-+]\)\1\@!\|||\|&&\)' +let s:operator_first = '^\s*\%([*.:?]\|\([/-+]\)\1\@!\|||\|&&\)' let s:var_stmt = '^\s*\%(const\|let\|var\)' @@ -325,6 +325,11 @@ function GetJavascriptIndent() " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) + " If we are in a multi-line comment, cindent does the right thing. + if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) + return cindent(v:lnum) + endif + if (line =~ s:expr_case) return cindent(v:lnum) endif @@ -423,11 +428,6 @@ function GetJavascriptIndent() return indent(prevline) - s:sw() endif - " If we are in a multi-line comment, cindent does the right thing. - if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) - return cindent(v:lnum) - endif - " Check for multiple var assignments " let var_indent = s:GetVarIndent(v:lnum) " if var_indent >= 0 From 617ccb50d644ad864421e471482219b4b380f5e2 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 29 Apr 2016 18:49:26 -0700 Subject: [PATCH 119/929] Update javascript.vim oh my --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e8afa805..cadf7ccc 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -70,7 +70,7 @@ let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^() " Regex that defines blocks. let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term -let s:operator_first = '^\s*\%([*.:?]\|\([/-+]\)\1\@!\|||\|&&\)' +let s:operator_first = '^\s*\%([*.:?]\|\([-/+]\)\1\@!\|||\|&&\)' let s:var_stmt = '^\s*\%(const\|let\|var\)' @@ -330,6 +330,7 @@ function GetJavascriptIndent() return cindent(v:lnum) endif + " cindent each line which has a switch label if (line =~ s:expr_case) return cindent(v:lnum) endif From 8fb5fa8c6352133229e0c8a63d277cf6fdd72baf Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 2 May 2016 10:05:33 -0700 Subject: [PATCH 120/929] parentheses regex is thankfully gone (#412) proper asi for control statements --- indent/javascript.vim | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index cadf7ccc..1f6a1759 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -65,7 +65,22 @@ let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. let s:continuation_regex = '\%([\\*/.:]\|+\@].*,\)' . s:line_term -let s:one_line_scope_regex = '\%(\%(\\|\<\%(if\|for\|while\)\>\s*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*(\%([^()]*\|[^()]*([^()]*)[^()]*\))[^()]*\))[^()]*\))\)\|=>\)' . s:line_term +let s:one_line_scope_regex = '\%(\\|=>\)' . s:line_term + +function s:Onescope(lnum) + if getline(a:lnum) =~ s:one_line_scope_regex + return 1 + end + let mypos = col('.') + call cursor(a:lnum, 1) + if search('\<\%(while\|for\|if\)\>\s*(', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') + 1 == col('$') + call cursor(a:lnum, mypos) + return 1 + else + call cursor(a:lnum, mypos) + return 0 + end +endfunction " Regex that defines blocks. let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term @@ -160,7 +175,7 @@ function s:GetMSL(lnum, in_one_line_scope) if a:in_one_line_scope break end - let msl_one_line = s:Match(lnum, s:one_line_scope_regex) + let msl_one_line = s:Onescope(lnum) if msl_one_line == 0 break endif @@ -285,7 +300,7 @@ endfunction function s:InOneLineScope(lnum) let msl = s:GetMSL(a:lnum, 1) - if msl > 0 && s:Match(msl, s:one_line_scope_regex) + if msl > 0 && s:Onescope(msl) return msl endif return 0 @@ -295,11 +310,11 @@ function s:ExitingOneLineScope(lnum) let msl = s:GetMSL(a:lnum, 1) if msl > 0 " if the current line is in a one line scope .. - if s:Match(msl, s:one_line_scope_regex) + if s:Onescope(msl) return 0 else let prev_msl = s:GetMSL(msl - 1, 1) - if s:Match(prev_msl, s:one_line_scope_regex) + if s:Onescope(prev_msl) return prev_msl endif endif @@ -472,7 +487,7 @@ function GetJavascriptIndent() if line =~ '[[({})\]]' let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 - if col('.') + 1 == col('$') || line =~ s:one_line_scope_regex + if col('.') + 1 == col('$') || s:Onescope(lnum) return ind + s:sw() else return virtcol('.') From 0fecb9295aa34d277a121d5915e3b94ac48d1f22 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 2 May 2016 11:45:29 -0700 Subject: [PATCH 121/929] Temporary fix for older versions of vim Will need to better fix this soon, just getting this hotfix out asap --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 8ef89b0c..775f1995 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -97,7 +97,7 @@ syntax match jsRegexpOr "\v\<@!\|" contained syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax region jsRegexpGroup start="\\\@\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ From 8f16491ac58e019d48063cfa78a1386372201f87 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 6 May 2016 20:59:39 -0700 Subject: [PATCH 122/929] indent following line ending in comma with arrow (#420) an example here : https://github.com/jason0x43/vim-js-indent/issues/4#issuecomment-207838966 --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1f6a1759..f55fe742 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -63,7 +63,7 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*/.:]\|+\@].*,\)' . s:line_term +let s:continuation_regex = '\%([\\*/.:]\|+\@.*\|=\)\@].*,\)' . s:line_term let s:one_line_scope_regex = '\%(\\|=>\)' . s:line_term From c9eda1f5c10ffb91484ebc3f8b42322daface234 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 6 May 2016 21:32:49 -0700 Subject: [PATCH 123/929] template fixes (#422) --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f55fe742..ec5853ea 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -43,7 +43,7 @@ endif let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(\%(template\)\@ Date: Sun, 8 May 2016 11:55:57 -0700 Subject: [PATCH 124/929] for better switch handling (#424) #423 --- indent/javascript.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec5853ea..9dde3526 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -17,6 +17,7 @@ setlocal nosmartindent setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,:,!^F,o,O,e +setlocal cinoptions+=j1,J1 " Only define the function once. if exists("*GetJavascriptIndent") From b3ebfa5d96a9776e92be704ec55b7be76c082870 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 8 May 2016 20:18:54 -0700 Subject: [PATCH 125/929] c style opening curly braces (#426) * c style opening curly braces #68 * Update javascript.vim --- indent/javascript.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9dde3526..e3693173 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -345,6 +345,11 @@ function GetJavascriptIndent() if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) return cindent(v:lnum) endif + + " single opening bracket will assume you want a c style of indenting + if s:Match(v:lnum, '^\s*{' . s:line_term) && s:GetMSL(v:lnum,0) == v:lnum + return cindent(v:lnum) + endif " cindent each line which has a switch label if (line =~ s:expr_case) From 7137e7eac1961f79b8063c49fe6957ae65456d9a Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 3 May 2016 16:05:52 -0700 Subject: [PATCH 126/929] Prevent limited lookbehinds in older vers of vim --- syntax/javascript.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 775f1995..57812317 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -97,7 +97,11 @@ syntax match jsRegexpOr "\v\<@!\|" contained syntax match jsRegexpMod "\v\(@<=\?[:=!>]" contained syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax region jsRegexpGroup start="\\\@ 703 || v:version == 603 && has("patch1088") + syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ From 61b89844d011fcd05028705364e7ab63525d4663 Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 9 May 2016 13:25:53 -0700 Subject: [PATCH 127/929] specify template as a string this doesn't change any behavior it is just for clarity --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e3693173..808bcb95 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -44,7 +44,7 @@ endif let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(string\|regex\|comment\)\c' +let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' " Regex of syntax group names that are or delimit template strings let s:syng_template = 'template\c' From a6e90baf0e4a53f9c30961f60f8bce406d6f48be Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 10 May 2016 14:05:08 -0700 Subject: [PATCH 128/929] minor changes (#429) * Update javascript.vim * 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 808bcb95..f1979fae 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -347,7 +347,7 @@ function GetJavascriptIndent() endif " single opening bracket will assume you want a c style of indenting - if s:Match(v:lnum, '^\s*{' . s:line_term) && s:GetMSL(v:lnum,0) == v:lnum + if s:Match(v:lnum, '^\s*{' . s:line_term) return cindent(v:lnum) endif From 206b85cfbe928697baa8a8562ca0384149dc70e0 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 11 May 2016 12:25:50 -0700 Subject: [PATCH 129/929] literal indentation in a multiline string (#430) --- indent/javascript.vim | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index f1979fae..9ccf59c7 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -340,6 +340,11 @@ function GetJavascriptIndent() let line = getline(v:lnum) " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) + + " to not change multiline string values + if (synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string' || s:IsInTempl(v:lnum, 1)) && line !~ '^\s*[''"`]' + return + endif " If we are in a multi-line comment, cindent does the right thing. if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) From dc117664c4de7c49ec427795dbd62538cd85a22b Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 11 May 2016 20:19:32 -0700 Subject: [PATCH 130/929] last actual column (#431) should be considered last non whitespace non comment --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9ccf59c7..5c774e4d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ function s:Onescope(lnum) end let mypos = col('.') call cursor(a:lnum, 1) - if search('\<\%(while\|for\|if\)\>\s*(', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') + 1 == col('$') + if search('\<\%(while\|for\|if\)\>\s*(', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) call cursor(a:lnum, mypos) return 1 else @@ -189,7 +189,7 @@ endfunction function s:RemoveTrailingComments(content) let single = '\/\/\(.*\)\s*$' let multi = '\/\*\(.*\)\*\/\s*$' - return substitute(substitute(a:content, single, '', ''), multi, '', '') + return substitute(substitute(substitute(a:content, single, '', ''), multi, '', ''), '\s\+$', '', '') endfunction " Find if the string is inside var statement (but not the first string) From fd98935f224dab93361216d513eb550ba602a31b Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 11 May 2016 21:11:42 -0700 Subject: [PATCH 131/929] more fixes (#432) also I'm removing all the template string indentation, will leave it as a comment if someone can justify actually changing a string --- indent/javascript.vim | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5c774e4d..bbd8dd98 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -291,9 +291,11 @@ function s:IndentWithContinuation(lnum, ind, width) if s:Match(lnum, s:continuation_regex) if lnum == p_lnum return msl_ind + a:width - else + elseif !s:InMultiVarStatement(a:lnum) return msl_ind - endif + else + return msl_ind - a:width + end endif return a:ind @@ -401,8 +403,12 @@ function GetJavascriptIndent() " If the line is comma first, dedent 1 level if (getline(prevline) =~ s:comma_first) return indent(prevline) - s:sw() - elseif getline(s:PrevNonBlankNonString(prevline - 1)) =~ '[])}]' . s:comma_last && getline(prevline) !~ s:comma_last && getline(prevline) !~ s:block_regex - return indent(prevline) - s:sw() + elseif getline(s:PrevNonBlankNonString(prevline - 1)) =~ '[])}]' . s:comma_last && getline(prevline) !~ s:block_regex + if getline(prevline) !~ s:comma_last + return indent(prevline) - s:sw() + else + return indent(prevline) + end end " If line starts with an operator... @@ -447,13 +453,13 @@ function GetJavascriptIndent() end end - if getline(prevline) =~ '^\s*`$' && s:IsInTempl(v:lnum, 1) - if line !~ '^\s*`$' - return indent(prevline) + s:sw() - endif - elseif line =~ '^\s*`$' && s:IsInTempl(prevline, 1) - return indent(prevline) - s:sw() - endif + " if getline(prevline) =~ '^\s*`$' && s:IsInTempl(v:lnum, 1) + " if line !~ '^\s*`$' + " return indent(prevline) + s:sw() + " endif + " elseif line =~ '^\s*`$' && s:IsInTempl(prevline, 1) + " return indent(prevline) - s:sw() + " endif " Check for multiple var assignments " let var_indent = s:GetVarIndent(v:lnum) From 75fcd09e7b8a0bd906c6006803912fec9136c019 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 11 May 2016 21:18:48 -0700 Subject: [PATCH 132/929] must actually return a number --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bbd8dd98..524331f9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -345,7 +345,7 @@ function GetJavascriptIndent() " to not change multiline string values if (synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string' || s:IsInTempl(v:lnum, 1)) && line !~ '^\s*[''"`]' - return + return indent(v:lnum) endif " If we are in a multi-line comment, cindent does the right thing. From 7c7add5fe62c701cd634eebbecdc5ccc13d60096 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 11 May 2016 23:11:27 -0700 Subject: [PATCH 133/929] my mistake should have said more bugs #432 --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 524331f9..d22b128c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -291,10 +291,10 @@ function s:IndentWithContinuation(lnum, ind, width) if s:Match(lnum, s:continuation_regex) if lnum == p_lnum return msl_ind + a:width - elseif !s:InMultiVarStatement(a:lnum) - return msl_ind - else + elseif s:InMultiVarStatement(lnum) return msl_ind - a:width + else + return msl_ind end endif From 3ebaef31a9cd19a9ed5639b284bad3177482c454 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 12 May 2016 15:36:56 -0700 Subject: [PATCH 134/929] slight changes continuing from before this should be working now --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d22b128c..900581ba 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -291,7 +291,7 @@ function s:IndentWithContinuation(lnum, ind, width) if s:Match(lnum, s:continuation_regex) if lnum == p_lnum return msl_ind + a:width - elseif s:InMultiVarStatement(lnum) + elseif s:InMultiVarStatement(lnum) && getline(lnum) =~ s:comma_last return msl_ind - a:width else return msl_ind From 04e412b77da3ae059bdf038e910bf36fca81a93b Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 12 May 2016 23:54:30 -0700 Subject: [PATCH 135/929] removing some clutter (#434) also added a modeline to fold away the gq code --- indent/javascript.vim | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 900581ba..533b5b3d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -46,9 +46,6 @@ let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' -" Regex of syntax group names that are or delimit template strings -let s:syng_template = 'template\c' - " Regex of syntax group names that are strings. let s:syng_string = 'regex\c' @@ -106,11 +103,6 @@ function s:IsInString(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string endfunction -" Check if the character at lnum:col is inside a template string. -function s:IsInTempl(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_template -endfunction - " Check if the character at lnum:col is inside a multi-line comment. function s:IsInMultilineComment(lnum, col) return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline @@ -137,7 +129,7 @@ function s:PrevNonBlankNonString(lnum) endif elseif !in_block && s:IsInMultilineComment(lnum, matchend(line, '\*/') - 1) let in_block = 1 - elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && !s:IsInTempl(lnum,1) && s:IsInStringOrComment(lnum, strlen(line))) + elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) break endif let lnum = prevnonblank(lnum - 1) @@ -329,12 +321,12 @@ endfunction " ========================= function GetJavascriptIndent() - " 3.1. Setup {{{2 + " 3.1. Setup {{{1 " ---------- " Set up variables for restoring position in file. Could use v:lnum here. let vcol = col('.') - " 3.2. Work on the current line {{{2 + " 3.2. Work on the current line {{{1 " ----------------------------- let ind = -1 @@ -344,7 +336,7 @@ function GetJavascriptIndent() let prevline = prevnonblank(v:lnum - 1) " to not change multiline string values - if (synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string' || s:IsInTempl(v:lnum, 1)) && line !~ '^\s*[''"`]' + if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' && line !~ '^\s*[''"`]' return indent(v:lnum) endif @@ -453,21 +445,13 @@ function GetJavascriptIndent() end end - " if getline(prevline) =~ '^\s*`$' && s:IsInTempl(v:lnum, 1) - " if line !~ '^\s*`$' - " return indent(prevline) + s:sw() - " endif - " elseif line =~ '^\s*`$' && s:IsInTempl(prevline, 1) - " return indent(prevline) - s:sw() - " endif - " Check for multiple var assignments " let var_indent = s:GetVarIndent(v:lnum) " if var_indent >= 0 " return var_indent " endif - " 3.3. Work on the previous line. {{{2 + " 3.3. Work on the previous line. {{{1 " ------------------------------- " If the line is empty and the previous nonblank line was a multi-line @@ -523,7 +507,7 @@ function GetJavascriptIndent() end end - " 3.4. Work on the MSL line. {{{2 + " 3.4. Work on the MSL line. {{{1 " -------------------------- let ind_con = ind @@ -550,7 +534,7 @@ endfunction let &cpo = s:cpo_save unlet s:cpo_save - +" gq{{{2 function! Fixedgq(lnum, count) let l:tw = &tw ? &tw : 80; @@ -611,3 +595,5 @@ function! Fixedgq(lnum, count) return 0 endfunction +"}}} +" vim: foldmethod=marker:foldlevel=1 From 2c70878710f46c12ab94c0df7217f0bf995acff8 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 17 May 2016 17:11:41 -0700 Subject: [PATCH 136/929] random fixes and improvements (#435) * random fixes and improvements this also removes the parentheses alignment, we can leave it in I suppose, but I'd like to revisit that later. if anyone objects please let me know.this needs to be cleaned up a bit before merging * Update javascript.vim * Update javascript.vim * Update javascript.vim --- indent/javascript.vim | 104 ++++++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 50 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 533b5b3d..fa2f8a87 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -41,8 +41,8 @@ endif " 1. Variables {{{1 " ============ -let s:js_keywords = '^\s*\(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)' -let s:expr_case = '^\s*\(case\s\+[^\:]*\|default\)\s*:\s*' +let s:js_keywords = '^\s*\%(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' +let s:expr_case = '^\s*\%(case\s\+[^\:]*\|default\)\s*:\s*\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' @@ -61,9 +61,9 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*/.:]\|+\@.*\|=\)\@].*,\)' . s:line_term +let s:continuation_regex = '\%([\\*/.?:]\|+\@.*\)\@],\)' . s:line_term -let s:one_line_scope_regex = '\%(\\|=>\)' . s:line_term +let s:one_line_scope_regex = '\%(\\|=>\)\C' . s:line_term function s:Onescope(lnum) if getline(a:lnum) =~ s:one_line_scope_regex @@ -71,7 +71,7 @@ function s:Onescope(lnum) end let mypos = col('.') call cursor(a:lnum, 1) - if search('\<\%(while\|for\|if\)\>\s*(', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) + if search('\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) call cursor(a:lnum, mypos) return 1 else @@ -85,10 +85,10 @@ let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\) let s:operator_first = '^\s*\%([*.:?]\|\([-/+]\)\1\@!\|||\|&&\)' -let s:var_stmt = '^\s*\%(const\|let\|var\)' +let s:var_stmt = '^\s*\%(const\|let\|var\)\s\+\C' let s:comma_first = '^\s*,' -let s:comma_last = ',\s*$' +let s:comma_last = ',' . s:line_term " 2. Auxiliary Functions {{{1 " ====================== @@ -185,28 +185,35 @@ function s:RemoveTrailingComments(content) endfunction " Find if the string is inside var statement (but not the first string) -function s:InMultiVarStatement(lnum) +function s:InMultiVarStatement(lnum, cont, prev) let lnum = s:PrevNonBlankNonString(a:lnum - 1) -" let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') + " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') " loop through previous expressions to find a var statement - while lnum > 0 + while lnum > 0 && (s:Match(lnum, s:comma_last) || (a:cont && getline(lnum) =~ '^\s*}') || (a:prev && s:Match(a:prev, s:comma_last))) let line = getline(lnum) - " if the line is a js keyword if (line =~ s:js_keywords) " check if the line is a var stmt " if the line has a comma first or comma last then we can assume that we " are in a multiple var statement - if (line =~ s:var_stmt) + if (line =~ s:var_stmt) && line =~ s:comma_last return lnum endif " other js keywords, not a var - return 0 + if line !~ s:comma_last + return 0 + end endif - + if a:cont + call cursor(lnum,1) + if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 + let lnum = line('.') + continue + end + end let lnum = s:PrevNonBlankNonString(lnum - 1) endwhile @@ -217,7 +224,7 @@ endfunction " Find line above with beginning of the var statement or returns 0 if it's not " this statement function s:GetVarIndent(lnum) - let lvar = s:InMultiVarStatement(a:lnum) + let lvar = s:InMultiVarStatement(a:lnum, 0,0) let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1) if lvar @@ -253,7 +260,7 @@ function s:LineHasOpeningBrackets(lnum) endif let pos = match(line, '[][(){}]', pos + 1) endwhile - return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0) . (open_4 > 0) + return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) endfunction function s:Match(lnum, regex) @@ -283,11 +290,11 @@ function s:IndentWithContinuation(lnum, ind, width) if s:Match(lnum, s:continuation_regex) if lnum == p_lnum return msl_ind + a:width - elseif s:InMultiVarStatement(lnum) && getline(lnum) =~ s:comma_last - return msl_ind - a:width else return msl_ind end + elseif s:InMultiVarStatement(p_lnum, 0,v:lnum) + return indent(p_lnum) - s:sw() endif return a:ind @@ -354,6 +361,9 @@ function GetJavascriptIndent() if (line =~ s:expr_case) return cindent(v:lnum) endif + if s:Match(v:lnum, s:comma_first) && s:Match(prevline,s:var_stmt) + return indent(prevline) + s:sw() + end " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the " others we indent to the containing line's MSL's level. Return -1 if fail. @@ -361,8 +371,8 @@ function GetJavascriptIndent() if col > 0 && !s:IsInStringOrComment(v:lnum, col) call cursor(v:lnum, col) - let lvar = s:InMultiVarStatement(v:lnum) - if lvar + let lvar = s:InMultiVarStatement(v:lnum, 0, 0) || line =~ s:comma_first + if lvar || line =~ s:comma_first let prevline_contents = s:RemoveTrailingComments(getline(prevline)) " check for comma first @@ -383,11 +393,7 @@ function GetJavascriptIndent() let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 - if line[col-1]==')' && col('.') != col('$') - 1 - let ind = virtcol('.')-1 - else - let ind = s:InMultiVarStatement(line('.')) ? indent(line('.')) : indent(s:GetMSL(line('.'), 0)) - endif + let ind = s:InMultiVarStatement(line('.'), 0, 0) ? indent(line('.')) : indent(s:GetMSL(line('.'), 0)) endif return ind endif @@ -395,12 +401,6 @@ function GetJavascriptIndent() " If the line is comma first, dedent 1 level if (getline(prevline) =~ s:comma_first) return indent(prevline) - s:sw() - elseif getline(s:PrevNonBlankNonString(prevline - 1)) =~ '[])}]' . s:comma_last && getline(prevline) !~ s:block_regex - if getline(prevline) !~ s:comma_last - return indent(prevline) - s:sw() - else - return indent(prevline) - end end " If line starts with an operator... @@ -445,12 +445,6 @@ function GetJavascriptIndent() end end - " Check for multiple var assignments -" let var_indent = s:GetVarIndent(v:lnum) -" if var_indent >= 0 -" return var_indent -" endif - " 3.3. Work on the previous line. {{{1 " ------------------------------- @@ -477,7 +471,7 @@ function GetJavascriptIndent() " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) - return s:InMultiVarStatement(lnum) ? indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw() + return s:InMultiVarStatement(lnum, 0, 0) ? indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw() endif " Set up variables for current line. @@ -485,22 +479,27 @@ function GetJavascriptIndent() let ind = indent(lnum) " If the previous line contained an opening bracket, and we are still in it, " add indent depending on the bracket type. - if line =~ '[[({})\]]' + if s:Match(lnum, '[[({})\]]') let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 - if col('.') + 1 == col('$') || s:Onescope(lnum) - return ind + s:sw() - else - return virtcol('.') - endif - elseif counts[0] == '2' + if counts[0] == '2' call cursor(lnum, 1) " Search for the opening tag - let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) - if mnum > 0 - return indent(s:GetMSL(mnum, 0)) + if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 + return indent(s:GetMSL(line('.'), 0)) end - elseif counts[1] == '1' || counts[2] == '1' && counts[0] != '2' + elseif counts[1] == '2' && line !~ '^\s*}' + call cursor(lnum, 1) + " Search for the opening tag + if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 + return indent(s:GetMSL(line('.'), 0)) + end + elseif counts[2] == '2' && line !~ '^\s*]' + call cursor(lnum, 1) + " Search for the opening tag + if searchpair('\[', '', '\]', 'bW', s:skip_expr) > 0 + return indent(s:GetMSL(line('.'), 0)) + end + elseif counts[1] == '1' || counts[2] == '1' || counts[0] == '1' || s:Onescope(lnum) return ind + s:sw() else call cursor(v:lnum, vcol) @@ -509,7 +508,12 @@ function GetJavascriptIndent() " 3.4. Work on the MSL line. {{{1 " -------------------------- + if s:Match(lnum, s:comma_last) && !s:Match(lnum, s:continuation_regex) + return line =~ s:var_stmt ? indent(lnum) + s:sw() : indent(lnum) + elseif s:InMultiVarStatement(lnum, 1, v:lnum) && line !~ s:var_stmt + return indent(lnum) - s:sw() + end let ind_con = ind let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) From bf34e60dc378e06cb1ce7abc499bfd57b9dae9aa Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 17 May 2016 21:49:31 -0700 Subject: [PATCH 137/929] Forcing `class` text to be a keyword This class regex will match if the text class is contained within a larger variable name, and therefore is broken. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 57812317..c9ba7dd9 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -222,7 +222,7 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite conta syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /class\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " Define the default highlighting. " For version 5.7 and earlier: only when not done already From 77387efb230d435ad655e5364bb0741121e0f87b Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 21 May 2016 13:41:11 -0700 Subject: [PATCH 138/929] Update javascript.vim (#437) regexes have been cleaned and no longer have ruby specifics. all of the regex matching has been either refactored to use the s:match function if it is needed to look at the syntax of the characters, or changed to be a simple match to save performance.the current file has none of the bugs i talked about that were caused by the last commit --- indent/javascript.vim | 92 ++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 44 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index fa2f8a87..76b50099 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -58,10 +58,10 @@ let s:syng_linecom = 'linecomment\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" -let s:line_term = '\s*\%(\%(\/\/\).*\)\=$' +let s:line_term = '\s*\%(\%(\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*/.?:]\|+\@.*\)\@],\)' . s:line_term +let s:continuation_regex = '\%([\\*/.?:]\|+\@\|=>\)\C' . s:line_term @@ -81,7 +81,7 @@ function s:Onescope(lnum) endfunction " Regex that defines blocks. -let s:block_regex = '\%([{([]\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=' . s:line_term +let s:block_regex = '[{([]' . s:line_term let s:operator_first = '^\s*\%([*.:?]\|\([-/+]\)\1\@!\|||\|&&\)' @@ -179,8 +179,8 @@ function s:GetMSL(lnum, in_one_line_scope) endfunction function s:RemoveTrailingComments(content) - let single = '\/\/\(.*\)\s*$' - let multi = '\/\*\(.*\)\*\/\s*$' + let single = '\/\/\%(.*\)\s*$' + let multi = '\/\*\%(.*\)\*\/\s*$' return substitute(substitute(substitute(a:content, single, '', ''), multi, '', ''), '\s\+$', '', '') endfunction @@ -192,28 +192,26 @@ function s:InMultiVarStatement(lnum, cont, prev) " loop through previous expressions to find a var statement while lnum > 0 && (s:Match(lnum, s:comma_last) || (a:cont && getline(lnum) =~ '^\s*}') || (a:prev && s:Match(a:prev, s:comma_last))) - let line = getline(lnum) " if the line is a js keyword - if (line =~ s:js_keywords) + if a:cont + call cursor(lnum,1) + if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 + let lnum = line('.') + end + end + if s:Match(lnum, s:js_keywords) " check if the line is a var stmt " if the line has a comma first or comma last then we can assume that we " are in a multiple var statement - if (line =~ s:var_stmt) && line =~ s:comma_last + if s:Match(lnum, s:var_stmt) && s:Match(lnum, s:comma_last) return lnum endif " other js keywords, not a var - if line !~ s:comma_last + if !s:Match(lnum, s:comma_last) return 0 end endif - if a:cont - call cursor(lnum,1) - if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 - let lnum = line('.') - continue - end - end let lnum = s:PrevNonBlankNonString(lnum - 1) endwhile @@ -221,25 +219,25 @@ function s:InMultiVarStatement(lnum, cont, prev) return 0 endfunction -" Find line above with beginning of the var statement or returns 0 if it's not +" Find line above with beginning of the var statement or returns 0 if it's not"{{{2 " this statement -function s:GetVarIndent(lnum) - let lvar = s:InMultiVarStatement(a:lnum, 0,0) - let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1) +" function s:GetVarIndent(lnum) +" let lvar = s:InMultiVarStatement(a:lnum, 0,0) +" let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1) - if lvar - let line = s:RemoveTrailingComments(getline(prev_lnum)) +" if lvar +" let line = s:RemoveTrailingComments(getline(prev_lnum)) - " if the previous line doesn't end in a comma, return to regular indent - if (line !~ s:comma_last) - return indent(prev_lnum) - s:sw() - else - return indent(lvar) + s:sw() - endif - endif +" " if the previous line doesn't end in a comma, return to regular indent +" if (line !~ s:comma_last) +" return indent(prev_lnum) - s:sw() +" else +" return indent(lvar) + s:sw() +" endif +" endif - return -1 -endfunction +" return -1 +" endfunction"}}} " Check if line 'lnum' has more opening brackets than closing ones. @@ -361,8 +359,13 @@ function GetJavascriptIndent() if (line =~ s:expr_case) return cindent(v:lnum) endif - if s:Match(v:lnum, s:comma_first) && s:Match(prevline,s:var_stmt) - return indent(prevline) + s:sw() + + " the part first where we deal with comma first + if line =~ s:comma_first + let counts = s:LineHasOpeningBrackets(prevline) + if (s:Match(prevline, s:var_stmt) || counts[0] == '1' || counts[1] == '1' || counts[2] == '1') + return indent(prevline) + s:sw() + end end " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the @@ -373,15 +376,14 @@ function GetJavascriptIndent() let lvar = s:InMultiVarStatement(v:lnum, 0, 0) || line =~ s:comma_first if lvar || line =~ s:comma_first - let prevline_contents = s:RemoveTrailingComments(getline(prevline)) " check for comma first if (line[col - 1] =~ ',') " if the previous line ends in comma or semicolon don't indent - if (prevline_contents =~ '[;,]\s*$') + if (getline(prevline) =~ '[;,]' . s:line_term) return indent(s:GetMSL(line('.'), 0)) " get previous line indent, if it's comma first return prevline indent - elseif (prevline_contents =~ s:comma_first) + elseif s:Match(prevline, s:comma_first) return indent(prevline) " otherwise we indent 1 level else @@ -399,12 +401,12 @@ function GetJavascriptIndent() endif " If the line is comma first, dedent 1 level - if (getline(prevline) =~ s:comma_first) + if s:Match(prevline, s:comma_first) return indent(prevline) - s:sw() end " If line starts with an operator... - if (s:Match(v:lnum, s:operator_first)) + if (line =~ s:operator_first) if (s:Match(prevline, s:operator_first)) " and so does previous line, don't indent return indent(prevline) @@ -422,7 +424,7 @@ function GetJavascriptIndent() return indent(prevline) + s:sw() end " If previous line starts with an operator... - elseif (s:Match(prevline, s:operator_first) && !s:Match(prevline, s:comma_last) && !s:Match(prevline, '};\=' . s:line_term)) || s:Match(prevline, ');\=' . s:line_term) + elseif (s:Match(prevline, s:operator_first) && getline(prevline) !~ s:comma_last && getline(prevline) !~ '};\=' . s:line_term) || getline(prevline) =~ ');\=' . s:line_term let counts = s:LineHasOpeningBrackets(prevline) if counts[0] == '2' && !s:Match(prevline, s:operator_first) call cursor(prevline, 1) @@ -487,13 +489,13 @@ function GetJavascriptIndent() if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 return indent(s:GetMSL(line('.'), 0)) end - elseif counts[1] == '2' && line !~ '^\s*}' + elseif counts[1] == '2' && !s:Match(lnum, '^\s*}') call cursor(lnum, 1) " Search for the opening tag if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 return indent(s:GetMSL(line('.'), 0)) end - elseif counts[2] == '2' && line !~ '^\s*]' + elseif counts[2] == '2' && !s:Match(lnum, '^\s*]') call cursor(lnum, 1) " Search for the opening tag if searchpair('\[', '', '\]', 'bW', s:skip_expr) > 0 @@ -509,10 +511,12 @@ function GetJavascriptIndent() " 3.4. Work on the MSL line. {{{1 " -------------------------- if s:Match(lnum, s:comma_last) && !s:Match(lnum, s:continuation_regex) - return line =~ s:var_stmt ? indent(lnum) + s:sw() : indent(lnum) + return s:Match(lnum, s:var_stmt) ? indent(lnum) + s:sw() : indent(lnum) - elseif s:InMultiVarStatement(lnum, 1, v:lnum) && line !~ s:var_stmt - return indent(lnum) - s:sw() + elseif s:Match(s:PrevNonBlankNonString(lnum - 1), s:comma_last) + if !s:Match(lnum, s:comma_last) && s:InMultiVarStatement(lnum,1,0) + return indent(lnum) - s:sw() + end end let ind_con = ind let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) From c180b0c322d578be6c510a9c0970e50322875877 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 21 May 2016 21:05:51 -0700 Subject: [PATCH 139/929] little bug affecting previous few commits another tiny commit, this is just fix which for a small bug that slipped past me --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 76b50099..975da3ac 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -291,7 +291,7 @@ function s:IndentWithContinuation(lnum, ind, width) else return msl_ind end - elseif s:InMultiVarStatement(p_lnum, 0,v:lnum) + elseif s:InMultiVarStatement(p_lnum, 0, s:PrevNonBlankNonString(p_lnum - 1)) return indent(p_lnum) - s:sw() endif From c5fba22a90f17c4a09b961bc1834cfb8679adb28 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 24 May 2016 12:44:40 -0700 Subject: [PATCH 140/929] wrapping comments improved (#440) * wrapping comments improved this improves most regexes and the prevnonblanknonstring function --- indent/javascript.vim | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 975da3ac..3fac0ab4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -41,8 +41,9 @@ endif " 1. Variables {{{1 " ============ -let s:js_keywords = '^\s*\%(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' -let s:expr_case = '^\s*\%(case\s\+[^\:]*\|default\)\s*:\s*\C' +let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' +let s:js_keywords = s:line_pre . '\%(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' +let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' @@ -50,7 +51,7 @@ let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' let s:syng_string = 'regex\c' " Regex of syntax group names that are strings or documentation. -let s:syng_multiline = 'comment\c' +let s:syng_multiline = '\%(comment\|doc\)\c' " Regex of syntax group names that are line comment. let s:syng_linecom = 'linecomment\c' @@ -61,7 +62,7 @@ let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_st let s:line_term = '\s*\%(\%(\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$' " Regex that defines continuation lines, not including (, {, or [. -let s:continuation_regex = '\%([\\*/.?:]\|+\@\|=>\)\C' . s:line_term @@ -83,11 +84,11 @@ endfunction " Regex that defines blocks. let s:block_regex = '[{([]' . s:line_term -let s:operator_first = '^\s*\%([*.:?]\|\([-/+]\)\1\@!\|||\|&&\)' +let s:operator_first = s:line_pre . '\%([.:?]\|\([-/+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' -let s:var_stmt = '^\s*\%(const\|let\|var\)\s\+\C' +let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' -let s:comma_first = '^\s*,' +let s:comma_first = s:line_pre . ',' let s:comma_last = ',' . s:line_term " 2. Auxiliary Functions {{{1 @@ -121,15 +122,15 @@ function s:PrevNonBlankNonString(lnum) " Go in and out of blocks comments as necessary. " If the line isn't empty (with opt. comment) or in a string, end search. let line = getline(lnum) - if s:IsInMultilineComment(lnum, matchend(line, '/\*') - 1) + if s:IsInMultilineComment(lnum, matchend(line, '^\s*/\*') - 1) && line !~ s:line_pre . '$' if in_block let in_block = 0 else break endif - elseif !in_block && s:IsInMultilineComment(lnum, matchend(line, '\*/') - 1) + elseif !in_block && s:IsInMultilineComment(lnum, match(line, '\*/\s*$') + 1) && line !~ s:line_pre . '$' let in_block = 1 - elseif !in_block && line !~ '^\s*\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) + elseif !in_block && line !~ s:line_pre . '\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) break endif let lnum = prevnonblank(lnum - 1) @@ -191,7 +192,7 @@ function s:InMultiVarStatement(lnum, cont, prev) " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') " loop through previous expressions to find a var statement - while lnum > 0 && (s:Match(lnum, s:comma_last) || (a:cont && getline(lnum) =~ '^\s*}') || (a:prev && s:Match(a:prev, s:comma_last))) + while lnum > 0 && (s:Match(lnum, s:comma_last) || (a:cont && getline(lnum) =~ s:line_pre . '}') || (a:prev && s:Match(a:prev, s:comma_last))) " if the line is a js keyword if a:cont call cursor(lnum,1) @@ -341,17 +342,18 @@ function GetJavascriptIndent() let prevline = prevnonblank(v:lnum - 1) " to not change multiline string values - if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' && line !~ '^\s*[''"`]' + if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' && line !~ s:line_pre . '[''"`]' return indent(v:lnum) endif " If we are in a multi-line comment, cindent does the right thing. - if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) + if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) && + \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) return cindent(v:lnum) endif " single opening bracket will assume you want a c style of indenting - if s:Match(v:lnum, '^\s*{' . s:line_term) + if s:Match(v:lnum, s:line_pre . '{' . s:line_term) return cindent(v:lnum) endif @@ -370,7 +372,7 @@ function GetJavascriptIndent() " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the " others we indent to the containing line's MSL's level. Return -1 if fail. - let col = matchend(line, '^\s*[],})]') + let col = matchend(line, s:line_pre . '[],})]') if col > 0 && !s:IsInStringOrComment(v:lnum, col) call cursor(v:lnum, col) @@ -489,13 +491,13 @@ function GetJavascriptIndent() if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 return indent(s:GetMSL(line('.'), 0)) end - elseif counts[1] == '2' && !s:Match(lnum, '^\s*}') + elseif counts[1] == '2' && !s:Match(lnum, s:line_pre . '}') call cursor(lnum, 1) " Search for the opening tag if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 return indent(s:GetMSL(line('.'), 0)) end - elseif counts[2] == '2' && !s:Match(lnum, '^\s*]') + elseif counts[2] == '2' && !s:Match(lnum, s:line_pre . ']') call cursor(lnum, 1) " Search for the opening tag if searchpair('\[', '', '\]', 'bW', s:skip_expr) > 0 From fe096c0eec788006516b5be8ce580dbc23f7144f Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 25 May 2016 11:58:00 -0700 Subject: [PATCH 141/929] another edge side effect (#443) this is just a more correct, thorough check, for multiline comments --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 3fac0ab4..d3caf4ae 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -348,7 +348,7 @@ function GetJavascriptIndent() " If we are in a multi-line comment, cindent does the right thing. if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) && - \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) + \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) && line !~ '^\/\*' return cindent(v:lnum) endif From d54b138f9113739780f1f61c9fe5aeec0e0ea088 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 26 May 2016 00:20:26 -0700 Subject: [PATCH 142/929] a comma should be considered an operator this fixes some serious issues with the way a continuation is detected and also removes the specific code for comma first style,which was very breakable --- indent/javascript.vim | 56 +++++++++++++------------------------------ 1 file changed, 16 insertions(+), 40 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d3caf4ae..a0b78714 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -72,7 +72,9 @@ function s:Onescope(lnum) end let mypos = col('.') call cursor(a:lnum, 1) - if search('\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) + if search('\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && + \ searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && + \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) call cursor(a:lnum, mypos) return 1 else @@ -84,11 +86,10 @@ endfunction " Regex that defines blocks. let s:block_regex = '[{([]' . s:line_term -let s:operator_first = s:line_pre . '\%([.:?]\|\([-/+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' +let s:operator_first = s:line_pre . '\%([.,:?]\|\([-/+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' -let s:comma_first = s:line_pre . ',' let s:comma_last = ',' . s:line_term " 2. Auxiliary Functions {{{1 @@ -148,9 +149,11 @@ function s:GetMSL(lnum, in_one_line_scope) " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) let col = match(line, s:continuation_regex) + 1 + let coal = match(line, s:comma_last) + 1 let line2 = getline(msl) let col2 = matchend(line2, ')') - if (col > 0 && !s:IsInStringOrComment(lnum, col) && !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) + if ((col > 0 && !s:IsInStringOrComment(lnum, col) || coal > 0 && !s:IsInStringOrComment(lnum,coal)) && + \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) let msl = lnum " if there are more closing brackets, continue from the line which has the matching opening bracket @@ -192,7 +195,9 @@ function s:InMultiVarStatement(lnum, cont, prev) " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') " loop through previous expressions to find a var statement - while lnum > 0 && (s:Match(lnum, s:comma_last) || (a:cont && getline(lnum) =~ s:line_pre . '}') || (a:prev && s:Match(a:prev, s:comma_last))) + while lnum > 0 && (s:Match(lnum, s:comma_last) ||(a:cont && getline(lnum) =~ s:line_pre . '}') || + \ s:Match(lnum,s:continuation_regex)) || (a:prev && (s:Match(a:prev, s:comma_last) || + \ s:Match(a:prev,s:continuation_regex))) " if the line is a js keyword if a:cont call cursor(lnum,1) @@ -204,12 +209,12 @@ function s:InMultiVarStatement(lnum, cont, prev) " check if the line is a var stmt " if the line has a comma first or comma last then we can assume that we " are in a multiple var statement - if s:Match(lnum, s:var_stmt) && s:Match(lnum, s:comma_last) + if s:Match(lnum, s:var_stmt) && (s:Match(lnum, s:comma_last)||s:Match(lnum,s:continuation_regex)) return lnum endif " other js keywords, not a var - if !s:Match(lnum, s:comma_last) + if !s:Match(lnum, s:comma_last)||!s:Match(lnum,s:continuation_regex) return 0 end endif @@ -348,7 +353,7 @@ function GetJavascriptIndent() " If we are in a multi-line comment, cindent does the right thing. if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) && - \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) && line !~ '^\/\*' + \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) && line !~ '^\/\*' return cindent(v:lnum) endif @@ -362,38 +367,13 @@ function GetJavascriptIndent() return cindent(v:lnum) endif - " the part first where we deal with comma first - if line =~ s:comma_first - let counts = s:LineHasOpeningBrackets(prevline) - if (s:Match(prevline, s:var_stmt) || counts[0] == '1' || counts[1] == '1' || counts[2] == '1') - return indent(prevline) + s:sw() - end - end " If we got a closing bracket on an empty line, find its match and indent " according to it. For parentheses we indent to its column - 1, for the " others we indent to the containing line's MSL's level. Return -1 if fail. - let col = matchend(line, s:line_pre . '[],})]') + let col = matchend(line, s:line_pre . '[]})]') if col > 0 && !s:IsInStringOrComment(v:lnum, col) call cursor(v:lnum, col) - let lvar = s:InMultiVarStatement(v:lnum, 0, 0) || line =~ s:comma_first - if lvar || line =~ s:comma_first - - " check for comma first - if (line[col - 1] =~ ',') - " if the previous line ends in comma or semicolon don't indent - if (getline(prevline) =~ '[;,]' . s:line_term) - return indent(s:GetMSL(line('.'), 0)) - " get previous line indent, if it's comma first return prevline indent - elseif s:Match(prevline, s:comma_first) - return indent(prevline) - " otherwise we indent 1 level - else - return indent(lvar) + s:sw() - endif - endif - endif - let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 @@ -402,11 +382,6 @@ function GetJavascriptIndent() return ind endif - " If the line is comma first, dedent 1 level - if s:Match(prevline, s:comma_first) - return indent(prevline) - s:sw() - end - " If line starts with an operator... if (line =~ s:operator_first) if (s:Match(prevline, s:operator_first)) @@ -426,7 +401,8 @@ function GetJavascriptIndent() return indent(prevline) + s:sw() end " If previous line starts with an operator... - elseif (s:Match(prevline, s:operator_first) && getline(prevline) !~ s:comma_last && getline(prevline) !~ '};\=' . s:line_term) || getline(prevline) =~ ');\=' . s:line_term + elseif (s:Match(prevline, s:operator_first) && getline(prevline) !~ s:continuation_regex && + \ getline(prevline) !~ '};\=' . s:line_term) || getline(prevline) =~ ');\=' . s:line_term let counts = s:LineHasOpeningBrackets(prevline) if counts[0] == '2' && !s:Match(prevline, s:operator_first) call cursor(prevline, 1) From b5de6ec2cc28bf28064712241d3fd624b966c336 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 26 May 2016 11:10:09 -0700 Subject: [PATCH 143/929] Update javascript.vim --- indent/javascript.vim | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a0b78714..8bd4bcf5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -389,20 +389,20 @@ function GetJavascriptIndent() return indent(prevline) end let counts = s:LineHasOpeningBrackets(prevline) - if counts[0] == '2' + if counts[0] == '2' || counts[1] == '2' || counts[2] == '2' call cursor(prevline, 1) " Search for the opening tag - let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) - if mnum > 0 && s:Match(mnum, s:operator_first) - return indent(mnum) + let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) + if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 && s:Match(line('.'), s:operator_first) + return indent(line('.')) end elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' " otherwise, indent 1 level return indent(prevline) + s:sw() end + " If previous line starts with an operator... - elseif (s:Match(prevline, s:operator_first) && getline(prevline) !~ s:continuation_regex && - \ getline(prevline) !~ '};\=' . s:line_term) || getline(prevline) =~ ');\=' . s:line_term + elseif (s:Match(prevline, s:operator_first) && !s:Match(prevline,s:continuation_regex))||getline(prevline) =~ ');\=' . s:line_term let counts = s:LineHasOpeningBrackets(prevline) if counts[0] == '2' && !s:Match(prevline, s:operator_first) call cursor(prevline, 1) @@ -412,14 +412,7 @@ function GetJavascriptIndent() return indent(mnum) - s:sw() end elseif s:Match(prevline, s:operator_first) - if counts[0] == '2' && counts[1] == '1' - call cursor(prevline, 1) - " Search for the opening tag - let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) - if mnum > 0 && !s:Match(mnum, s:operator_first) - return indent(mnum) + s:sw() - end - elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + if counts[0] != '1' && counts[1] != '1' && counts[2] != '1' return indent(prevline) - s:sw() end end From fcec8b72d238e8c49b8755f294551c671ce3b0fd Mon Sep 17 00:00:00 2001 From: dNItro Date: Fri, 27 May 2016 01:30:45 +0430 Subject: [PATCH 144/929] Shebang doesn't have to contain env --- ftdetect/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ftdetect/javascript.vim b/ftdetect/javascript.vim index 036b352d..d6aa6d01 100644 --- a/ftdetect/javascript.vim +++ b/ftdetect/javascript.vim @@ -3,7 +3,7 @@ au BufNewFile,BufRead *.jsm setf javascript au BufNewFile,BufRead Jakefile setf javascript fun! s:SelectJavascript() - if getline(1) =~# '^#!.*/bin/env\s\+node\>' + if getline(1) =~# '^#!.*/bin/\%(env\s\+\)\?node\>' set ft=javascript endif endfun From 5b143bd2ad8dd4b98e4087d6991be423b9df7a2d Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 26 May 2016 14:48:21 -0700 Subject: [PATCH 145/929] change the regex engine according to warning (#449) * change the regex engine according to warning the readme won't tell the user to change the regexpengine now that the correct one is set --- README.md | 12 ------------ ftplugin/javascript.vim | 3 +++ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fb5139c9..85b0d0b9 100644 --- a/README.md +++ b/README.md @@ -102,18 +102,6 @@ proposed change and how it is valuable. Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). -## A Quick Note on Regexes - -Vim 7.4 with patches LESS than 1-7 exhibits a bug that broke how we handle -javascript regexes. Please update to a newer version or run the following -commands to fix: - -``` -:set regexpengine=1 -:syntax enable -``` - - ## License Distributed under the same terms as Vim itself. See `:help license`. diff --git a/ftplugin/javascript.vim b/ftplugin/javascript.vim index 9e2fc9b0..58755a4a 100644 --- a/ftplugin/javascript.vim +++ b/ftplugin/javascript.vim @@ -1 +1,4 @@ setlocal suffixesadd+=.js +if (v:version < 704 || (v:version == 704 && !has('patch002'))) && exists('®expengine') + set re=1 +end From 120352b1205af843d1d316686b61ac91b4a25278 Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 30 May 2016 11:13:12 -0700 Subject: [PATCH 146/929] readability changes in the indent script (#450) this makes almost no difference to the indenter's effects. I found that our most time consuming indent operation is from the 'skip_expr' which looks at syntax items, removing 'regex' from it seems to help a bit but it still will be slow on long lines --- indent/javascript.vim | 118 +++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 77 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8bd4bcf5..78d5d4e5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -117,21 +117,17 @@ endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevNonBlankNonString(lnum) - let in_block = 0 let lnum = prevnonblank(a:lnum) while lnum > 0 - " Go in and out of blocks comments as necessary. - " If the line isn't empty (with opt. comment) or in a string, end search. let line = getline(lnum) - if s:IsInMultilineComment(lnum, matchend(line, '^\s*/\*') - 1) && line !~ s:line_pre . '$' - if in_block - let in_block = 0 - else - break - endif - elseif !in_block && s:IsInMultilineComment(lnum, match(line, '\*/\s*$') + 1) && line !~ s:line_pre . '$' - let in_block = 1 - elseif !in_block && line !~ s:line_pre . '\%(//\).*$' && !(s:IsInStringOrComment(lnum, 1) && s:IsInStringOrComment(lnum, strlen(line))) + let com = match(line, '\*\/') + 1 + if s:IsInMultilineComment(lnum, com) + call cursor(lnum, com) + let parlnum = search('\/\*', 'nbW') + if parlnum > 0 + let lnum = parlnum + end + elseif line !~ '^' . s:line_term break endif let lnum = prevnonblank(lnum - 1) @@ -148,11 +144,9 @@ function s:GetMSL(lnum, in_one_line_scope) " If we have a continuation line, or we're in a string, use line as MSL. " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) - let col = match(line, s:continuation_regex) + 1 - let coal = match(line, s:comma_last) + 1 let line2 = getline(msl) let col2 = matchend(line2, ')') - if ((col > 0 && !s:IsInStringOrComment(lnum, col) || coal > 0 && !s:IsInStringOrComment(lnum,coal)) && + if ((s:Match(lnum,s:continuation_regex) || s:Match(lnum, s:comma_last)) && \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) let msl = lnum @@ -201,8 +195,9 @@ function s:InMultiVarStatement(lnum, cont, prev) " if the line is a js keyword if a:cont call cursor(lnum,1) - if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 - let lnum = line('.') + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + if parlnum > 0 + let lnum = parlnum end end if s:Match(lnum, s:js_keywords) @@ -225,27 +220,6 @@ function s:InMultiVarStatement(lnum, cont, prev) return 0 endfunction -" Find line above with beginning of the var statement or returns 0 if it's not"{{{2 -" this statement -" function s:GetVarIndent(lnum) -" let lvar = s:InMultiVarStatement(a:lnum, 0,0) -" let prev_lnum = s:PrevNonBlankNonString(a:lnum - 1) - -" if lvar -" let line = s:RemoveTrailingComments(getline(prev_lnum)) - -" " if the previous line doesn't end in a comma, return to regular indent -" if (line !~ s:comma_last) -" return indent(prev_lnum) - s:sw() -" else -" return indent(lvar) + s:sw() -" endif -" endif - -" return -1 -" endfunction"}}} - - " Check if line 'lnum' has more opening brackets than closing ones. function s:LineHasOpeningBrackets(lnum) let open_0 = 0 @@ -345,15 +319,14 @@ function GetJavascriptIndent() let line = getline(v:lnum) " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) - + " to not change multiline string values - if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' && line !~ s:line_pre . '[''"`]' - return indent(v:lnum) + if line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' + return -1 endif " If we are in a multi-line comment, cindent does the right thing. - if s:IsInMultilineComment(v:lnum, 1) && !s:IsLineComment(v:lnum, 1) && - \ s:IsInMultilineComment(v:lnum, match(line, '\s*$')) && line !~ '^\/\*' + if s:IsInMultilineComment(v:lnum, 1) && line !~ '^\/\*' return cindent(v:lnum) endif @@ -375,45 +348,47 @@ function GetJavascriptIndent() call cursor(v:lnum, col) - let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) - if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 - let ind = s:InMultiVarStatement(line('.'), 0, 0) ? indent(line('.')) : indent(s:GetMSL(line('.'), 0)) + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + if parlnum > 0 + let ind = s:InMultiVarStatement(parlnum, 0, 0) ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) endif return ind endif + let lnum = s:PrevNonBlankNonString(v:lnum - 1) + " If line starts with an operator... if (line =~ s:operator_first) - if (s:Match(prevline, s:operator_first)) + if (s:Match(lnum, s:operator_first)) " and so does previous line, don't indent - return indent(prevline) + return indent(lnum) end - let counts = s:LineHasOpeningBrackets(prevline) + let counts = s:LineHasOpeningBrackets(lnum) if counts[0] == '2' || counts[1] == '2' || counts[2] == '2' - call cursor(prevline, 1) + call cursor(lnum, 1) " Search for the opening tag - let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2) - if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0 && s:Match(line('.'), s:operator_first) - return indent(line('.')) + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + if parlnum > 0 && s:Match(parlnum, s:operator_first) + return indent(parlnum) end elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' " otherwise, indent 1 level - return indent(prevline) + s:sw() + return indent(lnum) + s:sw() end " If previous line starts with an operator... - elseif (s:Match(prevline, s:operator_first) && !s:Match(prevline,s:continuation_regex))||getline(prevline) =~ ');\=' . s:line_term - let counts = s:LineHasOpeningBrackets(prevline) - if counts[0] == '2' && !s:Match(prevline, s:operator_first) - call cursor(prevline, 1) + elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex))||getline(lnum) =~ ');\=' . s:line_term + let counts = s:LineHasOpeningBrackets(lnum) + if counts[0] == '2' && !s:Match(lnum, s:operator_first) + call cursor(lnum, 1) " Search for the opening tag - let mnum = searchpair('(', '', ')', 'bW', s:skip_expr) + let mnum = searchpair('(', '', ')', 'nbW', s:skip_expr) if mnum > 0 && s:Match(mnum, s:operator_first) return indent(mnum) - s:sw() end - elseif s:Match(prevline, s:operator_first) + elseif s:Match(lnum, s:operator_first) if counts[0] != '1' && counts[1] != '1' && counts[2] != '1' - return indent(prevline) - s:sw() + return indent(lnum) - s:sw() end end end @@ -429,7 +404,6 @@ function GetJavascriptIndent() endif " Find a non-blank, non-multi-line string line above the current line. - let lnum = s:PrevNonBlankNonString(v:lnum - 1) " If the line is empty and inside a string, use the previous line. if line =~ '^\s*$' && lnum != prevline @@ -454,23 +428,13 @@ function GetJavascriptIndent() " add indent depending on the bracket type. if s:Match(lnum, '[[({})\]]') let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '2' - call cursor(lnum, 1) - " Search for the opening tag - if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 - return indent(s:GetMSL(line('.'), 0)) - end - elseif counts[1] == '2' && !s:Match(lnum, s:line_pre . '}') - call cursor(lnum, 1) - " Search for the opening tag - if searchpair('{', '', '}', 'bW', s:skip_expr) > 0 - return indent(s:GetMSL(line('.'), 0)) - end - elseif counts[2] == '2' && !s:Match(lnum, s:line_pre . ']') + if counts[0] == '2' || (counts[1] == '2' && !s:Match(lnum, s:line_pre . '}')) || + \ (counts[2] == '2' && !s:Match(lnum, s:line_pre . ']')) call cursor(lnum, 1) " Search for the opening tag - if searchpair('\[', '', '\]', 'bW', s:skip_expr) > 0 - return indent(s:GetMSL(line('.'), 0)) + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + if parlnum > 0 + return indent(s:GetMSL(parlnum, 0)) end elseif counts[1] == '1' || counts[2] == '1' || counts[0] == '1' || s:Onescope(lnum) return ind + s:sw() From 12bbabac6034b46d3d5ea764f7bc81694702e2e9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 31 May 2016 14:29:08 -0700 Subject: [PATCH 147/929] timeout the paren searching (#453) the search pair function almost stalls my decently powerful macbook pro on really long lines, could be annoying because of minification etc.this function just makes it backwards compatible in old vim versions or builds without this feature --- indent/javascript.vim | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 78d5d4e5..85badf8a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -42,7 +42,7 @@ endif " ============ let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' -let s:js_keywords = s:line_pre . '\%(break\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' +let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' @@ -59,6 +59,14 @@ let s:syng_linecom = 'linecomment\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" +func s:lookForParens(start,end,flags,stop) + try + return searchpair(a:start,'',a:end,a:flags,s:skip_expr,a:stop,300) + catch /E118/ + return searchpair(a:start,'',a:end,a:flags,0,a:stop) + endtry +endfunc + let s:line_term = '\s*\%(\%(\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$' " Regex that defines continuation lines, not including (, {, or [. @@ -73,7 +81,7 @@ function s:Onescope(lnum) let mypos = col('.') call cursor(a:lnum, 1) if search('\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && - \ searchpair('(', '', ')', 'W', s:skip_expr, a:lnum) > 0 && + \ s:lookForParens('(', ')', 'W', a:lnum) > 0 && \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) call cursor(a:lnum, mypos) return 1 @@ -153,7 +161,7 @@ function s:GetMSL(lnum, in_one_line_scope) " if there are more closing brackets, continue from the line which has the matching opening bracket elseif col2 > 0 && !s:IsInStringOrComment(msl, col2) && s:LineHasOpeningBrackets(msl)[0] == '2' && !a:in_one_line_scope call cursor(msl, 1) - if searchpair('(', '', ')', 'bW', s:skip_expr) > 0 + if s:lookForParens('(', ')', 'bW', 0) > 0 let lnum = line('.') let msl = lnum endif @@ -185,17 +193,18 @@ endfunction " Find if the string is inside var statement (but not the first string) function s:InMultiVarStatement(lnum, cont, prev) let lnum = s:PrevNonBlankNonString(a:lnum - 1) + let prev = a:prev " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') " loop through previous expressions to find a var statement while lnum > 0 && (s:Match(lnum, s:comma_last) ||(a:cont && getline(lnum) =~ s:line_pre . '}') || - \ s:Match(lnum,s:continuation_regex)) || (a:prev && (s:Match(a:prev, s:comma_last) || - \ s:Match(a:prev,s:continuation_regex))) + \ s:Match(lnum,s:continuation_regex)) || (prev && (s:Match(prev, s:comma_last) || + \ s:Match(prev,s:continuation_regex))) " if the line is a js keyword if a:cont call cursor(lnum,1) - let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 let lnum = parlnum end @@ -214,6 +223,7 @@ function s:InMultiVarStatement(lnum, cont, prev) end endif let lnum = s:PrevNonBlankNonString(lnum - 1) + let prev = prev && lnum > 0 ? prev : 0 endwhile " beginning of program, not a var @@ -348,7 +358,7 @@ function GetJavascriptIndent() call cursor(v:lnum, col) - let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 let ind = s:InMultiVarStatement(parlnum, 0, 0) ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) endif @@ -367,7 +377,7 @@ function GetJavascriptIndent() if counts[0] == '2' || counts[1] == '2' || counts[2] == '2' call cursor(lnum, 1) " Search for the opening tag - let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 && s:Match(parlnum, s:operator_first) return indent(parlnum) end @@ -382,7 +392,7 @@ function GetJavascriptIndent() if counts[0] == '2' && !s:Match(lnum, s:operator_first) call cursor(lnum, 1) " Search for the opening tag - let mnum = searchpair('(', '', ')', 'nbW', s:skip_expr) + let mnum = s:lookForParens('(', ')', 'nbW', 0) if mnum > 0 && s:Match(mnum, s:operator_first) return indent(mnum) - s:sw() end @@ -432,7 +442,7 @@ function GetJavascriptIndent() \ (counts[2] == '2' && !s:Match(lnum, s:line_pre . ']')) call cursor(lnum, 1) " Search for the opening tag - let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', s:skip_expr) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 return indent(s:GetMSL(parlnum, 0)) end From 51bf45fe4957f0fa3fc996e5b3a0bf2ff549b9b0 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 2 Jun 2016 09:38:19 -0700 Subject: [PATCH 148/929] limiting for slow function and operator fix (#455) * prevent repeated calls of searchpair ``` var magicWords = ['abracadabra', 'gesundheit', 'ventrilo'], spells = { 'fireball': function() { setOnFire() }, 'water': function() { putOut() } }, a = 1, b = 'abc', etc, somethingElse someFunc(param1, param2, param3, param4) ``` at the line which starts with a curly brace followed by a comment this was added for traversing the comma less property lines, however this only needs to be called once.this improves performance when using the endline operator style an operator would previously create an unnecessary indent when following a line which was the first of a list of block enclosed items, e.g. a array, function call, or object before: ``` vardefaultModules = { 'http:': http ,'https:': https } ``` after: ``` vardefaultModules = { 'http:': http ,'https:': https } ``` --- indent/javascript.vim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 85badf8a..a76a1b89 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -193,16 +193,18 @@ endfunction " Find if the string is inside var statement (but not the first string) function s:InMultiVarStatement(lnum, cont, prev) let lnum = s:PrevNonBlankNonString(a:lnum - 1) + let cont = a:cont let prev = a:prev " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') " loop through previous expressions to find a var statement - while lnum > 0 && (s:Match(lnum, s:comma_last) ||(a:cont && getline(lnum) =~ s:line_pre . '}') || + while lnum > 0 && (s:Match(lnum, s:comma_last) ||(cont && getline(lnum) =~ s:line_pre . '[]})]') || \ s:Match(lnum,s:continuation_regex)) || (prev && (s:Match(prev, s:comma_last) || \ s:Match(prev,s:continuation_regex))) " if the line is a js keyword - if a:cont + if cont + let cont = 0 call cursor(lnum,1) let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 @@ -381,7 +383,9 @@ function GetJavascriptIndent() if parlnum > 0 && s:Match(parlnum, s:operator_first) return indent(parlnum) end - elseif counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + elseif (counts[0] != '1' && counts[1] != '1' && counts[2] != '1') && + \ (!s:Match(s:PrevNonBlankNonString(lnum - 1), s:block_regex) || + \ s:Match(lnum, s:var_stmt)) " otherwise, indent 1 level return indent(lnum) + s:sw() end From d00e8ddf6f10e14837d25e97dac35cd10f1a55a2 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 2 Jun 2016 14:48:49 -0700 Subject: [PATCH 149/929] get a correct indent for initial operator first looking at how the line found with searchpair starts after: ``` var protocol = defaultModules = { 'http:': http ,'https:': https } ,htpModles = slf.htpModules || {} console.log() --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a76a1b89..6a477b7b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -380,8 +380,8 @@ function GetJavascriptIndent() call cursor(lnum, 1) " Search for the opening tag let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 && s:Match(parlnum, s:operator_first) - return indent(parlnum) + if parlnum > 0 + return !s:Match(parlnum, s:operator_first) ? indent(lnum) + s:sw() : indent(parlnum) end elseif (counts[0] != '1' && counts[1] != '1' && counts[2] != '1') && \ (!s:Match(s:PrevNonBlankNonString(lnum - 1), s:block_regex) || From 06d8d160e0400c4e088bbae64fec53ad3f1bda2b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 2 Jun 2016 17:33:52 -0700 Subject: [PATCH 150/929] Improve jsClassMethodDefinition matches Currently in a class definition, you can actually have a method called `get`. However with our match of `get` `set` and `static` as keywords, we broke the ability to properly support those method names. This should fix those cases. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ff3e302d..91dad525 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -221,7 +221,7 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite conta syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained -syntax keyword jsClassMethodDefinitions get set static contained nextgroup=jsFuncName skipwhite skipempty +syntax match jsClassMethodDefinitions /\%(get\|set\|static\)\%( \k\+\)\@=/ contained nextgroup=jsFuncName skipwhite skipempty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " Define the default highlighting. From c9dc41ff5bbb4f056463a504a1f326a84ffc5286 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 2 Jun 2016 21:07:05 -0700 Subject: [PATCH 151/929] working detection of object/array properties (#460) * working detection of object properties the previous method is likely slower and doesn't really work * fun args supported also add support for func args --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6a477b7b..d6144a9b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -383,9 +383,8 @@ function GetJavascriptIndent() if parlnum > 0 return !s:Match(parlnum, s:operator_first) ? indent(lnum) + s:sw() : indent(parlnum) end - elseif (counts[0] != '1' && counts[1] != '1' && counts[2] != '1') && - \ (!s:Match(s:PrevNonBlankNonString(lnum - 1), s:block_regex) || - \ s:Match(lnum, s:var_stmt)) + elseif line !~ s:line_pre . ',\s*\%(\%(\([''"]\).*\1\)\|\%(\h\w*\)\)\s*:.*' . s:line_term && + \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen' " otherwise, indent 1 level return indent(lnum) + s:sw() end From 943d90b293baa2c5d53e7ac4d3cfc71a1bac1ae9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 3 Jun 2016 11:10:06 -0700 Subject: [PATCH 152/929] spread operator doesn't change indent (#462) i don't know if this actually makes very much sense ``` 10 ..toString() ``` is invalid --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d6144a9b..53cd0acd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -94,7 +94,7 @@ endfunction " Regex that defines blocks. let s:block_regex = '[{([]' . s:line_term -let s:operator_first = s:line_pre . '\%([.,:?]\|\([-/+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' +let s:operator_first = s:line_pre . '\%([,:?]\|\([-/.+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' From ec96793e9b1db5d32b7a4e6f77ae80c45f78cf05 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 29 Apr 2016 11:58:57 -0700 Subject: [PATCH 153/929] First attempted pass at jsObjectBlock --- syntax/javascript.vim | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 91dad525..ca3178b4 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -30,7 +30,9 @@ syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false syntax keyword jsModules import export contained -syntax keyword jsModuleWords default from as contained +syntax keyword jsModules export contained nextgroup=jsObjectBlock skipwhite skipempty +syntax keyword jsModuleWords from as contained +syntax keyword jsModuleWords default contained nextgroup=jsObjectBlock skipwhite skipempty syntax keyword jsOf of contained syntax keyword jsArgsObj arguments @@ -185,13 +187,14 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs +syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsObjectBlock,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment,jsGenerator contained fold syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition extend +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition,jsObjectBlock extend +syntax region jsObjectBlock matchgroup=jsObjectBraces start="\%()[\r\n\t ]*\)\@/ skipwhite nextgroup=jsFuncBlock contains= syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs skipwhite skipempty syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty " These versions of jsFuncName is for use in object declarations with no key -" syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator -" syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsBlock contains=jsGenerator +syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator +syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsLineComment,jsStringS,jsStringD,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots @@ -305,6 +308,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncParens Noise HiLink jsClassBraces Noise HiLink jsClassNoise Noise + HiLink jsObjectBraces Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsTemplateBraces jsBraces From 671e605cdca372c7826152553ff9ce92862d48b8 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 15:07:29 -0700 Subject: [PATCH 154/929] Notes and general cleanup * Re-organized a couple things * Added some TODO comments to remind myself what needs to be done --- syntax/javascript.vim | 127 ++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 68 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ca3178b4..37be4b84 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -20,8 +20,13 @@ endif setlocal iskeyword+=$ syntax sync fromstart +" TODO: Figure out what type of casing I need +" syntax case ignore +syntax case match syntax match jsNoise /[:,\;\.]\{1}/ +syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ +syntax match jsParensError /\%()\|}\|\]\)/ "" Program Keywords syntax keyword jsStorageClass const var let @@ -30,33 +35,28 @@ syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false syntax keyword jsModules import export contained +" TODO: Not sure if jsObjectBlock should be nextgroup here syntax keyword jsModules export contained nextgroup=jsObjectBlock skipwhite skipempty syntax keyword jsModuleWords from as contained syntax keyword jsModuleWords default contained nextgroup=jsObjectBlock skipwhite skipempty syntax keyword jsOf of contained syntax keyword jsArgsObj arguments -syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsLineComment,jsComment,jsStringS,jsStringD,jsTemplateString,jsNoise,jsBlock - -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition +syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsComment,jsString,jsTemplateString,jsNoise,jsBlock +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments syntax keyword jsCommentTodo TODO FIXME XXX TBD contained -syntax region jsLineComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend +syntax region jsComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend +syntax region jsComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold +syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend syntax region jsEnvComment start="\%^#!" end="$" display -syntax region jsLineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold syntax region jsCvsTag start="\$\cid:" end="\$" oneline contained -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend "" JSDoc / JSDoc Toolkit if !exists("javascript_ignore_javaScriptdoc") - syntax case ignore - "" syntax coloring for javadoc comments (HTML) - "syntax include @javaHtml :p:h/html.vim - "unlet b:current_syntax - - syntax region jsBlockComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold + syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite @@ -77,20 +77,20 @@ if !exists("javascript_ignore_javaScriptdoc") syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags - - syntax case match endif "" JSDoc end -syntax case match +" Strings, Templates, Numbers +syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString keepend +syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ +syntax keyword jsNumber Infinity +syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ -"" Syntax in the JavaScript code -syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ +" Regular Expressions syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained syntax region jsTemplateVar matchgroup=jsTemplateBraces start=+${+ end=+}+ contained contains=@jsExpression -syntax region jsStringD start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsStringS start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc -syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString keepend syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained @@ -104,11 +104,10 @@ if v:version > 703 || v:version == 603 && has("patch1088") else syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@\|\<0[xX]\x\+\>/ -syntax keyword jsNumber Infinity -syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ + syntax match jsObjectKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey contained syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained +" TODO: Put this in jsClassBlock only syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite @@ -121,41 +120,38 @@ exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') exe 'syntax keyword jsStatic static '.(exists('g:javascript_conceal_static') ? 'conceal cchar='.g:javascript_conceal_static : '') exe 'syntax keyword jsSuper super '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') -"" Statement Keywords -syntax keyword jsStatement break continue with +" Statement Keywords +syntax keyword jsStatement break continue with yield +" TODO: Create special block regions for these 2 lines syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for +" TODO: Contain these in Switch block only syntax keyword jsLabel case default -syntax keyword jsKeyword yield +" TODO: Create try/catch blocks syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat - +" Keywords +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError - syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval - syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public -"" DOM/HTML/CSS specified things - -" DOM2 Objects +"" DOM2 Objects syntax keyword jsGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction syntax keyword jsExceptions DOMException -" DOM2 CONSTANT +"" DOM2 CONSTANT syntax keyword jsDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE -" HTML events and internal variables -syntax case ignore +"" HTML events and internal variables syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize -syntax case match -" Follow stuff should be highligh within a special context +" Following stuff should be highligh within a special context " While it can't be handled with context depended with Regex based highlight " So, turn it off by default +" TODO: Can we just remove this? if exists("javascript_enable_domhtmlcss") " DOM2 things @@ -187,32 +183,26 @@ endif "DOM/HTML/CSS "" end DOM/HTML/CSS specified things "" Code blocks -syntax cluster jsExpression contains=jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsObjectBlock,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs -syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend -syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsBlockComment,jsLineComment,jsGenerator contained fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition,jsObjectBlock extend -syntax region jsObjectBlock matchgroup=jsObjectBraces start="\%()[\r\n\t ]*\)\@/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +" TODO: This should really only be for arrays... figure out the array scope better +syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensError,jsBracket,jsParen,jsBlock,@htmlPreproc fold +" TODO: This is a region to create jsParensErrors. We'll need to create special contained regions for if/else/switch statements +syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend +syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator contained fold +syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend +" TODO: jsBlock should be made ONLY for switch/if/else statements +syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition,jsObjectBlock extend +" TODO: Should NOT include jsAll - should onyl accept aspects for keys, using nextgroup for everything else +syntax region jsObjectBlock matchgroup=jsObjectBraces start="\%()[\r\n\t ]*\)\@\)\@=/ skipwhite contains=jsFuncArg " Matches a series of arguments surrounded in parens syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend +exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') + syntax keyword jsClassKeywords extends class contained syntax match jsClassNoise /\./ contained syntax match jsClassMethodDefinitions /\%(get\|set\|static\)\%( \k\+\)\@=/ contained nextgroup=jsFuncName skipwhite skipempty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty +" TODO: Look to optimize this, so it can be properly used in nextgroup= stuff +syntax cluster jsExpression contains=jsComment,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsObjectBlock,jsBlock,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs +" TODO: This may actually need to be optimized +syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException + " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet @@ -239,9 +237,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") endif HiLink jsFuncArgRest Special HiLink jsComment Comment - HiLink jsLineComment Comment HiLink jsEnvComment PreProc - HiLink jsBlockComment Comment HiLink jsCommentTodo Todo HiLink jsCvsTag Function HiLink jsDocTags Special @@ -251,8 +247,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsDocTypeRecord jsDocType HiLink jsDocTypeNoParam Type HiLink jsDocParam Label - HiLink jsStringS String - HiLink jsStringD String + HiLink jsString String HiLink jsTemplateString String HiLink jsTaggedTemplate StorageClass HiLink jsTernaryIfOperator Conditional @@ -273,7 +268,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsRepeat Repeat HiLink jsStatement Statement HiLink jsException Exception - HiLink jsKeyword Keyword HiLink jsAsyncKeyword Keyword HiLink jsArrowFunction Type HiLink jsFunction Type @@ -283,9 +277,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsArgsObj Special HiLink jsError Error HiLink jsParensError Error - HiLink jsParensErrA Error - HiLink jsParensErrB Error - HiLink jsParensErrC Error HiLink jsOperator Operator HiLink jsOf Operator HiLink jsStorageClass StorageClass From 6c2de108fbe66faea75e358774a12da1b44c0de0 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 15:21:51 -0700 Subject: [PATCH 155/929] Removing DOM CSS stuff I truly believe this has no place in a JS syntax file... --- syntax/javascript.vim | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 37be4b84..f72543b6 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -148,40 +148,6 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT "" HTML events and internal variables syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize -" Following stuff should be highligh within a special context -" While it can't be handled with context depended with Regex based highlight -" So, turn it off by default -" TODO: Can we just remove this? -if exists("javascript_enable_domhtmlcss") - - " DOM2 things - syntax match jsDomElemAttrs contained /\%(nodeName\|nodeValue\|nodeType\|parentNode\|childNodes\|firstChild\|lastChild\|previousSibling\|nextSibling\|attributes\|ownerDocument\|namespaceURI\|prefix\|localName\|tagName\)\>/ - syntax match jsDomElemFuncs contained /\%(insertBefore\|replaceChild\|removeChild\|appendChild\|hasChildNodes\|cloneNode\|normalize\|isSupported\|hasAttributes\|getAttribute\|setAttribute\|removeAttribute\|getAttributeNode\|setAttributeNode\|removeAttributeNode\|getElementById\|getElementsByClassName\|getElementsByTagName\|querySelector\|querySelectorAll\|getAttributeNS\|setAttributeNS\|removeAttributeNS\|getAttributeNodeNS\|setAttributeNodeNS\|getElementsByTagNameNS\|hasAttribute\|hasAttributeNS\)\>/ nextgroup=jsParen skipwhite - " HTML things - syntax match jsHtmlElemAttrs contained /\%(className\|clientHeight\|clientLeft\|clientTop\|clientWidth\|dir\|id\|innerHTML\|lang\|length\|offsetHeight\|offsetLeft\|offsetParent\|offsetTop\|offsetWidth\|scrollHeight\|scrollLeft\|scrollTop\|scrollWidth\|style\|tabIndex\|title\)\>/ - syntax match jsHtmlElemFuncs contained /\%(blur\|click\|focus\|scrollIntoView\|addEventListener\|dispatchEvent\|removeEventListener\|item\)\>/ nextgroup=jsParen skipwhite - - " CSS Styles in JavaScript - syntax keyword jsCssStyles contained color font fontFamily fontSize fontSizeAdjust fontStretch fontStyle fontVariant fontWeight letterSpacing lineBreak lineHeight quotes rubyAlign rubyOverhang rubyPosition - syntax keyword jsCssStyles contained textAlign textAlignLast textAutospace textDecoration textIndent textJustify textJustifyTrim textKashidaSpace textOverflowW6 textShadow textTransform textUnderlinePosition - syntax keyword jsCssStyles contained unicodeBidi whiteSpace wordBreak wordSpacing wordWrap writingMode - syntax keyword jsCssStyles contained bottom height left position right top width zIndex - syntax keyword jsCssStyles contained border borderBottom borderLeft borderRight borderTop borderBottomColor borderLeftColor borderTopColor borderBottomStyle borderLeftStyle borderRightStyle borderTopStyle borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderColor borderStyle borderWidth borderCollapse borderSpacing captionSide emptyCells tableLayout - syntax keyword jsCssStyles contained margin marginBottom marginLeft marginRight marginTop outline outlineColor outlineStyle outlineWidth padding paddingBottom paddingLeft paddingRight paddingTop - syntax keyword jsCssStyles contained listStyle listStyleImage listStylePosition listStyleType - syntax keyword jsCssStyles contained background backgroundAttachment backgroundColor backgroundImage backgroundPosition backgroundPositionX backgroundPositionY backgroundRepeat - syntax keyword jsCssStyles contained clear clip clipBottom clipLeft clipRight clipTop content counterIncrement counterReset cssFloat cursor direction display filter layoutGrid layoutGridChar layoutGridLine layoutGridMode layoutGridType - syntax keyword jsCssStyles contained marks maxHeight maxWidth minHeight minWidth opacity MozOpacity overflow overflowX overflowY verticalAlign visibility zoom cssText - syntax keyword jsCssStyles contained scrollbar3dLightColor scrollbarArrowColor scrollbarBaseColor scrollbarDarkShadowColor scrollbarFaceColor scrollbarHighlightColor scrollbarShadowColor scrollbarTrackColor - - " Highlight ways - syntax match jsDotNotation "\." nextgroup=jsPrototype,jsDomElemAttrs,jsDomElemFuncs,jsHtmlElemAttrs,jsHtmlElemFuncs - syntax match jsDotNotation "\.style\." nextgroup=jsCssStyles - -endif "DOM/HTML/CSS - -"" end DOM/HTML/CSS specified things - "" Code blocks " TODO: This should really only be for arrays... figure out the array scope better syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensError,jsBracket,jsParen,jsBlock,@htmlPreproc fold From a0d1abc172cd0d701c115b7c0197c5dfa288f278 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 15:39:50 -0700 Subject: [PATCH 156/929] More refactoring * Checked all aspects of jsExpression - In preparation for it to be properly used * Code style tweaks - contained is such an important option, ensuring it's always first --- syntax/javascript.vim | 108 ++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 51 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index f72543b6..723957ee 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -30,28 +30,29 @@ syntax match jsParensError /\%()\|}\|\]\)/ "" Program Keywords syntax keyword jsStorageClass const var let -syntax keyword jsOperator delete instanceof typeof void new in +syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax keyword jsModules import export contained +syntax keyword jsModules contained import export " TODO: Not sure if jsObjectBlock should be nextgroup here -syntax keyword jsModules export contained nextgroup=jsObjectBlock skipwhite skipempty -syntax keyword jsModuleWords from as contained -syntax keyword jsModuleWords default contained nextgroup=jsObjectBlock skipwhite skipempty -syntax keyword jsOf of contained -syntax keyword jsArgsObj arguments +syntax keyword jsModules contained export nextgroup=jsObjectBlock skipwhite skipempty +syntax keyword jsModuleWords contained from as +syntax keyword jsModuleWords contained default nextgroup=jsObjectBlock skipwhite skipempty +" TODO: This should be contained in jsFuncBlock only +syntax keyword jsArgsObj contained arguments syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsComment,jsString,jsTemplateString,jsNoise,jsBlock -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition +" TODO: Can the contains just be @jsExpression? +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments -syntax keyword jsCommentTodo TODO FIXME XXX TBD contained +syntax keyword jsCommentTodo contained TODO FIXME XXX TBD syntax region jsComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend syntax region jsComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend syntax region jsEnvComment start="\%^#!" end="$" display -syntax region jsCvsTag start="\$\cid:" end="\$" oneline contained +syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline "" JSDoc / JSDoc Toolkit if !exists("javascript_ignore_javaScriptdoc") @@ -69,11 +70,11 @@ if !exists("javascript_ignore_javaScriptdoc") " other tags (no extra syntax) syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - syntax region jsDocType matchgroup=jsDocTypeBrackets start="{" end="}" oneline contained nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord + syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" oneline nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite - syntax region jsDocTypeRecord start=/{/ end=/}/ contained extend contains=jsDocTypeRecord - syntax region jsDocTypeRecord start=/\[/ end=/\]/ contained extend contains=jsDocTypeRecord - syntax region jsDocTypeNoParam start="{" end="}" oneline contained + syntax region jsDocTypeRecord contained start=/{/ end=/}/ extend contains=jsDocTypeRecord + syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ extend contains=jsDocTypeRecord + syntax region jsDocTypeNoParam contained start="{" end="}" oneline syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags @@ -89,44 +90,46 @@ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ " Regular Expressions -syntax match jsSpecial "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" contained -syntax region jsTemplateVar matchgroup=jsTemplateBraces start=+${+ end=+}+ contained contains=@jsExpression -syntax region jsRegexpCharClass start=+\[+ skip=+\\.+ end=+\]+ contained -syntax match jsRegexpBoundary "\v%(\<@![\^$]|\\[bB])" contained -syntax match jsRegexpBackRef "\v\\[1-9][0-9]*" contained -syntax match jsRegexpQuantifier "\v\\@]" contained -syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax region jsRegexpGroup start="\\\@]" +syntax region jsRegexpGroup contained start="\\\@ 703 || v:version == 603 && has("patch1088") syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50\(\s*:\)\@=/ contains=jsFunctionKey contained -syntax match jsFunctionKey /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ contained +syntax match jsObjectKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey +syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ " TODO: Put this in jsClassBlock only syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite -syntax match jsDecoratorFunction "[a-zA-Z_][a-zA-Z0-9_.]*" display contained nextgroup=jsFunc skipwhite +" TODO: This should contained within function definition stuff... +syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" display nextgroup=jsFunc skipwhite exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') -exe 'syntax keyword jsReturn return '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') +exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') -exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') -exe 'syntax keyword jsStatic static '.(exists('g:javascript_conceal_static') ? 'conceal cchar='.g:javascript_conceal_static : '') -exe 'syntax keyword jsSuper super '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') +" TODO: This group should only be included in functions +exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') +" TODO: this group should only be contained in functions +exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') " Statement Keywords -syntax keyword jsStatement break continue with yield +syntax keyword jsStatement contained break continue with yield " TODO: Create special block regions for these 2 lines syntax keyword jsConditional if else switch syntax keyword jsRepeat do while for " TODO: Contain these in Switch block only -syntax keyword jsLabel case default +syntax keyword jsLabel contained case default " TODO: Create try/catch blocks syntax keyword jsException try catch throw finally syntax keyword jsAsyncKeyword async await @@ -135,17 +138,21 @@ syntax keyword jsAsyncKeyword async await syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval +" TODO: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public -"" DOM2 Objects +" DISCUSS: Should we really be matching stuff like this? +" DOM2 Objects syntax keyword jsGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction syntax keyword jsExceptions DOMException -"" DOM2 CONSTANT +" DISCUSS: Should we really be matching stuff like this? +" DOM2 CONSTANT syntax keyword jsDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE -"" HTML events and internal variables +" DISCUSS: Should we really be special matching on these props? +" HTML events and internal variables syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks @@ -153,8 +160,8 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensError,jsBracket,jsParen,jsBlock,@htmlPreproc fold " TODO: This is a region to create jsParensErrors. We'll need to create special contained regions for if/else/switch statements syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend -syntax region jsClassBlock matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator contained fold -syntax region jsFuncBlock matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend +syntax region jsClassBlock matchgroup=jsClassBraces contained start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator fold +syntax region jsFuncBlock matchgroup=jsFuncBraces contained start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend " TODO: jsBlock should be made ONLY for switch/if/else statements syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition,jsObjectBlock extend " TODO: Should NOT include jsAll - should onyl accept aspects for keys, using nextgroup for everything else @@ -165,13 +172,13 @@ syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty " These versions of jsFuncName is for use in object declarations with no key - " TODO: May not need this at all actually -syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator -syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator +syntax match jsFuncName contained /\%(^[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator +syntax match jsFuncName contained /\%(,[\r\n\t ]*\)\@<=[*\r\n\t ]*[a-zA-Z_$][0-9a-zA-Z_$]*[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty containedin=jsObjectBlock contains=jsGenerator syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty -syntax match jsFuncArgCommas contained ',' -syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots -syntax match jsFuncArgRestDots contained /\.\.\./ +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax match jsFuncArgCommas contained ',' +syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots +syntax match jsFuncArgRestDots contained /\.\.\./ " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend @@ -181,15 +188,15 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite conta exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') -syntax keyword jsClassKeywords extends class contained -syntax match jsClassNoise /\./ contained -syntax match jsClassMethodDefinitions /\%(get\|set\|static\)\%( \k\+\)\@=/ contained nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty +syntax keyword jsClassKeywords contained extends class +syntax match jsClassNoise contained /\./ +syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsFuncName skipwhite skipempty +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " TODO: Look to optimize this, so it can be properly used in nextgroup= stuff -syntax cluster jsExpression contains=jsComment,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsObjectBlock,jsBlock,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsImportContainer,jsExportContainer,jsArgsObj,jsDecorator,jsAsyncKeyword,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs +syntax cluster jsExpression contains=jsBracket,jsParen,jsObjectBlock,jsBlock,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs " TODO: This may actually need to be optimized -syntax cluster jsAll contains=@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException,jsComment,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -248,7 +255,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsStorageClass StorageClass HiLink jsClassKeywords Structure HiLink jsThis Special - HiLink jsStatic Special HiLink jsSuper Special HiLink jsNan Number HiLink jsNull Type From c48323a215a472a0a4a2a71ca08f10096e1eeb73 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 17:04:10 -0700 Subject: [PATCH 157/929] Tons of syntax block granularity With the refactoring of jsExpression, I was able to add a ton of finer granularity to various new region types. Current new regions: * jsObject * jsArray * jsParenIfElse * jsParenRepeat * jsParenSwitch * jsClassBlock * jsBlock * jsSwitchBlock * jsTernaryIf --- syntax/javascript.vim | 78 +++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 723957ee..5a75daec 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -42,9 +42,10 @@ syntax keyword jsModuleWords contained default nextgroup=jsObjectBlock skipwh " TODO: This should be contained in jsFuncBlock only syntax keyword jsArgsObj contained arguments +" TODO: Go over these contains with a fine toothed comb syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsComment,jsString,jsTemplateString,jsNoise,jsBlock " TODO: Can the contains just be @jsExpression? -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition +syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsArray,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition "" JavaScript comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD @@ -81,9 +82,9 @@ if !exists("javascript_ignore_javaScriptdoc") endif "" JSDoc end " Strings, Templates, Numbers -syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@htmlPreproc,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial,@htmlPreproc +syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell +syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString keepend syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity @@ -100,16 +101,25 @@ syntax match jsRegexpOr contained "\v\<@!\|" syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]" syntax region jsRegexpGroup contained start="\\\@ 703 || v:version == 603 && has("patch1088") - syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50\(\s*:\)\@=/ contains=jsFunctionKey -syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ +syntax match jsObjectKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey nextgroup=jsObjectValue +syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue +syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue +syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression nextgroup=jsObjectValue keepend +syntax match jsObjectSeparator contained /,/ +syntax region jsObjectValue contained start=/:/ end=/,/ contains=@jsExpression keepend +syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty +syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ +syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsObjectFuncName skipwhite skipempty + + " TODO: Put this in jsClassBlock only -syntax match jsDecorator "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite +syntax match jsDecorator contained "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite " TODO: This should contained within function definition stuff... syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" display nextgroup=jsFunc skipwhite @@ -126,8 +136,9 @@ exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal " Statement Keywords syntax keyword jsStatement contained break continue with yield " TODO: Create special block regions for these 2 lines -syntax keyword jsConditional if else switch -syntax keyword jsRepeat do while for +syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock +syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch +syntax keyword jsRepeat do while for skipwhite skipempty nextgroup=jsParenRepeat " TODO: Contain these in Switch block only syntax keyword jsLabel contained case default " TODO: Create try/catch blocks @@ -157,23 +168,22 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus "" Code blocks " TODO: This should really only be for arrays... figure out the array scope better -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsAll,jsParensError,jsBracket,jsParen,jsBlock,@htmlPreproc fold +syntax region jsArray matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression fold extend " TODO: This is a region to create jsParensErrors. We'll need to create special contained regions for if/else/switch statements -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc fold extend -syntax region jsClassBlock matchgroup=jsClassBraces contained start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator fold -syntax region jsFuncBlock matchgroup=jsFuncBraces contained start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,@htmlPreproc,jsClassDefinition fold extend -" TODO: jsBlock should be made ONLY for switch/if/else statements -syntax region jsBlock matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsParensError,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc,jsClassDefinition,jsObjectBlock extend -" TODO: Should NOT include jsAll - should onyl accept aspects for keys, using nextgroup for everything else -syntax region jsObjectBlock matchgroup=jsObjectBraces start="\%()[\r\n\t ]*\)\@\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty " TODO: Look to optimize this, so it can be properly used in nextgroup= stuff -syntax cluster jsExpression contains=jsBracket,jsParen,jsObjectBlock,jsBlock,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs +syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError " TODO: This may actually need to be optimized -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException,jsComment,jsAsyncKeyword +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsComment,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -221,9 +231,10 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsDocTypeNoParam Type HiLink jsDocParam Label HiLink jsString String + HiLink jsObjectKeyString String HiLink jsTemplateString String HiLink jsTaggedTemplate StorageClass - HiLink jsTernaryIfOperator Conditional + HiLink jsTernaryIfOperator Operator HiLink jsRegexpString String HiLink jsRegexpBoundary SpecialChar HiLink jsRegexpQuantifier SpecialChar @@ -247,6 +258,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsGenerator jsFunction HiLink jsArrowFuncArgs jsFuncArgs HiLink jsFuncName Function + HiLink jsObjectFuncName Function HiLink jsArgsObj Special HiLink jsError Error HiLink jsParensError Error @@ -272,6 +284,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsClassBraces Noise HiLink jsClassNoise Noise HiLink jsObjectBraces Noise + HiLink jsObjectSeparator Noise HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsTemplateBraces jsBraces @@ -297,13 +310,14 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsCssStyles Label HiLink jsClassMethodDefinitions Type + HiLink jsObjectGetSet Type delcommand HiLink endif " Define the htmlJavaScript for HTML syntax html.vim -syntax cluster htmlJavaScript contains=@jsAll,jsBracket,jsParen,jsBlock -syntax cluster javaScriptExpression contains=@jsAll,jsBracket,jsParen,jsBlock,@htmlPreproc +syntax cluster htmlJavaScript contains=@jsAll,jsArray,jsParen,jsBlock +syntax cluster javaScriptExpression contains=@jsAll,jsArray,jsParen,jsBlock " Vim's default html.vim highlights all javascript as 'Special' hi! def link javaScript NONE From 533beaa3c504b4285b2f74d2b95da0797578d887 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 17:46:37 -0700 Subject: [PATCH 158/929] Bug fixes and tweaks I think this is actually in a really good place. It seems to work well in my test phaser.js file --- syntax/javascript.vim | 142 ++++++++++++++++++++---------------------- 1 file changed, 67 insertions(+), 75 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5a75daec..4f5bc07c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -39,7 +39,6 @@ syntax keyword jsModules contained import export syntax keyword jsModules contained export nextgroup=jsObjectBlock skipwhite skipempty syntax keyword jsModuleWords contained from as syntax keyword jsModuleWords contained default nextgroup=jsObjectBlock skipwhite skipempty -" TODO: This should be contained in jsFuncBlock only syntax keyword jsArgsObj contained arguments " TODO: Go over these contains with a fine toothed comb @@ -47,45 +46,11 @@ syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains= " TODO: Can the contains just be @jsExpression? syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsArray,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition -"" JavaScript comments -syntax keyword jsCommentTodo contained TODO FIXME XXX TBD -syntax region jsComment start=+\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell extend -syntax region jsComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend contains=jsCommentTodo,@Spell fold -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend -syntax region jsEnvComment start="\%^#!" end="$" display -syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline - -"" JSDoc / JSDoc Toolkit -if !exists("javascript_ignore_javaScriptdoc") - "" syntax coloring for javadoc comments (HTML) - syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold - - " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite - " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite - " tags containing type but no param - syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite - " tags containing references - syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite - " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - - syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" oneline nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord - syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite - syntax region jsDocTypeRecord contained start=/{/ end=/}/ extend contains=jsDocTypeRecord - syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ extend contains=jsDocTypeRecord - syntax region jsDocTypeNoParam contained start="{" end="}" oneline - syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" - syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags -endif "" JSDoc end - " Strings, Templates, Numbers -syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell -syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell -syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial -syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString keepend +syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend +syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend +syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial extend +syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString extend syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ @@ -101,24 +66,23 @@ syntax match jsRegexpOr contained "\v\<@!\|" syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]" syntax region jsRegexpGroup contained start="\\\@ 703 || v:version == 603 && has("patch1088") - syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50\(\s*:\)\@=/ contains=jsFunctionKey nextgroup=jsObjectValue +syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue -syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression nextgroup=jsObjectValue keepend +syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression nextgroup=jsObjectValue extend syntax match jsObjectSeparator contained /,/ -syntax region jsObjectValue contained start=/:/ end=/,/ contains=@jsExpression keepend +syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsObjectFuncName skipwhite skipempty -" TODO: Put this in jsClassBlock only syntax match jsDecorator contained "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite " TODO: This should contained within function definition stuff... syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" display nextgroup=jsFunc skipwhite @@ -128,22 +92,20 @@ exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') -" TODO: This group should only be included in functions exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') -" TODO: this group should only be contained in functions exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') " Statement Keywords -syntax keyword jsStatement contained break continue with yield -" TODO: Create special block regions for these 2 lines -syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock -syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch -syntax keyword jsRepeat do while for skipwhite skipempty nextgroup=jsParenRepeat -" TODO: Contain these in Switch block only -syntax keyword jsLabel contained case default -" TODO: Create try/catch blocks -syntax keyword jsException try catch throw finally -syntax keyword jsAsyncKeyword async await +syntax keyword jsStatement contained break continue with yield +syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock +syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch +syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat +syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock +syntax keyword jsLabel contained case default +syntax keyword jsException try finally skipwhite skipempty nextgroup=jsBlock +syntax keyword jsException catch skipwhite skipempty nextgroup=jsParenCatch +syntax keyword jsException throw +syntax keyword jsAsyncKeyword async await " Keywords syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat @@ -167,25 +129,23 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -" TODO: This should really only be for arrays... figure out the array scope better syntax region jsArray matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression fold extend -" TODO: This is a region to create jsParensErrors. We'll need to create special contained regions for if/else/switch statements -" syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll,jsOf,jsParensError,jsParen,jsBracket,jsBlock fold extend -syntax region jsParen matchgroup=jsParens start="(" end=")" contains=@jsAll fold extend -syntax region jsParenIfElse contained matchgroup=jsParens start="(" end=")" contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsParenRepeat contained matchgroup=jsParens start="(" end=")" contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsParenSwitch contained matchgroup=jsParens start="(" end=")" contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock fold extend -syntax region jsClassBlock contained matchgroup=jsClassBraces start="{" end="}" contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator fold -syntax region jsFuncBlock contained matchgroup=jsFuncBraces start="{" end="}" contains=@jsAll fold extend -syntax region jsBlock contained matchgroup=jsBraces start="{" end="}" contains=@jsAll extend fold -syntax region jsSwitchBlock contained matchgroup=jsBraces start="{" end="}" contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start="{" end="}" contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator extend keepend -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=+?+ end=+:+ contains=@jsExpression +syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll fold extend +syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend +syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend +syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock fold extend +syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock fold extend +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator fold +syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll fold extend +syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment extend +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs skipwhite skipempty syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock keepend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock extend skipwhite skipempty syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ @@ -203,10 +163,42 @@ syntax match jsClassNoise contained /\./ syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsFuncName skipwhite skipempty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty -" TODO: Look to optimize this, so it can be properly used in nextgroup= stuff -syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError -" TODO: This may actually need to be optimized -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsComment,jsAsyncKeyword +" Comments +syntax keyword jsCommentTodo contained TODO FIXME XXX TBD +syntax region jsComment start=+\/\/+ end=+$+ contains=jsCommentTodo,@Spell extend keepend +syntax region jsComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ contains=jsCommentTodo,@Spell fold extend keepend +syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend keepend +syntax region jsEnvComment start="\%^#!" end="$" display +syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline + +"" JSDoc / JSDoc Toolkit +if !exists("javascript_ignore_javaScriptdoc") + "" syntax coloring for javadoc comments (HTML) + syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold + + " tags containing a param + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + " tags containing type and param + syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite + " tags containing type but no param + syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite + " tags containing references + syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite + " other tags (no extra syntax) + syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" + + syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" oneline nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord + syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite + syntax region jsDocTypeRecord contained start=/{/ end=/}/ extend contains=jsDocTypeRecord + syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ extend contains=jsDocTypeRecord + syntax region jsDocTypeNoParam contained start="{" end="}" oneline + syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" + syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" + syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags +endif "" JSDoc end + +syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArgsObj,jsThis,jsSuper +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already From da492ea96c0351707202bf88c52db4b938cb3d8e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 18:14:29 -0700 Subject: [PATCH 159/929] Improvements to import/exports syntax matching --- syntax/javascript.vim | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4f5bc07c..d4feffa7 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -16,7 +16,7 @@ if !exists('g:javascript_conceal') let g:javascript_conceal = 0 endif -"" dollar sign is permittd anywhere in an identifier +" Dollar sign is permittd anywhere in an identifier setlocal iskeyword+=$ syntax sync fromstart @@ -28,23 +28,24 @@ syntax match jsNoise /[:,\;\.]\{1}/ syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsParensError /\%()\|}\|\]\)/ -"" Program Keywords +" Program Keywords syntax keyword jsStorageClass const var let syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false -syntax keyword jsModules contained import export -" TODO: Not sure if jsObjectBlock should be nextgroup here -syntax keyword jsModules contained export nextgroup=jsObjectBlock skipwhite skipempty -syntax keyword jsModuleWords contained from as -syntax keyword jsModuleWords contained default nextgroup=jsObjectBlock skipwhite skipempty -syntax keyword jsArgsObj contained arguments - -" TODO: Go over these contains with a fine toothed comb -syntax region jsImportContainer start="^\s\?import \?" end=";\|$" contains=jsModules,jsModuleWords,jsComment,jsString,jsTemplateString,jsNoise,jsBlock -" TODO: Can the contains just be @jsExpression? -syntax region jsExportContainer start="^\s\?export \?" end="$" contains=jsModules,jsModuleWords,jsComment,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsArray,jsParen,jsFuncCall,jsUndefined,jsNan,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsArgsObj,jsBlock,jsClassDefinition + +" Modules +syntax keyword jsModuleKeywords contained import +syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=@jsExpression +syntax keyword jsModuleOperators contained from +syntax keyword jsModuleOperators contained as +syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise +syntax match jsModuleAsterisk contained /*/ +syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression +syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk +syntax match jsExportContainer /\ / contains=jsModuleKeywords skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault +syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend @@ -149,6 +150,7 @@ syntax region jsFuncArgs contained matchgroup=jsFuncParens start='( syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ +syntax keyword jsArguments contained arguments " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend @@ -197,7 +199,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArgsObj,jsThis,jsSuper +syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword " Define the default highlighting. @@ -251,7 +253,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsArrowFuncArgs jsFuncArgs HiLink jsFuncName Function HiLink jsObjectFuncName Function - HiLink jsArgsObj Special + HiLink jsArguments Special HiLink jsError Error HiLink jsParensError Error HiLink jsOperator Operator @@ -284,11 +286,13 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsExceptions Special HiLink jsFutureKeys Special HiLink jsBuiltins Special - HiLink jsModules Include - HiLink jsModuleWords Include + HiLink jsModuleKeywords Include + HiLink jsModuleOperators Include + HiLink jsModuleDefault Include HiLink jsDecorator Special HiLink jsFuncArgRestDots Noise HiLink jsFuncArgDestructuring Noise + HiLink jsModuleAsterisk Noise HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From 99d658fec94b57ea4c4ce9b854404d6cb397b7ea Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 18:25:48 -0700 Subject: [PATCH 160/929] Code style tweaks Trying to make argument order more uniform --- syntax/javascript.vim | 80 +++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d4feffa7..d017e3f5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -73,38 +73,33 @@ else endif syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey nextgroup=jsObjectValue -syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue -syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell nextgroup=jsObjectValue -syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression nextgroup=jsObjectValue extend +syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue +syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue +syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue +syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue extend syntax match jsObjectSeparator contained /,/ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend -syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ nextgroup=jsFuncArgs skipwhite skipempty +syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ -syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsObjectFuncName skipwhite skipempty +syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName - -syntax match jsDecorator contained "@" display contains=jsDecoratorFunction nextgroup=jsDecoratorFunction skipwhite -" TODO: This should contained within function definition stuff... -syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" display nextgroup=jsFunc skipwhite - -exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') -exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') -exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') -exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') -exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') -exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') -exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') +exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') +exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') +exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') +exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') +exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') +exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') +exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') " Statement Keywords syntax keyword jsStatement contained break continue with yield -syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock -syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch -syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat -syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock +syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock +syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch +syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat +syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock syntax keyword jsLabel contained case default -syntax keyword jsException try finally skipwhite skipempty nextgroup=jsBlock -syntax keyword jsException catch skipwhite skipempty nextgroup=jsParenCatch +syntax keyword jsException try finally skipwhite skipempty nextgroup=jsBlock +syntax keyword jsException catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw syntax keyword jsAsyncKeyword async await @@ -143,27 +138,29 @@ syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment extend syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression -syntax match jsGenerator contained /\*/ nextgroup=jsFuncName,jsFuncArgs skipwhite skipempty -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=jsFuncArgs skipwhite skipempty +syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs nextgroup=jsFuncBlock extend skipwhite skipempty +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs skipwhite skipempty nextgroup=jsFuncBlock extend syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ syntax keyword jsArguments contained arguments " Matches a single keyword argument with no parens -syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend +syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend " Matches a series of arguments surrounded in parens -syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ skipempty skipwhite contains=jsFuncArgs nextgroup=jsArrowFunction extend +syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend -exe 'syntax match jsFunction /\/ nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -exe 'syntax match jsArrowFunction /=>/ skipwhite nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +exe 'syntax match jsFunction /\/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ nextgroup=jsFuncName skipwhite skipempty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise nextgroup=jsClassBlock skipwhite skipempty +syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock +syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction +syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD @@ -179,20 +176,20 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" nextgroup=jsDocParam skipwhite + syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" nextgroup=jsDocType skipwhite + syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType " tags containing type but no param - syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" nextgroup=jsDocTypeNoParam skipwhite + syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam " tags containing references - syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" nextgroup=jsDocSeeTag skipwhite + syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag " other tags (no extra syntax) syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" oneline nextgroup=jsDocParam skipwhite contains=jsDocTypeRecord - syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite - syntax region jsDocTypeRecord contained start=/{/ end=/}/ extend contains=jsDocTypeRecord - syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ extend contains=jsDocTypeRecord + syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam + syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam + syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend + syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend syntax region jsDocTypeNoParam contained start="{" end="}" oneline syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" @@ -290,6 +287,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleOperators Include HiLink jsModuleDefault Include HiLink jsDecorator Special + HiLink jsDecoratorFunction Special HiLink jsFuncArgRestDots Noise HiLink jsFuncArgDestructuring Noise HiLink jsModuleAsterisk Noise From 9550877e615a5b614e21d418022448ef44b107f6 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 18:33:42 -0700 Subject: [PATCH 161/929] jsTaggedTemplate tweaks I don't think it needs to be a region, and infact incurs some annoying complexity if so --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d017e3f5..7e6f7ba3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -51,7 +51,7 @@ syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial extend -syntax region jsTaggedTemplate start=/\k\+\%([\n\s]\+\)\?`/ end=+`+ contains=jsTemplateString extend +syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ From 79b73b3fe609f59cf113a97f5207a4397a02177c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 18:35:39 -0700 Subject: [PATCH 162/929] Whitespace --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7e6f7ba3..3c594c5f 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -67,9 +67,9 @@ syntax match jsRegexpOr contained "\v\<@!\|" syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]" syntax region jsRegexpGroup contained start="\\\@ 703 || v:version == 603 && has("patch1088") - syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50 Date: Sun, 5 Jun 2016 19:04:00 -0700 Subject: [PATCH 163/929] First pass at fix for #433 --- syntax/javascript.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3c594c5f..d83594e5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -131,7 +131,7 @@ syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock fold extend syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll fold extend syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold @@ -157,10 +157,12 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName +syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" +syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassEquals +syntax match jsClassEquals contained /=/ skipwhite skipempty nextgroup=@jsExpression " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD @@ -291,6 +293,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncArgRestDots Noise HiLink jsFuncArgDestructuring Noise HiLink jsModuleAsterisk Noise + HiLink jsClassEquals Operator + HiLink jsClassProperty Identifier HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From a0155f59d9b5590ae654b1eeb6c0a9340ab7edc0 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 19:46:48 -0700 Subject: [PATCH 164/929] First pass at fixing/supporting #425 & #393 There is one caveat right now, to properly support it, we sort of require semicolons. Not sure if this is something people will be happy with or not... --- syntax/javascript.vim | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d83594e5..5637af84 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -76,7 +76,7 @@ syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBa syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue -syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue extend +syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend syntax match jsObjectSeparator contained /,/ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs @@ -131,7 +131,7 @@ syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock fold extend syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsNoise fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll fold extend syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold @@ -139,7 +139,7 @@ syntax region jsObject matchgroup=jsObjectBraces start=/{/ syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ skipwhite skipempty nextgroup=jsFuncArgs +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs skipwhite skipempty nextgroup=jsFuncBlock extend syntax match jsFuncArgCommas contained ',' @@ -161,8 +161,10 @@ syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+ syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" -syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassEquals -syntax match jsClassEquals contained /=/ skipwhite skipempty nextgroup=@jsExpression +syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue +syntax region jsClassValue contained matchgroup=jsNoise start=/=/ end=/;/ contains=@jsExpression +syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs extend +syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD @@ -251,6 +253,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsGenerator jsFunction HiLink jsArrowFuncArgs jsFuncArgs HiLink jsFuncName Function + HiLink jsClassFuncName jsFuncName HiLink jsObjectFuncName Function HiLink jsArguments Special HiLink jsError Error @@ -293,7 +296,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncArgRestDots Noise HiLink jsFuncArgDestructuring Noise HiLink jsModuleAsterisk Noise - HiLink jsClassEquals Operator HiLink jsClassProperty Identifier HiLink jsDomErrNo Constant From 648e924dde3b4118bec960480c5526d8dfc45ebb Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 19:59:54 -0700 Subject: [PATCH 165/929] Add support for spread operator --- syntax/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5637af84..59754549 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -32,6 +32,7 @@ syntax match jsParensError /\%()\|}\|\]\)/ syntax keyword jsStorageClass const var let syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ +syntax match jsSpreadOperator /\.\.\./ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -135,7 +136,7 @@ syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll fold extend syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment extend +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs @@ -200,7 +201,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper +syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword " Define the default highlighting. @@ -297,6 +298,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncArgDestructuring Noise HiLink jsModuleAsterisk Noise HiLink jsClassProperty Identifier + HiLink jsSpreadOperator Operator HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant From 8679129ee3284f0719f9a946d2c0654c959eb57c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 20:15:39 -0700 Subject: [PATCH 166/929] Renaming jsArray to jsBracket Because it's not ALWAYS an array --- syntax/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 59754549..178f222c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -126,7 +126,7 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -syntax region jsArray matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression fold extend +syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression fold extend syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll fold extend syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend @@ -201,7 +201,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -syntax cluster jsExpression contains=jsArray,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator +syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword " Define the default highlighting. @@ -318,8 +318,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") endif " Define the htmlJavaScript for HTML syntax html.vim -syntax cluster htmlJavaScript contains=@jsAll,jsArray,jsParen,jsBlock -syntax cluster javaScriptExpression contains=@jsAll,jsArray,jsParen,jsBlock +syntax cluster htmlJavaScript contains=@jsAll +syntax cluster javaScriptExpression contains=@jsAll " Vim's default html.vim highlights all javascript as 'Special' hi! def link javaScript NONE From 42512308afb616e1305a43576c41650034637213 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 20:18:34 -0700 Subject: [PATCH 167/929] Changing a TODO to a DISCUSS --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 178f222c..307d005d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -108,7 +108,7 @@ syntax keyword jsAsyncKeyword async await syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval -" TODO: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? +" DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public " DISCUSS: Should we really be matching stuff like this? From 37cdc8cccce0b3a5ac304ee0605d0e659875fec4 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 5 Jun 2016 22:24:57 -0700 Subject: [PATCH 168/929] Improvements to jsClassValue endcase --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 307d005d..6320c3a3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -163,7 +163,7 @@ syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n. syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue -syntax region jsClassValue contained matchgroup=jsNoise start=/=/ end=/;/ contains=@jsExpression +syntax region jsClassValue contained start=/=/ end=/\%(;\|}\)\@=/ contains=@jsExpression syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs extend syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs From e6182482bff8b9eb0fa85c2128a3d9abb9cc95be Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 6 Jun 2016 13:20:38 -0700 Subject: [PATCH 169/929] Unlinking jsFutureKeys We can use this as a test. By unlinking it, it shouldn't ever have any color theme associated with it, and if people complain, they can still highlight it. Otherwise if we hear no complaints after a while, we just pull it completely. --- syntax/javascript.vim | 1 - 1 file changed, 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6320c3a3..a5b7a47c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -287,7 +287,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsTemplateBraces jsBraces HiLink jsGlobalObjects Special HiLink jsExceptions Special - HiLink jsFutureKeys Special HiLink jsBuiltins Special HiLink jsModuleKeywords Include HiLink jsModuleOperators Include From 8aea86351a9919018490e288244e7c780c31d271 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 8 Jun 2016 12:53:21 -0700 Subject: [PATCH 170/929] Debugger is no longer a future keys It's now technically a statement --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a5b7a47c..6e9fd109 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -93,7 +93,7 @@ exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') " Statement Keywords -syntax keyword jsStatement contained break continue with yield +syntax keyword jsStatement contained break continue with yield debugger syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat @@ -109,7 +109,7 @@ syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Obje syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval " DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? -syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public +syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public " DISCUSS: Should we really be matching stuff like this? " DOM2 Objects From 5a0ae763938d8eb2553ed2ab89d199caef1cb2a0 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 9 Jun 2016 10:58:12 -0700 Subject: [PATCH 171/929] Misc tweaks * Fixes to jsSpreadOperator * Added fold to jsObject * Organized fold/extend arguments better --- syntax/javascript.vim | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6e9fd109..5e78feba 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -32,7 +32,7 @@ syntax match jsParensError /\%()\|}\|\]\)/ syntax keyword jsStorageClass const var let syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ -syntax match jsSpreadOperator /\.\.\./ +syntax match jsSpreadOperator /\.\.\./ skipwhite skipempty nextgroup=@jsExpression syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -126,17 +126,17 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression fold extend -syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll fold extend -syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock fold extend -syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock fold extend -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsNoise fold -syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll fold extend +syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold +syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold +syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold +syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsNoise extend fold +syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs From fc3874662664a6d86c27dc0aa77d60ba8e7f6933 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 10 Jun 2016 17:44:43 -0700 Subject: [PATCH 172/929] Potential fix for jsClassValue region This fix may actually work out for us when using jsClassValue. There still are some cases where it could be tripped up, for example on multi line equations and stuff, but for the most part I think it should do the trick. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5e78feba..c463c3c4 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -163,7 +163,7 @@ syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n. syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue -syntax region jsClassValue contained start=/=/ end=/\%(;\|}\)\@=/ contains=@jsExpression +syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs extend syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs @@ -296,7 +296,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncArgRestDots Noise HiLink jsFuncArgDestructuring Noise HiLink jsModuleAsterisk Noise - HiLink jsClassProperty Identifier + HiLink jsClassProperty jsObjectKey HiLink jsSpreadOperator Operator HiLink jsDomErrNo Constant From e38617a517159711129f998d70e063962c2c09eb Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 10 Jun 2016 17:50:40 -0700 Subject: [PATCH 173/929] Fix computed class properties --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index c463c3c4..830ebb08 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -164,7 +164,7 @@ syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunct syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression -syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs extend +syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs " Comments From ceb3341b8ddfa40acfa4470e4b8679f0766d340f Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 10 Jun 2016 17:51:45 -0700 Subject: [PATCH 174/929] Make ternary handling more robust This should help with errant detection in files that use Flow. It also makes things safer so when typing out a ternary expression, you don't get weird flickering of major syntax region changes. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 830ebb08..c82f950a 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -137,7 +137,7 @@ syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend fold -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/:/ contains=@jsExpression +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs From 8e710ba8eaad6d1b4caa9947b69315498e323300 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 11 Jun 2016 15:55:01 -0700 Subject: [PATCH 175/929] changes according to #466 (#463) support less common object defs . comment detection compatibility. only use a c style when not in a block --- indent/javascript.vim | 78 +++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 43 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 53cd0acd..84d69690 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -16,7 +16,7 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],0\,:,!^F,o,O,e +setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e setlocal cinoptions+=j1,J1 " Only define the function once. @@ -45,16 +45,13 @@ let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(string\|regex\|comment\|template\)\c' +let s:syng_strcom = '\%(string\|regex\|special\|comment\|template\)\c' " Regex of syntax group names that are strings. let s:syng_string = 'regex\c' " Regex of syntax group names that are strings or documentation. -let s:syng_multiline = '\%(comment\|doc\)\c' - -" Regex of syntax group names that are line comment. -let s:syng_linecom = 'linecomment\c' +let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" @@ -114,13 +111,8 @@ function s:IsInString(lnum, col) endfunction " Check if the character at lnum:col is inside a multi-line comment. -function s:IsInMultilineComment(lnum, col) - return !s:IsLineComment(a:lnum, a:col) && synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_multiline -endfunction - -" Check if the character at lnum:col is a line comment. -function s:IsLineComment(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_linecom +function s:IsInComment(lnum, col) + return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_comment endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. @@ -128,14 +120,14 @@ function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 let line = getline(lnum) - let com = match(line, '\*\/') + 1 - if s:IsInMultilineComment(lnum, com) + let com = match(line, '\%(\/\*.*\)\@ 0 let lnum = parlnum end - elseif line !~ '^' . s:line_term + elseif line !~ '^' . s:line_term && !s:IsInStringOrComment(lnum,1) break endif let lnum = prevnonblank(lnum - 1) @@ -153,18 +145,17 @@ function s:GetMSL(lnum, in_one_line_scope) " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) let line2 = getline(msl) - let col2 = matchend(line2, ')') if ((s:Match(lnum,s:continuation_regex) || s:Match(lnum, s:comma_last)) && \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) let msl = lnum - - " if there are more closing brackets, continue from the line which has the matching opening bracket - elseif col2 > 0 && !s:IsInStringOrComment(msl, col2) && s:LineHasOpeningBrackets(msl)[0] == '2' && !a:in_one_line_scope - call cursor(msl, 1) - if s:lookForParens('(', ')', 'bW', 0) > 0 - let lnum = line('.') - let msl = lnum - endif + if s:Match(lnum, s:line_pre . '[]})]') && !a:in_one_line_scope + call cursor(lnum,1) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + if parlnum > 0 + let lnum = parlnum + continue + end + end else @@ -331,6 +322,8 @@ function GetJavascriptIndent() let line = getline(v:lnum) " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) + " previous line of code + let lnum = s:PrevNonBlankNonString(v:lnum - 1) " to not change multiline string values if line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' @@ -338,12 +331,13 @@ function GetJavascriptIndent() endif " If we are in a multi-line comment, cindent does the right thing. - if s:IsInMultilineComment(v:lnum, 1) && line !~ '^\/\*' + if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif " single opening bracket will assume you want a c style of indenting - if s:Match(v:lnum, s:line_pre . '{' . s:line_term) + if s:Match(v:lnum, s:line_pre . '{' . s:line_term) && !s:Match(lnum,s:block_regex) && + \ !s:Match(lnum,s:comma_last) return cindent(v:lnum) endif @@ -358,8 +352,6 @@ function GetJavascriptIndent() let col = matchend(line, s:line_pre . '[]})]') if col > 0 && !s:IsInStringOrComment(v:lnum, col) call cursor(v:lnum, col) - - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 let ind = s:InMultiVarStatement(parlnum, 0, 0) ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) @@ -367,7 +359,6 @@ function GetJavascriptIndent() return ind endif - let lnum = s:PrevNonBlankNonString(v:lnum - 1) " If line starts with an operator... if (line =~ s:operator_first) @@ -376,16 +367,17 @@ function GetJavascriptIndent() return indent(lnum) end let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '2' || counts[1] == '2' || counts[2] == '2' + if counts =~ '2' call cursor(lnum, 1) " Search for the opening tag let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if parlnum > 0 - return !s:Match(parlnum, s:operator_first) ? indent(lnum) + s:sw() : indent(parlnum) + return !s:Match(parlnum, s:operator_first) && + \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' ? + \ indent(lnum) + s:sw() : indent(parlnum) end - elseif line !~ s:line_pre . ',\s*\%(\%(\([''"]\).*\1\)\|\%(\h\w*\)\)\s*:.*' . s:line_term && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen' - " otherwise, indent 1 level + elseif synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' + " otherwise, if not in an key/val;array item;param, indent 1 level return indent(lnum) + s:sw() end @@ -400,7 +392,7 @@ function GetJavascriptIndent() return indent(mnum) - s:sw() end elseif s:Match(lnum, s:operator_first) - if counts[0] != '1' && counts[1] != '1' && counts[2] != '1' + if counts !~ '1' return indent(lnum) - s:sw() end end @@ -412,7 +404,8 @@ function GetJavascriptIndent() " If the line is empty and the previous nonblank line was a multi-line " comment, use that comment's indent. Deduct one char to account for the " space in ' */'. - if line =~ '^\s*$' && s:IsInMultilineComment(prevline, 1) + if line =~ '^\s*$' && getline(prevline) !~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@ 0 + if parlnum > 0 && !s:InMultiVarStatement(parlnum,0,0) return indent(s:GetMSL(parlnum, 0)) end - elseif counts[1] == '1' || counts[2] == '1' || counts[0] == '1' || s:Onescope(lnum) + elseif counts =~ '1' || s:Onescope(lnum) return ind + s:sw() else call cursor(v:lnum, vcol) @@ -502,7 +494,7 @@ function! Fixedgq(lnum, count) endif " This gq is only meant to do code with strings, not comments - if s:IsLineComment(a:lnum, l:first_char) || s:IsInMultilineComment(a:lnum, l:first_char) + if s:IsInComment(a:lnum, l:first_char) return 1 endif From 9e5b60a4fd270432ad56699a26b703abf78aa2b2 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 13 Jun 2016 17:43:20 -0700 Subject: [PATCH 176/929] Pulling version number out of README Versions should be tracked on git anyways --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 87bca234..005ae786 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# vim-javascript v1.0.0 +# vim-javascript JavaScript bundle for vim, this bundle provides syntax highlighting and improved indentation. From 51c16139c15183aea30ccf0b7f3482a2b83e895e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 14 Jun 2016 11:13:18 -0700 Subject: [PATCH 177/929] Adds support for string func names in objs classes --- syntax/javascript.vim | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index c82f950a..04179088 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -83,6 +83,8 @@ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contai syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName +syntax region jsFunctionStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs +syntax region jsFunctionStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') @@ -132,11 +134,11 @@ syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsNoise extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsFunctionStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsFunctionStringKey extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs @@ -229,6 +231,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsString String HiLink jsObjectKeyString String HiLink jsTemplateString String + HiLink jsFunctionStringKey String HiLink jsTaggedTemplate StorageClass HiLink jsTernaryIfOperator Operator HiLink jsRegexpString String From 233b6c32c941559377134a04db9c0a178708bf83 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 15 Jun 2016 09:02:26 -0700 Subject: [PATCH 178/929] paren matching (#474) https://github.com/pangloss/vim-javascript/issues/469#issuecomment-225765624 --- indent/javascript.vim | 56 +++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 84d69690..806f079b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -45,7 +45,7 @@ let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(string\|regex\|special\|comment\|template\)\c' +let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' " Regex of syntax group names that are strings. let s:syng_string = 'regex\c' @@ -347,22 +347,29 @@ function GetJavascriptIndent() endif " If we got a closing bracket on an empty line, find its match and indent - " according to it. For parentheses we indent to its column - 1, for the - " others we indent to the containing line's MSL's level. Return -1 if fail. - let col = matchend(line, s:line_pre . '[]})]') - if col > 0 && !s:IsInStringOrComment(v:lnum, col) - call cursor(v:lnum, col) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - let ind = s:InMultiVarStatement(parlnum, 0, 0) ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) - endif + " according to it. + let col = s:Match(v:lnum, s:line_pre . '[]})]') + if col > 0 + let parlnum = v:lnum + while col + call cursor(parlnum, 1) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + let col = s:Match(parlnum, s:line_pre . '[]})]') + if col + continue + end + if parlnum > 0 + let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' + \ ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) + endif + endwhile return ind endif " If line starts with an operator... if (line =~ s:operator_first) - if (s:Match(lnum, s:operator_first)) + if (s:Match(lnum, s:operator_first) || s:Match(lnum, s:line_pre . '[])}]')) " and so does previous line, don't indent return indent(lnum) end @@ -421,10 +428,20 @@ function GetJavascriptIndent() return 0 endif +" foo('foo', +" bar('bar', function() { +" hi(); +" }) +" ); +" function (a, b, c, d, +" e, f, g) { +" console.log('inner'); +" } " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) - return s:InMultiVarStatement(lnum, 0, 0) ? indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw() + return s:InMultiVarStatement(lnum, 0, 0) || s:LineHasOpeningBrackets(lnum) !~ '2' ? + \ indent(lnum) + s:sw() : indent(s:GetMSL(lnum, 0)) + s:sw() endif " Set up variables for current line. @@ -432,19 +449,18 @@ function GetJavascriptIndent() let ind = indent(lnum) " If the previous line contained an opening bracket, and we are still in it, " add indent depending on the bracket type. - if s:Match(lnum, '[[({})\]]') + if s:Match(lnum, '\%([[({]\)\|\%([^\t \])}][})\]]\)') let counts = s:LineHasOpeningBrackets(lnum) if counts =~ '2' - call cursor(lnum, 1) - " Search for the opening tag - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 && !s:InMultiVarStatement(parlnum,0,0) - return indent(s:GetMSL(parlnum, 0)) + call cursor(lnum,matchend(s:RemoveTrailingComments(line), '.\+\zs[])}]')) + while s:lookForParens('(\|{\|\[', ')\|}\|\]', 'bW', 0) == lnum + call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]')) + endwhile + if line('.') < lnum && !s:InMultiVarStatement(line('.'),0,0) + return indent(s:GetMSL(line('.'), 0)) end elseif counts =~ '1' || s:Onescope(lnum) return ind + s:sw() - else - call cursor(v:lnum, vcol) end end From ecae87560ccf3001cca2b3f0ec48c4b18abee101 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 15 Jun 2016 19:04:22 -0700 Subject: [PATCH 179/929] Fixing object string keys --- syntax/javascript.vim | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 04179088..3086c39d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -83,8 +83,8 @@ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contai syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName -syntax region jsFunctionStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs -syntax region jsFunctionStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs +syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue +syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '') exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '') @@ -134,11 +134,11 @@ syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsFunctionStringKey,jsNoise extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsFunctionStringKey extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs @@ -168,6 +168,8 @@ syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@= syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs +syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs +syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD @@ -231,7 +233,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsString String HiLink jsObjectKeyString String HiLink jsTemplateString String - HiLink jsFunctionStringKey String + HiLink jsObjectStringKey String + HiLink jsClassStringKey String HiLink jsTaggedTemplate StorageClass HiLink jsTernaryIfOperator Operator HiLink jsRegexpString String From d3d09b9c584f2e59334fe2fd74f00cbfce0ad3c8 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 16 Jun 2016 11:08:42 -0700 Subject: [PATCH 180/929] First pass at fixing Promise catch methods. Made the scoping of catch statements dependent on try. --- syntax/javascript.vim | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3086c39d..5e17a502 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -101,8 +101,9 @@ syntax keyword jsConditional switch skipwhite skipempty nextgro syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock syntax keyword jsLabel contained case default -syntax keyword jsException try finally skipwhite skipempty nextgroup=jsBlock -syntax keyword jsException catch skipwhite skipempty nextgroup=jsParenCatch +syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock +syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsBlock +syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw syntax keyword jsAsyncKeyword async await @@ -128,18 +129,19 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold -syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold -syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold -syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold -syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold -syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold -syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression +syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold +syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold +syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold +syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold +syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold +syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs @@ -206,7 +208,7 @@ if !exists("javascript_ignore_javaScriptdoc") endif "" JSDoc end syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsAsyncKeyword +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -254,6 +256,9 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsRepeat Repeat HiLink jsStatement Statement HiLink jsException Exception + HiLink jsTry Exception + HiLink jsFinally Exception + HiLink jsCatch Exception HiLink jsAsyncKeyword Keyword HiLink jsArrowFunction Type HiLink jsFunction Type From ea5803348e3ec88a1762b4f044b585d216d1974f Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 16 Jun 2016 21:00:35 -0700 Subject: [PATCH 181/929] a solution for 486 (#488) this just makes the indentation increase with an initial dot chained method --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 806f079b..9cb3048b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -369,7 +369,8 @@ function GetJavascriptIndent() " If line starts with an operator... if (line =~ s:operator_first) - if (s:Match(lnum, s:operator_first) || s:Match(lnum, s:line_pre . '[])}]')) + if (s:Match(lnum, s:operator_first) || (s:Match(lnum, s:line_pre . '[])}]') && + \ !(s:Match(v:lnum,s:line_pre . '\.') && s:Match(lnum, ')' . s:line_term)))) " and so does previous line, don't indent return indent(lnum) end From 52e8f90e22e7dabd1fae70e65de98af97af80274 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 17 Jun 2016 10:30:03 -0700 Subject: [PATCH 182/929] incorrect change in cursor pos (#489) * incorrect change in cursor pos some bizarre problem which made me invent a buggy fix. also reindented the file --- indent/javascript.vim | 120 +++++++++++++++++++++--------------------- 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9cb3048b..4b8b1f94 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -312,6 +312,7 @@ function GetJavascriptIndent() " 3.1. Setup {{{1 " ---------- " Set up variables for restoring position in file. Could use v:lnum here. + " Avoid use of line('.')/col('.') type functions as the curpos can change let vcol = col('.') " 3.2. Work on the current line {{{1 @@ -334,7 +335,7 @@ function GetJavascriptIndent() if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif - + " single opening bracket will assume you want a c style of indenting if s:Match(v:lnum, s:line_pre . '{' . s:line_term) && !s:Match(lnum,s:block_regex) && \ !s:Match(lnum,s:comma_last) @@ -429,16 +430,16 @@ function GetJavascriptIndent() return 0 endif -" foo('foo', -" bar('bar', function() { -" hi(); -" }) -" ); + " foo('foo', + " bar('bar', function() { + " hi(); + " }) + " ); -" function (a, b, c, d, -" e, f, g) { -" console.log('inner'); -" } + " function (a, b, c, d, + " e, f, g) { + " console.log('inner'); + " } " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) return s:InMultiVarStatement(lnum, 0, 0) || s:LineHasOpeningBrackets(lnum) !~ '2' ? @@ -450,15 +451,16 @@ function GetJavascriptIndent() let ind = indent(lnum) " If the previous line contained an opening bracket, and we are still in it, " add indent depending on the bracket type. - if s:Match(lnum, '\%([[({]\)\|\%([^\t \])}][})\]]\)') + if s:Match(lnum, '[[({})\]]') let counts = s:LineHasOpeningBrackets(lnum) if counts =~ '2' - call cursor(lnum,matchend(s:RemoveTrailingComments(line), '.\+\zs[])}]')) + call cursor(lnum,matchend(s:RemoveTrailingComments(line), '.*\zs[])}]')) while s:lookForParens('(\|{\|\[', ')\|}\|\]', 'bW', 0) == lnum call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]')) endwhile - if line('.') < lnum && !s:InMultiVarStatement(line('.'),0,0) - return indent(s:GetMSL(line('.'), 0)) + let cur = line('.') + if cur < lnum && !s:InMultiVarStatement(cur,0,0) + return indent(s:GetMSL(cur, 0)) end elseif counts =~ '1' || s:Onescope(lnum) return ind + s:sw() @@ -501,64 +503,64 @@ let &cpo = s:cpo_save unlet s:cpo_save " gq{{{2 function! Fixedgq(lnum, count) - let l:tw = &tw ? &tw : 80; + let l:tw = &tw ? &tw : 80; - let l:count = a:count - let l:first_char = indent(a:lnum) + 1 + let l:count = a:count + let l:first_char = indent(a:lnum) + 1 - if mode() == 'i' " gq was not pressed, but tw was set - return 1 - endif + if mode() == 'i' " gq was not pressed, but tw was set + return 1 + endif - " This gq is only meant to do code with strings, not comments - if s:IsInComment(a:lnum, l:first_char) - return 1 - endif + " This gq is only meant to do code with strings, not comments + if s:IsInComment(a:lnum, l:first_char) + return 1 + endif - if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq - return 1 - endif + if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq + return 1 + endif - " Put all the lines on one line and do normal spliting after that - if l:count > 1 - while l:count > 1 - let l:count -= 1 - normal J - endwhile - endif + " Put all the lines on one line and do normal spliting after that + if l:count > 1 + while l:count > 1 + let l:count -= 1 + normal J + endwhile + endif - let l:winview = winsaveview() + let l:winview = winsaveview() - call cursor(a:lnum, l:tw + 1) - let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) + call cursor(a:lnum, l:tw + 1) + let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) + call cursor(a:lnum, l:tw + 1) + let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) - " No need for special treatment, normal gq handles edgecases better - if breakpoint[1] == orig_breakpoint[1] - call winrestview(l:winview) - return 1 - endif + " No need for special treatment, normal gq handles edgecases better + if breakpoint[1] == orig_breakpoint[1] + call winrestview(l:winview) + return 1 + endif - " Try breaking after string - if breakpoint[1] <= indent(a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) - endif + " Try breaking after string + if breakpoint[1] <= indent(a:lnum) + call cursor(a:lnum, l:tw + 1) + let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) + endif - if breakpoint[1] != 0 - call feedkeys("r\") - else - let l:count = l:count - 1 - endif + if breakpoint[1] != 0 + call feedkeys("r\") + else + let l:count = l:count - 1 + endif - " run gq on new lines - if l:count == 1 - call feedkeys("gqq") - endif + " run gq on new lines + if l:count == 1 + call feedkeys("gqq") + endif - return 0 + return 0 endfunction "}}} " vim: foldmethod=marker:foldlevel=1 From 939f478f65b3b0281a01bd3372ad36577d992efd Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 13 Jun 2016 22:36:28 -0700 Subject: [PATCH 183/929] Improvements to destructuring This PR should add far more complete support for destructuring, both in var/let/const statements and also within function argument definitions. There may be some cases I have not tested and are broken, therefore more testing is for sure needed. --- syntax/javascript.vim | 55 ++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 5e17a502..94d2756b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -24,12 +24,12 @@ syntax sync fromstart " syntax case ignore syntax case match -syntax match jsNoise /[:,\;\.]\{1}/ -syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ -syntax match jsParensError /\%()\|}\|\]\)/ +syntax match jsNoise /[:,\;\.]\{1}/ +syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ +syntax match jsParensError /[)}\]]/ " Program Keywords -syntax keyword jsStorageClass const var let +syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax match jsSpreadOperator /\.\.\./ skipwhite skipempty nextgroup=@jsExpression @@ -45,7 +45,7 @@ syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ syntax match jsModuleAsterisk contained /*/ syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk -syntax match jsExportContainer /\ / contains=jsModuleKeywords skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault +syntax match jsExportContainer /\ / contains=jsModuleKeywords skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise " Strings, Templates, Numbers @@ -129,24 +129,25 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold -syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold -syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold -syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold -syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold -syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold -syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold -syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold -syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression +syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold +syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold +syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold +syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsFuncArgExpression,jsDestructuringBlock skipwhite skipempty nextgroup=jsFuncBlock extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold +syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold +syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold +syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs -syntax match jsFuncArgDestructuring contained /\({\|}\|=\|:\|\[\|\]\)/ extend -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs skipwhite skipempty nextgroup=jsFuncBlock extend +syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend syntax match jsFuncArgCommas contained ',' syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots syntax match jsFuncArgRestDots contained /\.\.\./ @@ -173,6 +174,13 @@ syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\ syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs +" Destructuring +syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue +syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue +syntax region jsDestructuringValue contained start=/=/ start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend +syntax match jsDestructuringNoise contained /[,]/ +syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpresslon skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold + " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD syntax region jsComment start=+\/\/+ end=+$+ contains=jsCommentTodo,@Spell extend keepend @@ -305,11 +313,16 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsDecorator Special HiLink jsDecoratorFunction Special HiLink jsFuncArgRestDots Noise - HiLink jsFuncArgDestructuring Noise + HiLink jsFuncArgOperator jsFuncArgs HiLink jsModuleAsterisk Noise HiLink jsClassProperty jsObjectKey HiLink jsSpreadOperator Operator + HiLink jsDestructuringBraces Noise + HiLink jsDestructuringProperty jsObjectKey + HiLink jsDestructuringAssignment jsObjectKey + HiLink jsDestructuringNoise Noise + HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant HiLink jsDomElemAttrs Label From 47951eec6ae9294c0244275efe6fe09c7c166606 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 13 Jun 2016 22:59:09 -0700 Subject: [PATCH 184/929] Refinements to destructuring --- syntax/javascript.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 94d2756b..6cb18fe5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -177,8 +177,10 @@ syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ " Destructuring syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue -syntax region jsDestructuringValue contained start=/=/ start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend -syntax match jsDestructuringNoise contained /[,]/ +syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/ +syntax region jsDestructuringValue contained start=/=/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend +syntax region jsDestructuringValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise extend +syntax match jsDestructuringNoise contained /[,\[\]]/ syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpresslon skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold " Comments @@ -319,7 +321,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsSpreadOperator Operator HiLink jsDestructuringBraces Noise - HiLink jsDestructuringProperty jsObjectKey + HiLink jsDestructuringProperty jsFuncArgs HiLink jsDestructuringAssignment jsObjectKey HiLink jsDestructuringNoise Noise From afe61796a152421ef4596da531f7eb097ee354bc Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 13 Jun 2016 23:11:14 -0700 Subject: [PATCH 185/929] Improved array destructuring --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6cb18fe5..ef07a113 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -29,7 +29,7 @@ syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsParensError /[)}\]]/ " Program Keywords -syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock +syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax match jsSpreadOperator /\.\.\./ skipwhite skipempty nextgroup=@jsExpression @@ -142,6 +142,8 @@ syntax region jsBlock contained matchgroup=jsBraces s syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed extend fold +syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression From 9d816e3985b259c07b7a6bef7b2ab4eb8780f34f Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 13 Jun 2016 23:21:40 -0700 Subject: [PATCH 186/929] Fixes to array destructuring --- syntax/javascript.vim | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ef07a113..7dc5cdc6 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -142,8 +142,7 @@ syntax region jsBlock contained matchgroup=jsBraces s syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed extend fold -syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold +syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression @@ -177,11 +176,11 @@ syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs " Destructuring -syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue -syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/ -syntax region jsDestructuringValue contained start=/=/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend -syntax region jsDestructuringValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise extend +syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue +syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment +syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend +syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise extend syntax match jsDestructuringNoise contained /[,\[\]]/ syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpresslon skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold From 7d41c3c63a02e885f12623b6a0cfe820deb5dfee Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 20:42:03 -0700 Subject: [PATCH 187/929] Improvements to Spread and Rest Rest and spread operators are now clearly different, and also create real regions that match more accurately. --- syntax/javascript.vim | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7dc5cdc6..7dfe6d34 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -32,7 +32,6 @@ syntax match jsParensError /[)}\]]/ syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ -syntax match jsSpreadOperator /\.\.\./ skipwhite skipempty nextgroup=@jsExpression syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false @@ -129,29 +128,29 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize "" Code blocks -syntax region jsBracket matchgroup=jsBrackets start="\[" end="\]" contains=@jsExpression extend fold +syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start='(' end=')' contains=jsFuncArgCommas,jsFuncArgRest,jsComment,jsFuncArgExpression,jsDestructuringBlock skipwhite skipempty nextgroup=jsFuncBlock extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression skipwhite skipempty nextgroup=jsFuncBlock extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold -syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed extend fold -syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold +syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold +syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression +syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression +syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend syntax match jsFuncArgCommas contained ',' -syntax match jsFuncArgRest contained /\%(\.\.\.[a-zA-Z_$][0-9a-zA-Z_$]*\))/ contains=jsFuncArgRestDots -syntax match jsFuncArgRestDots contained /\.\.\./ syntax keyword jsArguments contained arguments " Matches a single keyword argument with no parens @@ -218,7 +217,7 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsSpreadOperator +syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. @@ -231,7 +230,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") else command -nargs=+ HiLink hi def link endif - HiLink jsFuncArgRest Special HiLink jsComment Comment HiLink jsEnvComment PreProc HiLink jsCommentTodo Todo @@ -315,11 +313,12 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleDefault Include HiLink jsDecorator Special HiLink jsDecoratorFunction Special - HiLink jsFuncArgRestDots Noise HiLink jsFuncArgOperator jsFuncArgs HiLink jsModuleAsterisk Noise HiLink jsClassProperty jsObjectKey HiLink jsSpreadOperator Operator + HiLink jsRestOperator Operator + HiLink jsRestExpression jsFuncArgs HiLink jsDestructuringBraces Noise HiLink jsDestructuringProperty jsFuncArgs From 6bb633fb74cafb3e9d45ad41b6c5dc52829dbdf9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 18 Jun 2016 09:04:57 -0700 Subject: [PATCH 188/929] comment misalignment (#495) #493 --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4b8b1f94..d683d961 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -17,7 +17,7 @@ setlocal nosmartindent setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e -setlocal cinoptions+=j1,J1 +setlocal cinoptions+=j1,J1,c1 " Only define the function once. if exists("*GetJavascriptIndent") @@ -413,7 +413,7 @@ function GetJavascriptIndent() " If the line is empty and the previous nonblank line was a multi-line " comment, use that comment's indent. Deduct one char to account for the " space in ' */'. - if line =~ '^\s*$' && getline(prevline) !~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@ Date: Sat, 18 Jun 2016 09:14:51 -0700 Subject: [PATCH 189/929] let a continuation be determined with block close (#496) seems to fix #491, may be necessary to look for a more complex solution if this causes regressions --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d683d961..9a0f16e9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,7 @@ function s:GetMSL(lnum, in_one_line_scope) " Start on the line we're at and use its indent. let msl = a:lnum let lnum = s:PrevNonBlankNonString(a:lnum - 1) - while lnum > 0 + while lnum > 0 && !s:Match(msl,s:line_pre . '[])}]') " If we have a continuation line, or we're in a string, use line as MSL. " Otherwise, terminate search as we have found our MSL already. let line = getline(lnum) @@ -360,8 +360,8 @@ function GetJavascriptIndent() continue end if parlnum > 0 - let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' - \ ? indent(parlnum) : indent(s:GetMSL(parlnum, 0)) + let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' ? + \ indent(parlnum) : indent(s:GetMSL(parlnum, 0)) endif endwhile return ind From 01150776b5d9d08a24567684f387029b3fa29080 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 19 Jun 2016 21:30:35 -0700 Subject: [PATCH 190/929] accurate switch indenting (#499) since cindent considers single quotes as delimiting a single char string, cindent will break in situations like : https://github.com/sanctuary-js/sanctuary-def/blob/master/index.js#L222 http://stackoverflow.com/questions/3683602/single-quotes-vs-double-quotes-in-c --- indent/javascript.vim | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9a0f16e9..f4676358 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -344,7 +344,11 @@ function GetJavascriptIndent() " cindent each line which has a switch label if (line =~ s:expr_case) - return cindent(v:lnum) + let s:cpo_switch = &cpo + set cpo+=% + let ind = cindent(v:lnum) + let &cpo = s:cpo_switch + return ind endif " If we got a closing bracket on an empty line, find its match and indent From 82fb8b9742e896146496e951a0538fcd23f4ea76 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 11 Jun 2016 14:25:04 -0700 Subject: [PATCH 191/929] Adding some basic Flow support This is by no means complete, and so far has only been to fix major syntax highlighting issues I've found. --- syntax/javascript.vim | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7dfe6d34..674d439a 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -134,7 +134,7 @@ syntax region jsParenIfElse contained matchgroup=jsParens s syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression skipwhite skipempty nextgroup=jsFuncBlock extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression skipwhite skipempty nextgroup=jsFuncBlock,jsFlow extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold @@ -217,6 +217,13 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end +" FIXME: Will need to mask this behind an if statement, or make it a separate +" file that gets source separately. +syntax region jsFlow contained start=/:/ end=/[={),]\@=/ contains=jsFlowType skipwhite skipempty nextgroup=jsFuncBlock +syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object +syntax region jsFlowStatement start=/type/ end=/=/ skipwhite skipempty nextgroup=jsFlowObject +syntax region jsFlowObject contained start=/{/ end=/}/ + syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword @@ -339,6 +346,9 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsClassMethodDefinitions Type HiLink jsObjectGetSet Type + HiLink jsFlow PreProc + HiLink jsFlowType Type + delcommand HiLink endif From ef37a147ce7ae4ce2af6f5d9c8b7996748f6168e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 11 Jun 2016 18:01:54 -0700 Subject: [PATCH 192/929] Adds a ton of support for various parts of jsFlow --- syntax/javascript.vim | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 674d439a..05066190 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -134,8 +134,8 @@ syntax region jsParenIfElse contained matchgroup=jsParens s syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression skipwhite skipempty nextgroup=jsFuncBlock,jsFlow extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold @@ -146,6 +146,7 @@ syntax region jsObject matchgroup=jsObjectBraces s syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ +syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs @@ -217,15 +218,22 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -" FIXME: Will need to mask this behind an if statement, or make it a separate -" file that gets source separately. -syntax region jsFlow contained start=/:/ end=/[={),]\@=/ contains=jsFlowType skipwhite skipempty nextgroup=jsFuncBlock -syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object -syntax region jsFlowStatement start=/type/ end=/=/ skipwhite skipempty nextgroup=jsFlowObject -syntax region jsFlowObject contained start=/{/ end=/}/ +" FIXME: Will need to mask this behind an if statement, or make it a separate file that gets source separately. +syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject +syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsStorageClass +syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend +syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend +syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster +syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster +syntax keyword jsFlowDeclareKeyword contained declare +syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array +syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow +syntax match jsFlowNoise contained /[:;,]/ +syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsFlow " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -347,7 +355,12 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsObjectGetSet Type HiLink jsFlow PreProc + HiLink jsFlowReturn PreProc + HiLink jsFlowArray PreProc + HiLink jsFlowDeclareBlock PreProc + HiLink jsFlowObject PreProc HiLink jsFlowType Type + HiLink jsFlowDeclareKeyword Type delcommand HiLink endif From 926b7f935a7ad7049f2a76adc79e57984ce62da2 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 11 Jun 2016 18:13:40 -0700 Subject: [PATCH 193/929] Adding < and > to jsFlowNoise Also linked jsFlowNoise to Noise --- syntax/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 05066190..d092154b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -220,7 +220,7 @@ endif "" JSDoc end " FIXME: Will need to mask this behind an if statement, or make it a separate file that gets source separately. syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject -syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsStorageClass +syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend @@ -229,8 +229,9 @@ syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ syntax keyword jsFlowDeclareKeyword contained declare syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow -syntax match jsFlowNoise contained /[:;,]/ +syntax match jsFlowNoise contained /[:;,<>]/ syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise +syntax keyword jsFlowStorageClass contained const var let syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsFlow @@ -361,6 +362,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowObject PreProc HiLink jsFlowType Type HiLink jsFlowDeclareKeyword Type + HiLink jsFlowNoise Noise delcommand HiLink endif From 5f839a225adfdfeff5ff2035563599069514f50a Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 20:55:20 -0700 Subject: [PATCH 194/929] Removing jsFlow from jsAll cluster --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d092154b..163f05d0 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -234,7 +234,7 @@ syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject syntax keyword jsFlowStorageClass contained const var let syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsFlow +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already From 9d0bea5615dc92d79b2e1484ae35e871e03af5ee Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 21:23:01 -0700 Subject: [PATCH 195/929] Masking Flow support behind a global var --- extras/flow.vim | 31 +++++++++++++++++++++++++++++++ syntax/javascript.vim | 26 +++----------------------- 2 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 extras/flow.vim diff --git a/extras/flow.vim b/extras/flow.vim new file mode 100644 index 00000000..cc204a96 --- /dev/null +++ b/extras/flow.vim @@ -0,0 +1,31 @@ +syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject +syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass +syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend +syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend +syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster +syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster +syntax keyword jsFlowDeclareKeyword contained declare +syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array +syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow +syntax match jsFlowNoise contained /[:;,<>]/ +syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise +syntax keyword jsFlowStorageClass contained const var let + +if version >= 508 || !exists("did_javascript_syn_inits") + if version < 508 + let did_javascript_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + HiLink jsFlow PreProc + HiLink jsFlowReturn PreProc + HiLink jsFlowArray PreProc + HiLink jsFlowDeclareBlock PreProc + HiLink jsFlowObject PreProc + HiLink jsFlowType Type + HiLink jsFlowDeclareKeyword Type + HiLink jsFlowNoise Noise + delcommand HiLink +endif diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 163f05d0..b14f0e56 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -218,20 +218,9 @@ if !exists("javascript_ignore_javaScriptdoc") syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags endif "" JSDoc end -" FIXME: Will need to mask this behind an if statement, or make it a separate file that gets source separately. -syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject -syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass -syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock -syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend -syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend -syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster -syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster -syntax keyword jsFlowDeclareKeyword contained declare -syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array -syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow -syntax match jsFlowNoise contained /[:;,<>]/ -syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise -syntax keyword jsFlowStorageClass contained const var let +if exists("javascript_plugin_flow") + syntax include extras/flow.vim +endif syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword @@ -355,15 +344,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsClassMethodDefinitions Type HiLink jsObjectGetSet Type - HiLink jsFlow PreProc - HiLink jsFlowReturn PreProc - HiLink jsFlowArray PreProc - HiLink jsFlowDeclareBlock PreProc - HiLink jsFlowObject PreProc - HiLink jsFlowType Type - HiLink jsFlowDeclareKeyword Type - HiLink jsFlowNoise Noise - delcommand HiLink endif From 752cee263ef2ccd6641bdb6c7e0f5b9138663c90 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 21:27:48 -0700 Subject: [PATCH 196/929] Moving jsdoc support into a separate file. --- extras/jsdocs.vim | 39 +++++++++++++++++++++++++++++++++++++++ syntax/javascript.vim | 33 ++------------------------------- 2 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 extras/jsdocs.vim diff --git a/extras/jsdocs.vim b/extras/jsdocs.vim new file mode 100644 index 00000000..fff64f89 --- /dev/null +++ b/extras/jsdocs.vim @@ -0,0 +1,39 @@ +"" syntax coloring for javadoc comments (HTML) +syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold + +" tags containing a param +syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam +" tags containing type and param +syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType +" tags containing type but no param +syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam +" tags containing references +syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag +" other tags (no extra syntax) +syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" + +syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam +syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam +syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend +syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend +syntax region jsDocTypeNoParam contained start="{" end="}" oneline +syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" +syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" +syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags + +if version >= 508 || !exists("did_javascript_syn_inits") + if version < 508 + let did_javascript_syn_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif + HiLink jsDocTags Special + HiLink jsDocSeeTag Function + HiLink jsDocType Type + HiLink jsDocTypeBrackets jsDocType + HiLink jsDocTypeRecord jsDocType + HiLink jsDocTypeNoParam Type + HiLink jsDocParam Label + delcommand HiLink +endif diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b14f0e56..218e7e91 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -192,31 +192,9 @@ syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,js syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline -"" JSDoc / JSDoc Toolkit if !exists("javascript_ignore_javaScriptdoc") - "" syntax coloring for javadoc comments (HTML) - syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold - - " tags containing a param - syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam - " tags containing type and param - syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType - " tags containing type but no param - syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam - " tags containing references - syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag - " other tags (no extra syntax) - syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>" - - syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam - syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam - syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend - syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend - syntax region jsDocTypeNoParam contained start="{" end="}" oneline - syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" - syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" - syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags -endif "" JSDoc end + syntax include extras/jsdocs.vim +endif if exists("javascript_plugin_flow") syntax include extras/flow.vim @@ -239,13 +217,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsEnvComment PreProc HiLink jsCommentTodo Todo HiLink jsCvsTag Function - HiLink jsDocTags Special - HiLink jsDocSeeTag Function - HiLink jsDocType Type - HiLink jsDocTypeBrackets jsDocType - HiLink jsDocTypeRecord jsDocType - HiLink jsDocTypeNoParam Type - HiLink jsDocParam Label HiLink jsString String HiLink jsObjectKeyString String HiLink jsTemplateString String From b6eccf90bb6ae0df22291091f7fcdddb20bd0dff Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 21:31:12 -0700 Subject: [PATCH 197/929] Adding NGDoc support Fixes #288 --- extras/ngdocs.vim | 3 +++ syntax/javascript.vim | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 extras/ngdocs.vim diff --git a/extras/ngdocs.vim b/extras/ngdocs.vim new file mode 100644 index 00000000..c513d875 --- /dev/null +++ b/extras/ngdocs.vim @@ -0,0 +1,3 @@ +syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite +syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite +syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+" diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 218e7e91..310f375c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -200,6 +200,10 @@ if exists("javascript_plugin_flow") syntax include extras/flow.vim endif +if exists("javascript_plugin_ngdocs") + syntax include extras/ngdocs.vim +endif + syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword From be5207068c2d0166c0abc3c9ac4656679481c2ab Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 17 Jun 2016 22:25:27 -0700 Subject: [PATCH 198/929] Using runtime over syntax include syntax include has a sort of sugar to it that forces all sourced highlighting to be contained, this will break certain more general highlighting for jsFlow. runtime on the other hand, works exactly as you'd expect. --- syntax/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 310f375c..43a4061c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -193,15 +193,15 @@ syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline if !exists("javascript_ignore_javaScriptdoc") - syntax include extras/jsdocs.vim + runtime extras/jsdocs.vim endif if exists("javascript_plugin_flow") - syntax include extras/flow.vim + runtime extras/flow.vim endif if exists("javascript_plugin_ngdocs") - syntax include extras/ngdocs.vim + runtime extras/ngdocs.vim endif syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper From af791ed194a2967410c1308e46292d3a0d608e28 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 19 Jun 2016 12:05:30 -0700 Subject: [PATCH 199/929] Adding object key flow support --- extras/flow.vim | 2 ++ syntax/javascript.vim | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index cc204a96..7d981a80 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -11,6 +11,7 @@ syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite syntax match jsFlowNoise contained /[:;,<>]/ syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise syntax keyword jsFlowStorageClass contained const var let +syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue if version >= 508 || !exists("did_javascript_syn_inits") if version < 508 @@ -24,6 +25,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowArray PreProc HiLink jsFlowDeclareBlock PreProc HiLink jsFlowObject PreProc + HiLink jsFlowParenRegion PreProc HiLink jsFlowType Type HiLink jsFlowDeclareKeyword Type HiLink jsFlowNoise Noise diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 43a4061c..a92ccde1 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -73,7 +73,7 @@ else endif syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue +syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue,jsFlowParenRegion syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend From 37bfc8ccf096642c14e1ee8b5d7a349b3b5eeea6 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 19 Jun 2016 22:48:56 -0700 Subject: [PATCH 200/929] Plugin usage tweaks * JSDocs are now hidden behind a variable for consistency with other plugins * NGDoc plugin can now only be enabled if JSDoc is enabled. * Added README documentation for the new global booleans --- README.md | 25 +++++++++++++++++++------ syntax/javascript.vim | 10 +++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 005ae786..bc1eeb2a 100644 --- a/README.md +++ b/README.md @@ -35,24 +35,37 @@ And install it: ## Configuration Variables -The following variables control certain syntax highlighting features. You can -add them to your `.vimrc` to enable/disable their features. +The following variables control certain syntax highlighting plugins. You can +add them to your `.vimrc` to enable their features. + +----------------- + +``` +let g:javascript_plugin_jsdocs = 1 +``` + +Enables syntax highlighting for [JSDocs](http://usejsdoc.org/). + +Default Value: 0 + +----------------- ``` -let g:javascript_enable_domhtmlcss = 1 +let g:javascript_plugin_ngdocs = 1 ``` -Enables HTML/CSS syntax highlighting in your JavaScript file. +Enables some additional syntax highlighting for NGDocs. Requires JSDoc plugin +to be enabled as well. Default Value: 0 ----------------- ``` -let g:javascript_ignore_javaScriptdoc = 1 +let g:javascript_plugin_flow = 1 ``` -Disables JSDoc syntax highlighting +Enables syntax highlighting for [Flow](https://flowtype.org/). Default Value: 0 diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a92ccde1..6465c977 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -192,18 +192,18 @@ syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,js syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline -if !exists("javascript_ignore_javaScriptdoc") +if exists("javascript_plugin_jsdocs") runtime extras/jsdocs.vim + " NGDoc requires JSDoc + if exists("javascript_plugin_ngdocs") + runtime extras/ngdocs.vim + endif endif if exists("javascript_plugin_flow") runtime extras/flow.vim endif -if exists("javascript_plugin_ngdocs") - runtime extras/ngdocs.vim -endif - syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword From 5cefcff315cf101e83e699c3f92967bdcd7404b2 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 19 Jun 2016 22:50:28 -0700 Subject: [PATCH 201/929] Unpluralizing files and variable names --- README.md | 4 ++-- extras/{jsdocs.vim => jsdoc.vim} | 0 extras/{ngdocs.vim => ngdoc.vim} | 0 syntax/javascript.vim | 8 ++++---- 4 files changed, 6 insertions(+), 6 deletions(-) rename extras/{jsdocs.vim => jsdoc.vim} (100%) rename extras/{ngdocs.vim => ngdoc.vim} (100%) diff --git a/README.md b/README.md index bc1eeb2a..bcefe6c6 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ add them to your `.vimrc` to enable their features. ----------------- ``` -let g:javascript_plugin_jsdocs = 1 +let g:javascript_plugin_jsdoc = 1 ``` Enables syntax highlighting for [JSDocs](http://usejsdoc.org/). @@ -51,7 +51,7 @@ Default Value: 0 ----------------- ``` -let g:javascript_plugin_ngdocs = 1 +let g:javascript_plugin_ngdoc = 1 ``` Enables some additional syntax highlighting for NGDocs. Requires JSDoc plugin diff --git a/extras/jsdocs.vim b/extras/jsdoc.vim similarity index 100% rename from extras/jsdocs.vim rename to extras/jsdoc.vim diff --git a/extras/ngdocs.vim b/extras/ngdoc.vim similarity index 100% rename from extras/ngdocs.vim rename to extras/ngdoc.vim diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6465c977..7b874df6 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -192,11 +192,11 @@ syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,js syntax region jsEnvComment start="\%^#!" end="$" display syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline -if exists("javascript_plugin_jsdocs") - runtime extras/jsdocs.vim +if exists("javascript_plugin_jsdoc") + runtime extras/jsdoc.vim " NGDoc requires JSDoc - if exists("javascript_plugin_ngdocs") - runtime extras/ngdocs.vim + if exists("javascript_plugin_ngdoc") + runtime extras/ngdoc.vim endif endif From 4eab47d676608b4df0cf071dd59ec755b39f118c Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 19 Jun 2016 11:56:09 -0700 Subject: [PATCH 202/929] First pass at improved export support --- syntax/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 7b874df6..54c72096 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -37,14 +37,14 @@ syntax keyword jsBooleanFalse false " Modules syntax keyword jsModuleKeywords contained import -syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=@jsExpression +syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault syntax keyword jsModuleOperators contained from syntax keyword jsModuleOperators contained as syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise syntax match jsModuleAsterisk contained /*/ -syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression -syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk -syntax match jsExportContainer /\ / contains=jsModuleKeywords skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault +syntax keyword jsModuleDefault contained default skipwhite kipempty nextgroup=@jsExpression +syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk +syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise " Strings, Templates, Numbers From fb1c662ccb6b4665828471a336749605416c57c4 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 20 Jun 2016 10:56:28 -0700 Subject: [PATCH 203/929] Support destructuring values following assignment --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 54c72096..ed94846c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -180,9 +180,9 @@ syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/ syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend -syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise extend +syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend syntax match jsDestructuringNoise contained /[,\[\]]/ -syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpresslon skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold +syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD From 8a972d317965d2f1364d155c5b53b67dfccea099 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 20 Jun 2016 10:56:38 -0700 Subject: [PATCH 204/929] Whitespace --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ed94846c..d8fb2067 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -45,7 +45,7 @@ syntax match jsModuleAsterisk contained /*/ syntax keyword jsModuleDefault contained default skipwhite kipempty nextgroup=@jsExpression syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression -syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise +syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend From 5b4233850328eba5f866726e0b0893a6d36cef11 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 20 Jun 2016 13:52:00 -0700 Subject: [PATCH 205/929] Fixes for Flow on Classes --- extras/flow.vim | 3 +++ syntax/javascript.vim | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 7d981a80..6ae9b901 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -12,6 +12,7 @@ syntax match jsFlowNoise contained /[:;,<>]/ syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise syntax keyword jsFlowStorageClass contained const var let syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue +syntax region jsFlowClass contained matchgroup=jsFlowNoise start=// oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock if version >= 508 || !exists("did_javascript_syn_inits") if version < 508 @@ -26,6 +27,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowDeclareBlock PreProc HiLink jsFlowObject PreProc HiLink jsFlowParenRegion PreProc + HiLink jsFlowClass PreProc + HiLink jsFlowClassProperty jsClassProperty HiLink jsFlowType Type HiLink jsFlowDeclareKeyword Type HiLink jsFlowNoise Noise diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d8fb2067..8486cce0 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -165,7 +165,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue From 3306f636541ad561d7166be566efe1f917bcba23 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 21 Jun 2016 11:13:36 -0700 Subject: [PATCH 206/929] jsComment updates Removed some seemingly needless regexes, updated to match consistency --- syntax/javascript.vim | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 8486cce0..72fc0221 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -186,11 +186,9 @@ syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets " Comments syntax keyword jsCommentTodo contained TODO FIXME XXX TBD -syntax region jsComment start=+\/\/+ end=+$+ contains=jsCommentTodo,@Spell extend keepend -syntax region jsComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ contains=jsCommentTodo,@Spell fold extend keepend -syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,jsCvsTag,@Spell fold extend keepend -syntax region jsEnvComment start="\%^#!" end="$" display -syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline +syntax region jsComment start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend +syntax region jsComment start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend +syntax region jsEnvComment start=/\%^#!/ end=/$/ display if exists("javascript_plugin_jsdoc") runtime extras/jsdoc.vim @@ -220,7 +218,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsComment Comment HiLink jsEnvComment PreProc HiLink jsCommentTodo Todo - HiLink jsCvsTag Function HiLink jsString String HiLink jsObjectKeyString String HiLink jsTemplateString String From 1586f7230bdb6bb690f251ba59ce5825a51068f8 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 22 Jun 2016 10:45:27 -0700 Subject: [PATCH 207/929] Added async to jsClassMethodDefinitions It's an ES7 feature, fixes #506 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 72fc0221..4ccaecd9 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -164,7 +164,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty +syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" From e8a6f93e5abde9a8f4d5d9ee0e954e21b40fc3b3 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 22 Jun 2016 10:58:05 -0700 Subject: [PATCH 208/929] Adding support for switch blocks Fixes #505 --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4ccaecd9..9d883276 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -105,6 +105,7 @@ syntax keyword jsFinally contained finally skipwhite skipempty nextgro syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw syntax keyword jsAsyncKeyword async await +syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsBlock " Keywords syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat @@ -139,7 +140,7 @@ syntax region jsClassBlock contained matchgroup=jsClassBraces s syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold -syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel extend fold +syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel,jsSwitchColon extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold @@ -296,6 +297,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsSpreadOperator Operator HiLink jsRestOperator Operator HiLink jsRestExpression jsFuncArgs + HiLink jsSwitchColon Noise HiLink jsDestructuringBraces Noise HiLink jsDestructuringProperty jsFuncArgs From d6a96994283d87a06b690fbe99f73b069893b508 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 22 Jun 2016 11:27:00 -0700 Subject: [PATCH 209/929] Added async to jsObjectMethodTypes --- syntax/javascript.vim | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 9d883276..78505ee4 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -81,7 +81,7 @@ syntax match jsObjectSeparator contained /,/ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ -syntax match jsObjectGetSet contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName +syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue @@ -136,14 +136,14 @@ syntax region jsParenRepeat contained matchgroup=jsParens s syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel,jsSwitchColon extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ @@ -165,7 +165,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodDefinitions contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty +syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" @@ -298,6 +298,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsRestOperator Operator HiLink jsRestExpression jsFuncArgs HiLink jsSwitchColon Noise + HiLink jsClassMethodType Type + HiLink jsObjectMethodType Type HiLink jsDestructuringBraces Noise HiLink jsDestructuringProperty jsFuncArgs @@ -315,9 +317,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsCssStyles Label - HiLink jsClassMethodDefinitions Type - HiLink jsObjectGetSet Type - delcommand HiLink endif From 29e1e0561eeb33f8be89de739f58ca9c19398a0a Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 23 Jun 2016 14:38:31 -0700 Subject: [PATCH 210/929] minor indentation cleaning (#508) also a fix for case labels containing [\:] --- indent/javascript.vim | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f4676358..1f3ab039 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -43,7 +43,7 @@ endif let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' -let s:expr_case = s:line_pre . '\%(case\s\+[^\:]*\|default\)\s*:\s*\C' +let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' @@ -337,7 +337,7 @@ function GetJavascriptIndent() endif " single opening bracket will assume you want a c style of indenting - if s:Match(v:lnum, s:line_pre . '{' . s:line_term) && !s:Match(lnum,s:block_regex) && + if line =~ s:line_pre . '{' . s:line_term && !s:Match(lnum,s:block_regex) && \ !s:Match(lnum,s:comma_last) return cindent(v:lnum) endif @@ -353,7 +353,7 @@ function GetJavascriptIndent() " If we got a closing bracket on an empty line, find its match and indent " according to it. - let col = s:Match(v:lnum, s:line_pre . '[]})]') + let col = line =~ s:line_pre . '[]})]' if col > 0 let parlnum = v:lnum while col @@ -395,12 +395,12 @@ function GetJavascriptIndent() end " If previous line starts with an operator... - elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex))||getline(lnum) =~ ');\=' . s:line_term + elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex))||getline(lnum) =~ '[]})];\=' . s:line_term let counts = s:LineHasOpeningBrackets(lnum) - if counts[0] == '2' && !s:Match(lnum, s:operator_first) + if counts =~ '2' && !s:Match(lnum, s:operator_first) call cursor(lnum, 1) " Search for the opening tag - let mnum = s:lookForParens('(', ')', 'nbW', 0) + let mnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) if mnum > 0 && s:Match(mnum, s:operator_first) return indent(mnum) - s:sw() end @@ -434,16 +434,6 @@ function GetJavascriptIndent() return 0 endif - " foo('foo', - " bar('bar', function() { - " hi(); - " }) - " ); - - " function (a, b, c, d, - " e, f, g) { - " console.log('inner'); - " } " If the previous line ended with a block opening, add a level of indent. if s:Match(lnum, s:block_regex) return s:InMultiVarStatement(lnum, 0, 0) || s:LineHasOpeningBrackets(lnum) !~ '2' ? @@ -463,7 +453,8 @@ function GetJavascriptIndent() call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]')) endwhile let cur = line('.') - if cur < lnum && !s:InMultiVarStatement(cur,0,0) + if cur < lnum && !s:InMultiVarStatement(cur,0,0) && + \ !s:Onescope(s:PrevNonBlankNonString(cur - 1)) return indent(s:GetMSL(cur, 0)) end elseif counts =~ '1' || s:Onescope(lnum) From 560b4fde6bf9e24585643f9635ededae2907ccf2 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 25 Jun 2016 09:25:25 -0700 Subject: [PATCH 211/929] Improvements for one line scope (#509) * Improvements for one line scope * possibly not a good idea everything seems to work well though --- indent/javascript.vim | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1f3ab039..b35a05be 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -77,7 +77,7 @@ function s:Onescope(lnum) end let mypos = col('.') call cursor(a:lnum, 1) - if search('\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && + if search('.*\zs\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && \ s:lookForParens('(', ')', 'W', a:lnum) > 0 && \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) call cursor(a:lnum, mypos) @@ -337,7 +337,7 @@ function GetJavascriptIndent() endif " single opening bracket will assume you want a c style of indenting - if line =~ s:line_pre . '{' . s:line_term && !s:Match(lnum,s:block_regex) && + if line =~ s:line_pre . '{' && !s:Match(lnum,s:block_regex) && \ !s:Match(lnum,s:comma_last) return cindent(v:lnum) endif @@ -395,13 +395,15 @@ function GetJavascriptIndent() end " If previous line starts with an operator... - elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex))||getline(lnum) =~ '[]})];\=' . s:line_term + elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex)) || + \ getline(lnum) =~ '[]})];\=' . s:line_term let counts = s:LineHasOpeningBrackets(lnum) if counts =~ '2' && !s:Match(lnum, s:operator_first) call cursor(lnum, 1) " Search for the opening tag let mnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if mnum > 0 && s:Match(mnum, s:operator_first) + if mnum > 0 && (s:Match(mnum, s:operator_first) || + \ (s:Onescope(s:PrevNonBlankNonString(mnum - 1))) && !s:Match(mnum, s:line_pre . '{')) return indent(mnum) - s:sw() end elseif s:Match(lnum, s:operator_first) @@ -453,8 +455,7 @@ function GetJavascriptIndent() call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]')) endwhile let cur = line('.') - if cur < lnum && !s:InMultiVarStatement(cur,0,0) && - \ !s:Onescope(s:PrevNonBlankNonString(cur - 1)) + if cur < lnum && !s:InMultiVarStatement(cur,0,0) return indent(s:GetMSL(cur, 0)) end elseif counts =~ '1' || s:Onescope(lnum) From ebda7fee040dcac1a09a006e7aeb6f35c85d58eb Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 25 Jun 2016 17:04:32 -0700 Subject: [PATCH 212/929] Adding jsComment to import/export blocks --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 78505ee4..256fe746 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -40,12 +40,12 @@ syntax keyword jsModuleKeywords contained import syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault syntax keyword jsModuleOperators contained from syntax keyword jsModuleOperators contained as -syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise +syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment syntax match jsModuleAsterisk contained /*/ syntax keyword jsModuleDefault contained default skipwhite kipempty nextgroup=@jsExpression syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression -syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise +syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend From bf53654d6b77e1dddcb585d1c69523a605c18500 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 22 Jun 2016 15:31:27 -0700 Subject: [PATCH 213/929] A fix for jsFlowReturn --- extras/flow.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 6ae9b901..9f568491 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -1,7 +1,7 @@ syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock -syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend +syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster From fdc96c469d35224764cb73d3098ea8dfbf3ba4d8 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 23 Jun 2016 17:07:49 -0700 Subject: [PATCH 214/929] More misc fixes for various flow things --- extras/flow.vim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/extras/flow.vim b/extras/flow.vim index 9f568491..3b4036da 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -2,14 +2,17 @@ syntax region jsFlowTypeStatement start=/type/ end=/=/ onelin syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend -syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend +syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend +syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue +syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster +syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster syntax keyword jsFlowDeclareKeyword contained declare syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow syntax match jsFlowNoise contained /[:;,<>]/ -syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise +syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow syntax keyword jsFlowStorageClass contained const var let syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue syntax region jsFlowClass contained matchgroup=jsFlowNoise start=// oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock @@ -28,6 +31,9 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowObject PreProc HiLink jsFlowParenRegion PreProc HiLink jsFlowClass PreProc + HiLink jsFlowTypeObject PreProc + HiLink jsFlowTypeKey PreProc + HiLink jsFlowTypeValue PreProc HiLink jsFlowClassProperty jsClassProperty HiLink jsFlowType Type HiLink jsFlowDeclareKeyword Type From bfbc10d2fe9ffd39d9e38251aaa4a0404b1acedd Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 27 Jun 2016 15:26:35 -0700 Subject: [PATCH 215/929] Fixed jsFlowTypeObjects not being closed --- extras/flow.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/flow.vim b/extras/flow.vim index 3b4036da..8aa19e96 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -2,9 +2,9 @@ syntax region jsFlowTypeStatement start=/type/ end=/=/ onelin syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend -syntax region jsFlowTypeObject contained start=/{/ end=/}/ contains=jsFlowTypeKey skipwhite skipempty nextgroup=jsFunctionBlock extend +syntax region jsFlowTypeObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowTypeKey,jsFlowNoise skipwhite skipempty nextgroup=jsFunctionBlock extend syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue -syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]/ contains=@jsFlowCluster +syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]\@=/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster From 4670d4fcabb3caf96e2115705d59d77dff8bb932 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 28 Jun 2016 11:41:52 -0700 Subject: [PATCH 216/929] Fix for jsFlowTypeValue --- extras/flow.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 8aa19e96..1548b9c2 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -4,7 +4,7 @@ syntax region jsFlow start=/:/ end=/\%(\%([),=;\n syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend syntax region jsFlowTypeObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowTypeKey,jsFlowNoise skipwhite skipempty nextgroup=jsFunctionBlock extend syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue -syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,}]\@=/ contains=@jsFlowCluster +syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,};]\@=/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster From 583a4948d28f22e6d078ef13db2d65005f081e65 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 28 Jun 2016 11:42:10 -0700 Subject: [PATCH 217/929] Including jsFlow in other contexts --- extras/flow.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 1548b9c2..a5bf8b56 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -1,6 +1,6 @@ syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass -syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster containedin=jsBlock,jsClassBlock,jsFuncBlock,jsBlock,jsTryCatchBlock,jsSwitchBlock,jsParen oneline skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend syntax region jsFlowTypeObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowTypeKey,jsFlowNoise skipwhite skipempty nextgroup=jsFunctionBlock extend syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue From 5a699857eddb988d27cb1a74acdcc873a8b9c384 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Tue, 28 Jun 2016 11:47:28 -0700 Subject: [PATCH 218/929] Adding bool to jsFlowType --- extras/flow.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index a5bf8b56..759d7548 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -9,7 +9,7 @@ syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster syntax keyword jsFlowDeclareKeyword contained declare -syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array +syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array bool syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow syntax match jsFlowNoise contained /[:;,<>]/ syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow From 4133fcad01ad6593d17fa77c5bd9b86d9e336887 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 29 Jun 2016 20:32:34 -0700 Subject: [PATCH 219/929] Linking jsClassDefinition to jsFuncName They really should be linked, because jsClassDefinition is really just a function --- syntax/javascript.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 256fe746..b8a3b422 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -300,6 +300,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsSwitchColon Noise HiLink jsClassMethodType Type HiLink jsObjectMethodType Type + HiLink jsClassDefinition jsFuncName HiLink jsDestructuringBraces Noise HiLink jsDestructuringProperty jsFuncArgs From ac92e1b2856ac887ff358bb64c1f9ce7caa56896 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 7 Jul 2016 21:38:09 -0700 Subject: [PATCH 220/929] Adding do expression support --- syntax/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b8a3b422..0349f5e4 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -98,7 +98,7 @@ syntax keyword jsStatement contained break continue with yield debugger syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat -syntax keyword jsRepeat do skipwhite skipempty nextgroup=jsBlock +syntax keyword jsDo do skipwhite skipempty nextgroup=jsBlock syntax keyword jsLabel contained case default syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsBlock @@ -203,7 +203,7 @@ if exists("javascript_plugin_flow") runtime extras/flow.vim endif -syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper +syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. @@ -241,6 +241,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsLabel Label HiLink jsReturn Statement HiLink jsRepeat Repeat + HiLink jsDo Repeat HiLink jsStatement Statement HiLink jsException Exception HiLink jsTry Exception From 3b8017ef647e181567f25964dff0cdf6a6427d01 Mon Sep 17 00:00:00 2001 From: Justin Ridgewell Date: Sun, 10 Jul 2016 21:28:55 -0400 Subject: [PATCH 221/929] Remove jsOperator from jsClassBlock It screws up highlighting of the operators when they are used as method names: ![`delete` keyword as class method](https://dl.dropboxusercontent.com/content_link/hJYRBOhHwrBDjhoAesh3LuRS2eFPlaTSLSHLsKTq8CnfKur0FwNQ3GGo7cobYdLq/file). This doesn't happen if you're inside a normal object: ![`delete` keyword as obj method](https://dl.dropboxusercontent.com/content_link/hJYRBOhHwrBDjhoAesh3LuRS2eFPlaTSLSHLsKTq8CnfKur0FwNQ3GGo7cobYdLq/file) --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 0349f5e4..eb64354b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -136,7 +136,7 @@ syntax region jsParenRepeat contained matchgroup=jsParens s syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold From ac813c03a4085fe1ce3b9296a08681c888a274f3 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 10 Jul 2016 22:02:54 -0700 Subject: [PATCH 222/929] Adding support for oddly placed comments * Functions * Classes * Conditionals * Repeat statements --- syntax/javascript.vim | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index eb64354b..dc85953d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -95,7 +95,8 @@ exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal " Statement Keywords syntax keyword jsStatement contained break continue with yield debugger -syntax keyword jsConditional if else skipwhite skipempty nextgroup=jsParenIfElse,jsBlock +syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse +syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsBlock syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat syntax keyword jsDo do skipwhite skipempty nextgroup=jsBlock @@ -131,11 +132,11 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus "" Code blocks syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold -syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold -syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold +syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold @@ -166,7 +167,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClass syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue @@ -191,6 +192,16 @@ syntax region jsComment start=/\/\// end=/$/ contains=jsCommentTodo,@Spe syntax region jsComment start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend syntax region jsEnvComment start=/\%^#!/ end=/$/ display +" Specialized Comments - These are special comment regexes that are used in +" odd places that maintain the proper nextgroup functionality. It sucks we +" can't make jsComment a skippable type of group for nextgroup +syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend +syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend +syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass extend keepend +syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass fold extend keepend +syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend +syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend + if exists("javascript_plugin_jsdoc") runtime extras/jsdoc.vim " NGDoc requires JSDoc @@ -308,6 +319,10 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsDestructuringAssignment jsObjectKey HiLink jsDestructuringNoise Noise + HiLink jsCommentFunction jsComment + HiLink jsCommentClass jsComment + HiLink jsCommentMisc jsComment + HiLink jsDomErrNo Constant HiLink jsDomNodeConsts Constant HiLink jsDomElemAttrs Label From 7982ec46fb6c16f68d6c11657950336689836ba0 Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Tue, 12 Jul 2016 20:00:22 -0400 Subject: [PATCH 223/929] typo --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index dc85953d..49fa5b86 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -42,7 +42,7 @@ syntax keyword jsModuleOperators contained from syntax keyword jsModuleOperators contained as syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment syntax match jsModuleAsterisk contained /*/ -syntax keyword jsModuleDefault contained default skipwhite kipempty nextgroup=@jsExpression +syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment From ed40c9cb625b8b679fbec4c5b55fde60ec27f58e Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Fri, 15 Jul 2016 00:41:49 +0300 Subject: [PATCH 224/929] Tweak highlighting of numeric literals - Add highlighting for binary and octal number syntax - Highlight unary minus as operator regardless of 'iskeyword' option - Remove L from integer literals --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 49fa5b86..5ab10be7 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -52,9 +52,9 @@ syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ cont syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial extend syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString -syntax match jsNumber /\<-\=\d\+\(L\|[eE][+-]\=\d\+\)\=\>\|\<0[xX]\x\+\>/ +syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/ syntax keyword jsNumber Infinity -syntax match jsFloat /\<-\=\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ +syntax match jsFloat /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/ " Regular Expressions syntax match jsSpecial contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)" From 550e1e8e8375f529b039a1a81a66d8ad43421cac Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Fri, 15 Jul 2016 01:12:07 +0300 Subject: [PATCH 225/929] Make use of syntax specific iskeyword setting It's better not to touch 'iskeyword' option from a syntax file if possible. --- syntax/javascript.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 49fa5b86..73b00c9e 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -16,8 +16,12 @@ if !exists('g:javascript_conceal') let g:javascript_conceal = 0 endif -" Dollar sign is permittd anywhere in an identifier -setlocal iskeyword+=$ +" Dollar sign is permitted anywhere in an identifier +if v:version > 704 || v:version == 704 && has('patch1142') + syntax iskeyword @,48-57,_,192-255,$ +else + setlocal iskeyword+=$ +endif syntax sync fromstart " TODO: Figure out what type of casing I need From 8cf97bdc74ef1c774aaa5a67e2626dcc6d40b66a Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Fri, 15 Jul 2016 02:13:53 +0300 Subject: [PATCH 226/929] Update filetype plugin - Add header - Replace 're' with 'regexpengine' - Simplify patch check --- ftplugin/javascript.vim | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ftplugin/javascript.vim b/ftplugin/javascript.vim index 58755a4a..e11ea2e0 100644 --- a/ftplugin/javascript.vim +++ b/ftplugin/javascript.vim @@ -1,4 +1,10 @@ +" Vim filetype plugin file +" Language: JavaScript +" Maintainer: vim-javascript community +" URL: https://github.com/pangloss/vim-javascript + setlocal suffixesadd+=.js -if (v:version < 704 || (v:version == 704 && !has('patch002'))) && exists('®expengine') - set re=1 -end + +if v:version == 703 && exists('®expengine') || v:version == 704 && !has('patch2') + set regexpengine=1 +endif From 653858c18057c4f2e25494a0286933a1fe3bec77 Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Fri, 15 Jul 2016 08:06:11 +0400 Subject: [PATCH 227/929] Make use of b:undo_indent variable (#542) It's better when effect of indent script can be undone. --- indent/javascript.vim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index b35a05be..8a544459 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -19,6 +19,8 @@ setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 +let b:undo_indent = 'setlocal smartindent< indentexpr< formatexpr< indentkeys< cinoptions<' + " Only define the function once. if exists("*GetJavascriptIndent") finish From 32e7c78716ec72f60c7962af22a8eadc287b579c Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 15 Jul 2016 00:48:31 -0700 Subject: [PATCH 228/929] indentation refactoring (#515) simplistic, accurate, possibly slow refactor switch case, code reduction & removing needless if's make search pair result local to buffer https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in do while fix case sensitivity --- indent/javascript.vim | 422 +++++++----------------------------------- 1 file changed, 66 insertions(+), 356 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8a544459..a6dc1a74 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,9 +2,6 @@ " Language: Javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org -" 0. Initialization {{{1 -" ================= - " Only load this indent file when no other was loaded. if exists("b:did_indent") finish @@ -16,7 +13,7 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e +setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 let b:undo_indent = 'setlocal smartindent< indentexpr< formatexpr< indentkeys< cinoptions<' @@ -40,66 +37,44 @@ else endfunc endif -" 1. Variables {{{1 -" ============ - let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' -let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' -" Regex of syntax group names that are strings. -let s:syng_string = 'regex\c' - " Regex of syntax group names that are strings or documentation. let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" -func s:lookForParens(start,end,flags,stop) +func s:lookForParens(start,end,flags,time) try - return searchpair(a:start,'',a:end,a:flags,s:skip_expr,a:stop,300) + return searchpair(a:start,'',a:end,a:flags, + \ "line('.') < " . (prevnonblank(v:lnum) - 2000) . " ? dummy :" . s:skip_expr + \ ,0,a:time) catch /E118/ - return searchpair(a:start,'',a:end,a:flags,0,a:stop) + return searchpair(a:start,'',a:end,a:flags,0,0) endtry endfunc -let s:line_term = '\s*\%(\%(\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$' +let s:line_term = '\s*\%(\%(:\@\|=>\)\C' . s:line_term +let s:continuation_regex = '\%([*,.?:]\|+\@\s*(\C', 'ce', a:lnum) > 0 && - \ s:lookForParens('(', ')', 'W', a:lnum) > 0 && - \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) - call cursor(a:lnum, mypos) - return 1 - else - call cursor(a:lnum, mypos) - return 0 - end + return getline(a:lnum) =~ '\%(\\)\C' . s:line_term || + \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && + \ s:lookForParens('(', ')', 'cbW', 100) > 0 && + \ cursor(line('.'),match(strpart(getline(line('.')),0,col('.') - 1), + \ '\<\%(catch\|else\|finally\|for\%(\s+each\)\=\|if\|let\|try\|while\|with\)\C' . s:line_term) + 1) > -1) && + \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) endfunction -" Regex that defines blocks. -let s:block_regex = '[{([]' . s:line_term - let s:operator_first = s:line_pre . '\%([,:?]\|\([-/.+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' -let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' - -let s:comma_last = ',' . s:line_term - -" 2. Auxiliary Functions {{{1 +" Auxiliary Functions {{{2 " ====================== " Check if the character at lnum:col is inside a string, comment, or is ascii. @@ -107,11 +82,6 @@ function s:IsInStringOrComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom endfunction -" Check if the character at lnum:col is inside a string. -function s:IsInString(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string -endfunction - " Check if the character at lnum:col is inside a multi-line comment. function s:IsInComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_comment @@ -121,15 +91,7 @@ endfunction function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 - let line = getline(lnum) - let com = match(line, '\%(\/\*.*\)\@ 0 - let lnum = parlnum - end - elseif line !~ '^' . s:line_term && !s:IsInStringOrComment(lnum,1) + if !s:IsInStringOrComment(lnum, matchend(getline(lnum), '^\s*[^''"]')) break endif let lnum = prevnonblank(lnum - 1) @@ -137,94 +99,6 @@ function s:PrevNonBlankNonString(lnum) return lnum endfunction -" Find line above 'lnum' that started the continuation 'lnum' may be part of. -function s:GetMSL(lnum, in_one_line_scope) - " Start on the line we're at and use its indent. - let msl = a:lnum - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - while lnum > 0 && !s:Match(msl,s:line_pre . '[])}]') - " If we have a continuation line, or we're in a string, use line as MSL. - " Otherwise, terminate search as we have found our MSL already. - let line = getline(lnum) - let line2 = getline(msl) - if ((s:Match(lnum,s:continuation_regex) || s:Match(lnum, s:comma_last)) && - \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) - let msl = lnum - if s:Match(lnum, s:line_pre . '[]})]') && !a:in_one_line_scope - call cursor(lnum,1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - let lnum = parlnum - continue - end - end - - else - - " Don't use lines that are part of a one line scope as msl unless the - " flag in_one_line_scope is set to 1 - " - if a:in_one_line_scope - break - end - let msl_one_line = s:Onescope(lnum) - if msl_one_line == 0 - break - endif - end - let lnum = s:PrevNonBlankNonString(lnum - 1) - endwhile - return msl -endfunction - -function s:RemoveTrailingComments(content) - let single = '\/\/\%(.*\)\s*$' - let multi = '\/\*\%(.*\)\*\/\s*$' - return substitute(substitute(substitute(a:content, single, '', ''), multi, '', ''), '\s\+$', '', '') -endfunction - -" Find if the string is inside var statement (but not the first string) -function s:InMultiVarStatement(lnum, cont, prev) - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - let cont = a:cont - let prev = a:prev - - " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') - - " loop through previous expressions to find a var statement - while lnum > 0 && (s:Match(lnum, s:comma_last) ||(cont && getline(lnum) =~ s:line_pre . '[]})]') || - \ s:Match(lnum,s:continuation_regex)) || (prev && (s:Match(prev, s:comma_last) || - \ s:Match(prev,s:continuation_regex))) - " if the line is a js keyword - if cont - let cont = 0 - call cursor(lnum,1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - let lnum = parlnum - end - end - if s:Match(lnum, s:js_keywords) - " check if the line is a var stmt - " if the line has a comma first or comma last then we can assume that we - " are in a multiple var statement - if s:Match(lnum, s:var_stmt) && (s:Match(lnum, s:comma_last)||s:Match(lnum,s:continuation_regex)) - return lnum - endif - - " other js keywords, not a var - if !s:Match(lnum, s:comma_last)||!s:Match(lnum,s:continuation_regex) - return 0 - end - endif - let lnum = s:PrevNonBlankNonString(lnum - 1) - let prev = prev && lnum > 0 ? prev : 0 - endwhile - - " beginning of program, not a var - return 0 -endfunction - " Check if line 'lnum' has more opening brackets than closing ones. function s:LineHasOpeningBrackets(lnum) let open_0 = 0 @@ -245,82 +119,14 @@ function s:LineHasOpeningBrackets(lnum) endwhile return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) endfunction +" }}} -function s:Match(lnum, regex) - let col = match(getline(a:lnum), a:regex) + 1 - return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 -endfunction - -function s:IndentWithContinuation(lnum, ind, width) - " Set up variables to use and search for MSL to the previous line. - let p_lnum = a:lnum - let lnum = s:GetMSL(a:lnum, 1) - let line = getline(lnum) - - " If the previous line wasn't a MSL and is continuation return its indent. - " TODO: the || s:IsInString() thing worries me a bit. - if p_lnum != lnum - if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line)) - return a:ind - endif - endif - - " Set up more variables now that we know we aren't continuation bound. - let msl_ind = indent(lnum) - - " If the previous line ended with [*+/.-=], start a continuation that - " indents an extra level. - if s:Match(lnum, s:continuation_regex) - if lnum == p_lnum - return msl_ind + a:width - else - return msl_ind - end - elseif s:InMultiVarStatement(p_lnum, 0, s:PrevNonBlankNonString(p_lnum - 1)) - return indent(p_lnum) - s:sw() - endif - - return a:ind -endfunction - -function s:InOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 && s:Onescope(msl) - return msl - endif - return 0 -endfunction - -function s:ExitingOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 - " if the current line is in a one line scope .. - if s:Onescope(msl) - return 0 - else - let prev_msl = s:GetMSL(msl - 1, 1) - if s:Onescope(prev_msl) - return prev_msl - endif - endif - endif - return 0 -endfunction - -" 3. GetJavascriptIndent Function {{{1 +" GetJavascriptIndent Function " ========================= - function GetJavascriptIndent() - " 3.1. Setup {{{1 - " ---------- - " Set up variables for restoring position in file. Could use v:lnum here. - " Avoid use of line('.')/col('.') type functions as the curpos can change - let vcol = col('.') - - " 3.2. Work on the current line {{{1 - " ----------------------------- - - let ind = -1 + if !exists('b:js_cache') + let b:js_cache = [0,0] + end " Get the current line. let line = getline(v:lnum) " previous nonblank line number @@ -328,174 +134,78 @@ function GetJavascriptIndent() " previous line of code let lnum = s:PrevNonBlankNonString(v:lnum - 1) - " to not change multiline string values + " start with strings,comments,etc.{{{2 if line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' return -1 endif - - " If we are in a multi-line comment, cindent does the right thing. if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif - - " single opening bracket will assume you want a c style of indenting - if line =~ s:line_pre . '{' && !s:Match(lnum,s:block_regex) && - \ !s:Match(lnum,s:comma_last) - return cindent(v:lnum) - endif - - " cindent each line which has a switch label - if (line =~ s:expr_case) - let s:cpo_switch = &cpo - set cpo+=% - let ind = cindent(v:lnum) - let &cpo = s:cpo_switch - return ind - endif - - " If we got a closing bracket on an empty line, find its match and indent - " according to it. - let col = line =~ s:line_pre . '[]})]' - if col > 0 - let parlnum = v:lnum - while col - call cursor(parlnum, 1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - let col = s:Match(parlnum, s:line_pre . '[]})]') - if col - continue - end - if parlnum > 0 - let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' ? - \ indent(parlnum) : indent(s:GetMSL(parlnum, 0)) - endif - endwhile - return ind - endif - - - " If line starts with an operator... - if (line =~ s:operator_first) - if (s:Match(lnum, s:operator_first) || (s:Match(lnum, s:line_pre . '[])}]') && - \ !(s:Match(v:lnum,s:line_pre . '\.') && s:Match(lnum, ')' . s:line_term)))) - " and so does previous line, don't indent - return indent(lnum) - end - let counts = s:LineHasOpeningBrackets(lnum) - if counts =~ '2' - call cursor(lnum, 1) - " Search for the opening tag - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - return !s:Match(parlnum, s:operator_first) && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' ? - \ indent(lnum) + s:sw() : indent(parlnum) - end - elseif synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' - " otherwise, if not in an key/val;array item;param, indent 1 level - return indent(lnum) + s:sw() - end - - " If previous line starts with an operator... - elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex)) || - \ getline(lnum) =~ '[]})];\=' . s:line_term - let counts = s:LineHasOpeningBrackets(lnum) - if counts =~ '2' && !s:Match(lnum, s:operator_first) - call cursor(lnum, 1) - " Search for the opening tag - let mnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if mnum > 0 && (s:Match(mnum, s:operator_first) || - \ (s:Onescope(s:PrevNonBlankNonString(mnum - 1))) && !s:Match(mnum, s:line_pre . '{')) - return indent(mnum) - s:sw() - end - elseif s:Match(lnum, s:operator_first) - if counts !~ '1' - return indent(lnum) - s:sw() - end - end - end - - " 3.3. Work on the previous line. {{{1 - " ------------------------------- - - " If the line is empty and the previous nonblank line was a multi-line - " comment, use that comment's indent. Deduct one char to account for the - " space in ' */'. if line =~ '^\s*$' && getline(prevline) =~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@= lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && + \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') + let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] + else + call cursor(v:lnum,1) + let syns = synIDattr(synID(v:lnum, 1, 1), 'name') + if line[1] =~ '\s' + if syns != '' + let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : + \ ['(\|{\|\[',')\|}\|\]'] + let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) + else + let num = 0 end - elseif counts =~ '1' || s:Onescope(lnum) - return ind + s:sw() + else + let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) end end + let b:js_cache = [v:lnum, num] - " 3.4. Work on the MSL line. {{{1 - " -------------------------- - if s:Match(lnum, s:comma_last) && !s:Match(lnum, s:continuation_regex) - return s:Match(lnum, s:var_stmt) ? indent(lnum) + s:sw() : indent(lnum) - - elseif s:Match(s:PrevNonBlankNonString(lnum - 1), s:comma_last) - if !s:Match(lnum, s:comma_last) && s:InMultiVarStatement(lnum,1,0) - return indent(lnum) - s:sw() - end + " most significant part + if line =~ s:line_pre . '[])}]' + return indent(num) end - let ind_con = ind - let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) - - " }}}2 - " - " - let ols = s:InOneLineScope(lnum) - if ols > 0 - let ind = ind + s:sw() - else - let ols = s:ExitingOneLineScope(lnum) - while ols > 0 && ind > 0 - let ind = ind - s:sw() - let ols = s:InOneLineScope(ols - 1) - endwhile + let switch_offset = 0 + if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'switch' + let num = search('\ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + elseif num > 0 + return indent(num) + s:sw() + switch_offset + end - return ind endfunction -" }}}1 let &cpo = s:cpo_save unlet s:cpo_save From 352bcc283c90db635321faa7ee789fd2c24327d9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 15 Jul 2016 01:58:44 -0700 Subject: [PATCH 229/929] try ..catch (#546) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch these need block statements --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a6dc1a74..6b7a0b50 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -68,7 +68,7 @@ function s:Onescope(lnum) \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ cursor(line('.'),match(strpart(getline(line('.')),0,col('.') - 1), - \ '\<\%(catch\|else\|finally\|for\%(\s+each\)\=\|if\|let\|try\|while\|with\)\C' . s:line_term) + 1) > -1) && + \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term) + 1) > -1) && \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) endfunction From 25ff93778999562b69a32c092ef8f1a3beffa3ce Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 15 Jul 2016 11:03:43 -0700 Subject: [PATCH 230/929] Adding some common NodeJS globals --- syntax/javascript.vim | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 73b00c9e..a2acaa65 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -114,6 +114,8 @@ syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgro " Keywords syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat +syntax keyword jsGlobalNodeObjects module exports global process +syntax match jsGlobalNodeObjects /require/ contains=jsFuncCall syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval " DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? @@ -278,7 +280,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsStorageClass StorageClass HiLink jsClassKeywords Structure HiLink jsThis Special - HiLink jsSuper Special + HiLink jsSuper Constant HiLink jsNan Number HiLink jsNull Type HiLink jsUndefined Type @@ -299,9 +301,10 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsTemplateBraces jsBraces - HiLink jsGlobalObjects Special - HiLink jsExceptions Special - HiLink jsBuiltins Special + HiLink jsGlobalObjects Constant + HiLink jsGlobalNodeObjects Constant + HiLink jsExceptions Constant + HiLink jsBuiltins Constant HiLink jsModuleKeywords Include HiLink jsModuleOperators Include HiLink jsModuleDefault Include From e41dbaaccf463dca0ea059a4b65fd6b0ad8be6b9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 15 Jul 2016 12:35:43 -0700 Subject: [PATCH 231/929] for 194 (#548) * for 194 --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6b7a0b50..d2874d4d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -135,7 +135,8 @@ function GetJavascriptIndent() let lnum = s:PrevNonBlankNonString(v:lnum - 1) " start with strings,comments,etc.{{{2 - if line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template' + if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || + \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'comment') return -1 endif if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) From 2792e632433cff574805cc5f6998cdbc1bc0c75b Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 15 Jul 2016 22:08:56 -0700 Subject: [PATCH 232/929] switch offset always calculated when inside switch --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d2874d4d..d6c163f5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -189,10 +189,10 @@ function GetJavascriptIndent() return indent(num) end let switch_offset = 0 - if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'switch' - let num = search('\ -1 + let bnum = search('\ Date: Fri, 15 Jul 2016 22:34:06 -0700 Subject: [PATCH 233/929] Update javascript.vim --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d6c163f5..18fe546f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -157,7 +157,7 @@ function GetJavascriptIndent() set cpo+=% let ind = cindent(v:lnum) let &cpo = s:cpo_switch - let b:js_cache = [v:lnum, search('\ Date: Fri, 15 Jul 2016 22:47:38 -0700 Subject: [PATCH 234/929] 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 18fe546f..0c24d937 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -157,7 +157,7 @@ function GetJavascriptIndent() set cpo+=% let ind = cindent(v:lnum) let &cpo = s:cpo_switch - let b:js_cache[1] = search('\ Date: Sat, 16 Jul 2016 12:05:10 -0700 Subject: [PATCH 235/929] possible indent revert(dev branch) (#550) I want to include whatever improvements made in the refactor attempt though --- indent/javascript.vim | 424 +++++++++++++++++++++++++++++++++++------- 1 file changed, 356 insertions(+), 68 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d2874d4d..d2911c5b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,6 +2,9 @@ " Language: Javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org +" 0. Initialization {{{1 +" ================= + " Only load this indent file when no other was loaded. if exists("b:did_indent") finish @@ -13,11 +16,9 @@ setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e +setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 -let b:undo_indent = 'setlocal smartindent< indentexpr< formatexpr< indentkeys< cinoptions<' - " Only define the function once. if exists("*GetJavascriptIndent") finish @@ -37,44 +38,66 @@ else endfunc endif +" 1. Variables {{{1 +" ============ + let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' +let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' +" Regex of syntax group names that are strings. +let s:syng_string = 'regex\c' + " Regex of syntax group names that are strings or documentation. let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" -func s:lookForParens(start,end,flags,time) +func s:lookForParens(start,end,flags,stop) try - return searchpair(a:start,'',a:end,a:flags, - \ "line('.') < " . (prevnonblank(v:lnum) - 2000) . " ? dummy :" . s:skip_expr - \ ,0,a:time) + return searchpair(a:start,'',a:end,a:flags,s:skip_expr,a:stop,300) catch /E118/ - return searchpair(a:start,'',a:end,a:flags,0,0) + return searchpair(a:start,'',a:end,a:flags,0,a:stop) endtry endfunc -let s:line_term = '\s*\%(\%(:\@\|=>\)\C' . s:line_term function s:Onescope(lnum) - return getline(a:lnum) =~ '\%(\\)\C' . s:line_term || - \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && - \ s:lookForParens('(', ')', 'cbW', 100) > 0 && - \ cursor(line('.'),match(strpart(getline(line('.')),0,col('.') - 1), - \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term) + 1) > -1) && - \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) + if getline(a:lnum) =~ s:one_line_scope_regex + return 1 + end + let mypos = col('.') + call cursor(a:lnum, 1) + if search('.*\zs\<\%(while\|for\|if\)\>\s*(\C', 'ce', a:lnum) > 0 && + \ s:lookForParens('(', ')', 'W', a:lnum) > 0 && + \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) + call cursor(a:lnum, mypos) + return 1 + else + call cursor(a:lnum, mypos) + return 0 + end endfunction +" Regex that defines blocks. +let s:block_regex = '[{([]' . s:line_term + let s:operator_first = s:line_pre . '\%([,:?]\|\([-/.+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' -" Auxiliary Functions {{{2 +let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' + +let s:comma_last = ',' . s:line_term + +" 2. Auxiliary Functions {{{1 " ====================== " Check if the character at lnum:col is inside a string, comment, or is ascii. @@ -82,6 +105,11 @@ function s:IsInStringOrComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom endfunction +" Check if the character at lnum:col is inside a string. +function s:IsInString(lnum, col) + return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string +endfunction + " Check if the character at lnum:col is inside a multi-line comment. function s:IsInComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_comment @@ -91,7 +119,15 @@ endfunction function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 - if !s:IsInStringOrComment(lnum, matchend(getline(lnum), '^\s*[^''"]')) + let line = getline(lnum) + let com = match(line, '\%(\/\*.*\)\@ 0 + let lnum = parlnum + end + elseif line !~ '^' . s:line_term && !s:IsInStringOrComment(lnum,1) break endif let lnum = prevnonblank(lnum - 1) @@ -99,6 +135,94 @@ function s:PrevNonBlankNonString(lnum) return lnum endfunction +" Find line above 'lnum' that started the continuation 'lnum' may be part of. +function s:GetMSL(lnum, in_one_line_scope) + " Start on the line we're at and use its indent. + let msl = a:lnum + let lnum = s:PrevNonBlankNonString(a:lnum - 1) + while lnum > 0 && !s:Match(msl,s:line_pre . '[])}]') + " If we have a continuation line, or we're in a string, use line as MSL. + " Otherwise, terminate search as we have found our MSL already. + let line = getline(lnum) + let line2 = getline(msl) + if ((s:Match(lnum,s:continuation_regex) || s:Match(lnum, s:comma_last)) && + \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) + let msl = lnum + if s:Match(lnum, s:line_pre . '[]})]') && !a:in_one_line_scope + call cursor(lnum,1) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + if parlnum > 0 + let lnum = parlnum + continue + end + end + + else + + " Don't use lines that are part of a one line scope as msl unless the + " flag in_one_line_scope is set to 1 + " + if a:in_one_line_scope + break + end + let msl_one_line = s:Onescope(lnum) + if msl_one_line == 0 + break + endif + end + let lnum = s:PrevNonBlankNonString(lnum - 1) + endwhile + return msl +endfunction + +function s:RemoveTrailingComments(content) + let single = '\/\/\%(.*\)\s*$' + let multi = '\/\*\%(.*\)\*\/\s*$' + return substitute(substitute(substitute(a:content, single, '', ''), multi, '', ''), '\s\+$', '', '') +endfunction + +" Find if the string is inside var statement (but not the first string) +function s:InMultiVarStatement(lnum, cont, prev) + let lnum = s:PrevNonBlankNonString(a:lnum - 1) + let cont = a:cont + let prev = a:prev + + " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') + + " loop through previous expressions to find a var statement + while lnum > 0 && (s:Match(lnum, s:comma_last) ||(cont && getline(lnum) =~ s:line_pre . '[]})]') || + \ s:Match(lnum,s:continuation_regex)) || (prev && (s:Match(prev, s:comma_last) || + \ s:Match(prev,s:continuation_regex))) + " if the line is a js keyword + if cont + let cont = 0 + call cursor(lnum,1) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + if parlnum > 0 + let lnum = parlnum + end + end + if s:Match(lnum, s:js_keywords) + " check if the line is a var stmt + " if the line has a comma first or comma last then we can assume that we + " are in a multiple var statement + if s:Match(lnum, s:var_stmt) && (s:Match(lnum, s:comma_last)||s:Match(lnum,s:continuation_regex)) + return lnum + endif + + " other js keywords, not a var + if !s:Match(lnum, s:comma_last)||!s:Match(lnum,s:continuation_regex) + return 0 + end + endif + let lnum = s:PrevNonBlankNonString(lnum - 1) + let prev = prev && lnum > 0 ? prev : 0 + endwhile + + " beginning of program, not a var + return 0 +endfunction + " Check if line 'lnum' has more opening brackets than closing ones. function s:LineHasOpeningBrackets(lnum) let open_0 = 0 @@ -119,14 +243,82 @@ function s:LineHasOpeningBrackets(lnum) endwhile return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) endfunction -" }}} -" GetJavascriptIndent Function +function s:Match(lnum, regex) + let col = match(getline(a:lnum), a:regex) + 1 + return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 +endfunction + +function s:IndentWithContinuation(lnum, ind, width) + " Set up variables to use and search for MSL to the previous line. + let p_lnum = a:lnum + let lnum = s:GetMSL(a:lnum, 1) + let line = getline(lnum) + + " If the previous line wasn't a MSL and is continuation return its indent. + " TODO: the || s:IsInString() thing worries me a bit. + if p_lnum != lnum + if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line)) + return a:ind + endif + endif + + " Set up more variables now that we know we aren't continuation bound. + let msl_ind = indent(lnum) + + " If the previous line ended with [*+/.-=], start a continuation that + " indents an extra level. + if s:Match(lnum, s:continuation_regex) + if lnum == p_lnum + return msl_ind + a:width + else + return msl_ind + end + elseif s:InMultiVarStatement(p_lnum, 0, s:PrevNonBlankNonString(p_lnum - 1)) + return indent(p_lnum) - s:sw() + endif + + return a:ind +endfunction + +function s:InOneLineScope(lnum) + let msl = s:GetMSL(a:lnum, 1) + if msl > 0 && s:Onescope(msl) + return msl + endif + return 0 +endfunction + +function s:ExitingOneLineScope(lnum) + let msl = s:GetMSL(a:lnum, 1) + if msl > 0 + " if the current line is in a one line scope .. + if s:Onescope(msl) + return 0 + else + let prev_msl = s:GetMSL(msl - 1, 1) + if s:Onescope(prev_msl) + return prev_msl + endif + endif + endif + return 0 +endfunction + +" 3. GetJavascriptIndent Function {{{1 " ========================= + function GetJavascriptIndent() - if !exists('b:js_cache') - let b:js_cache = [0,0] - end + " 3.1. Setup {{{1 + " ---------- + " Set up variables for restoring position in file. Could use v:lnum here. + " Avoid use of line('.')/col('.') type functions as the curpos can change + let vcol = col('.') + + " 3.2. Work on the current line {{{1 + " ----------------------------- + + let ind = -1 " Get the current line. let line = getline(v:lnum) " previous nonblank line number @@ -134,79 +326,175 @@ function GetJavascriptIndent() " previous line of code let lnum = s:PrevNonBlankNonString(v:lnum - 1) - " start with strings,comments,etc.{{{2 + " to not change multiline string values if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'comment') return -1 endif + + " If we are in a multi-line comment, cindent does the right thing. if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif + + " single opening bracket will assume you want a c style of indenting + if line =~ s:line_pre . '{' && !s:Match(lnum,s:block_regex) && + \ !s:Match(lnum,s:comma_last) + return cindent(v:lnum) + endif + + " cindent each line which has a switch label + if (line =~ s:expr_case) + let s:cpo_switch = &cpo + set cpo+=% + let ind = cindent(v:lnum) + let &cpo = s:cpo_switch + return ind + endif + + " If we got a closing bracket on an empty line, find its match and indent + " according to it. + let col = line =~ s:line_pre . '[]})]' + if col > 0 + let parlnum = v:lnum + while col + call cursor(parlnum, 1) + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + let col = s:Match(parlnum, s:line_pre . '[]})]') + if col + continue + end + if parlnum > 0 + let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' ? + \ indent(parlnum) : indent(s:GetMSL(parlnum, 0)) + endif + endwhile + return ind + endif + + + " If line starts with an operator... + if (line =~ s:operator_first) + if (s:Match(lnum, s:operator_first) || (s:Match(lnum, s:line_pre . '[])}]') && + \ !(s:Match(v:lnum,s:line_pre . '\.') && s:Match(lnum, ')' . s:line_term)))) + " and so does previous line, don't indent + return indent(lnum) + end + let counts = s:LineHasOpeningBrackets(lnum) + if counts =~ '2' + call cursor(lnum, 1) + " Search for the opening tag + let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + if parlnum > 0 + return !s:Match(parlnum, s:operator_first) && + \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' ? + \ indent(lnum) + s:sw() : indent(parlnum) + end + elseif synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' + " otherwise, if not in an key/val;array item;param, indent 1 level + return indent(lnum) + s:sw() + end + + " If previous line starts with an operator... + elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex)) || + \ getline(lnum) =~ '[]})];\=' . s:line_term + let counts = s:LineHasOpeningBrackets(lnum) + if counts =~ '2' && !s:Match(lnum, s:operator_first) + call cursor(lnum, 1) + " Search for the opening tag + let mnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) + if mnum > 0 && (s:Match(mnum, s:operator_first) || + \ (s:Onescope(s:PrevNonBlankNonString(mnum - 1))) && !s:Match(mnum, s:line_pre . '{')) + return indent(mnum) - s:sw() + end + elseif s:Match(lnum, s:operator_first) + if counts !~ '1' + return indent(lnum) - s:sw() + end + end + end + + " 3.3. Work on the previous line. {{{1 + " ------------------------------- + + " If the line is empty and the previous nonblank line was a multi-line + " comment, use that comment's indent. Deduct one char to account for the + " space in ' */'. if line =~ '^\s*$' && getline(prevline) =~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@= lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') - let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] - else - call cursor(v:lnum,1) - let syns = synIDattr(synID(v:lnum, 1, 1), 'name') - if line[1] =~ '\s' - if syns != '' - let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : - \ ['(\|{\|\[',')\|}\|\]'] - let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) - else - let num = 0 + " Set up variables for current line. + let line = getline(lnum) + let ind = indent(lnum) + " If the previous line contained an opening bracket, and we are still in it, + " add indent depending on the bracket type. + if s:Match(lnum, '[[({})\]]') + let counts = s:LineHasOpeningBrackets(lnum) + if counts =~ '2' + call cursor(lnum,matchend(s:RemoveTrailingComments(line), '.*\zs[])}]')) + while s:lookForParens('(\|{\|\[', ')\|}\|\]', 'bW', 0) == lnum + call cursor(lnum, matchend(s:RemoveTrailingComments(strpart(line,0,col('.'))), '.*\zs[])}]')) + endwhile + let cur = line('.') + if cur < lnum && !s:InMultiVarStatement(cur,0,0) + return indent(s:GetMSL(cur, 0)) end - else - let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) + elseif counts =~ '1' || s:Onescope(lnum) + return ind + s:sw() end end - let b:js_cache = [v:lnum, num] - " most significant part - if line =~ s:line_pre . '[])}]' - return indent(num) + " 3.4. Work on the MSL line. {{{1 + " -------------------------- + if s:Match(lnum, s:comma_last) && !s:Match(lnum, s:continuation_regex) + return s:Match(lnum, s:var_stmt) ? indent(lnum) + s:sw() : indent(lnum) + + elseif s:Match(s:PrevNonBlankNonString(lnum - 1), s:comma_last) + if !s:Match(lnum, s:comma_last) && s:InMultiVarStatement(lnum,1,0) + return indent(lnum) - s:sw() + end end - let switch_offset = 0 - if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'switch' - let num = search('\ 0 + let ind = ind + s:sw() + else + let ols = s:ExitingOneLineScope(lnum) + while ols > 0 && ind > 0 + let ind = ind - s:sw() + let ols = s:InOneLineScope(ols - 1) + endwhile endif - if (line =~ s:operator_first || - \ (getline(lnum) =~ s:continuation_regex && getline(lnum) !~ s:expr_case) || - \ (s:Onescope(lnum) && line !~ s:line_pre . '{')) && - \ (num != lnum && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') - return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset - elseif num > 0 - return indent(num) + s:sw() + switch_offset - end + return ind endfunction +" }}}1 let &cpo = s:cpo_save unlet s:cpo_save From 1c9a3dc4f058642c8c167293dc4d753d9f505a60 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 16 Jul 2016 12:07:02 -0700 Subject: [PATCH 236/929] undo_indent missed this --- indent/javascript.vim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index d2911c5b..d9a194c6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -19,6 +19,8 @@ setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 +let b:undo_indent = 'setlocal smartindent< indentexpr< formatexpr< indentkeys< cinoptions<' + " Only define the function once. if exists("*GetJavascriptIndent") finish From 2efcfa3abd12b9b21f053d3c20eadd6e0755b8c1 Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Sun, 17 Jul 2016 05:49:14 +0400 Subject: [PATCH 237/929] Remove 'smartindent' from indent plugin (#551) When 'indentexpr' is set, setting 'smartindent' has no effect. --- indent/javascript.vim | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d9a194c6..d5375d9e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -11,15 +11,13 @@ if exists("b:did_indent") endif let b:did_indent = 1 -setlocal nosmartindent - " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 -let b:undo_indent = 'setlocal smartindent< indentexpr< formatexpr< indentkeys< cinoptions<' +let b:undo_indent = 'setlocal indentexpr< formatexpr< indentkeys< cinoptions<' " Only define the function once. if exists("*GetJavascriptIndent") From 6f82a0cec6cca718766dd88161aa62a48d35e309 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 17 Jul 2016 00:25:11 -0700 Subject: [PATCH 238/929] Re revert (#554) * Revert "possible indent revert(dev branch) (#550)" This reverts commit b884680566628d85265a174f6339ca36825cb829. * fixed major issue * try ..catch and timeout --- indent/javascript.vim | 422 +++++++----------------------------------- 1 file changed, 66 insertions(+), 356 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d5375d9e..7bd4aef2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,9 +2,6 @@ " Language: Javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org -" 0. Initialization {{{1 -" ================= - " Only load this indent file when no other was loaded. if exists("b:did_indent") finish @@ -14,7 +11,7 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal formatexpr=Fixedgq(v:lnum,v:count) -setlocal indentkeys=0{,0},0),0],0\,*,:,!^F,o,O,e +setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 let b:undo_indent = 'setlocal indentexpr< formatexpr< indentkeys< cinoptions<' @@ -38,66 +35,44 @@ else endfunc endif -" 1. Variables {{{1 -" ============ - let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' -let s:js_keywords = s:line_pre . '\%(break\|import\|export\|catch\|const\|continue\|debugger\|delete\|do\|else\|finally\|for\|function\|if\|in\|instanceof\|let\|new\|return\|switch\|this\|throw\|try\|typeof\|var\|void\|while\|with\)\>\C' let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' -" Regex of syntax group names that are strings. -let s:syng_string = 'regex\c' - " Regex of syntax group names that are strings or documentation. let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" -func s:lookForParens(start,end,flags,stop) +func s:lookForParens(start,end,flags,time) try - return searchpair(a:start,'',a:end,a:flags,s:skip_expr,a:stop,300) + return searchpair(a:start,'',a:end,a:flags, + \ "line('.') < " . (prevnonblank(v:lnum) - 2000) . " ? dummy :" . s:skip_expr + \ ,0,a:time) catch /E118/ - return searchpair(a:start,'',a:end,a:flags,0,a:stop) + return searchpair(a:start,'',a:end,a:flags,0,0) endtry endfunc -let s:line_term = '\s*\%(\%(\/\/.*\)\=\|\%(\/\*.*\*\/\s*\)*\)$' +let s:line_term = '\s*\%(\%(:\@\|=>\)\C' . s:line_term +let s:continuation_regex = '\%([*,.?:]\|+\@\s*(\C', 'ce', a:lnum) > 0 && - \ s:lookForParens('(', ')', 'W', a:lnum) > 0 && - \ col('.') == strlen(s:RemoveTrailingComments(getline(a:lnum))) - call cursor(a:lnum, mypos) - return 1 - else - call cursor(a:lnum, mypos) - return 0 - end + return getline(a:lnum) =~ '\%(\\)\C' . s:line_term || + \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && + \ s:lookForParens('(', ')', 'cbW', 100) > 0 && + \ cursor(line('.'),match( ' ' . strpart(getline(line('.')),0,col('.') - 1), + \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term)) > -1) && + \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) endfunction -" Regex that defines blocks. -let s:block_regex = '[{([]' . s:line_term - let s:operator_first = s:line_pre . '\%([,:?]\|\([-/.+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' -let s:var_stmt = s:line_pre . '\%(const\|let\|var\)\s\+\C' - -let s:comma_last = ',' . s:line_term - -" 2. Auxiliary Functions {{{1 +" Auxiliary Functions {{{2 " ====================== " Check if the character at lnum:col is inside a string, comment, or is ascii. @@ -105,11 +80,6 @@ function s:IsInStringOrComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom endfunction -" Check if the character at lnum:col is inside a string. -function s:IsInString(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string -endfunction - " Check if the character at lnum:col is inside a multi-line comment. function s:IsInComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_comment @@ -119,15 +89,7 @@ endfunction function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 - let line = getline(lnum) - let com = match(line, '\%(\/\*.*\)\@ 0 - let lnum = parlnum - end - elseif line !~ '^' . s:line_term && !s:IsInStringOrComment(lnum,1) + if !s:IsInStringOrComment(lnum, matchend(getline(lnum), '^\s*[^''"]')) break endif let lnum = prevnonblank(lnum - 1) @@ -135,94 +97,6 @@ function s:PrevNonBlankNonString(lnum) return lnum endfunction -" Find line above 'lnum' that started the continuation 'lnum' may be part of. -function s:GetMSL(lnum, in_one_line_scope) - " Start on the line we're at and use its indent. - let msl = a:lnum - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - while lnum > 0 && !s:Match(msl,s:line_pre . '[])}]') - " If we have a continuation line, or we're in a string, use line as MSL. - " Otherwise, terminate search as we have found our MSL already. - let line = getline(lnum) - let line2 = getline(msl) - if ((s:Match(lnum,s:continuation_regex) || s:Match(lnum, s:comma_last)) && - \ !s:Match(lnum, s:expr_case)) || s:IsInString(lnum, strlen(line)) - let msl = lnum - if s:Match(lnum, s:line_pre . '[]})]') && !a:in_one_line_scope - call cursor(lnum,1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - let lnum = parlnum - continue - end - end - - else - - " Don't use lines that are part of a one line scope as msl unless the - " flag in_one_line_scope is set to 1 - " - if a:in_one_line_scope - break - end - let msl_one_line = s:Onescope(lnum) - if msl_one_line == 0 - break - endif - end - let lnum = s:PrevNonBlankNonString(lnum - 1) - endwhile - return msl -endfunction - -function s:RemoveTrailingComments(content) - let single = '\/\/\%(.*\)\s*$' - let multi = '\/\*\%(.*\)\*\/\s*$' - return substitute(substitute(substitute(a:content, single, '', ''), multi, '', ''), '\s\+$', '', '') -endfunction - -" Find if the string is inside var statement (but not the first string) -function s:InMultiVarStatement(lnum, cont, prev) - let lnum = s:PrevNonBlankNonString(a:lnum - 1) - let cont = a:cont - let prev = a:prev - - " let type = synIDattr(synID(lnum, indent(lnum) + 1, 0), 'name') - - " loop through previous expressions to find a var statement - while lnum > 0 && (s:Match(lnum, s:comma_last) ||(cont && getline(lnum) =~ s:line_pre . '[]})]') || - \ s:Match(lnum,s:continuation_regex)) || (prev && (s:Match(prev, s:comma_last) || - \ s:Match(prev,s:continuation_regex))) - " if the line is a js keyword - if cont - let cont = 0 - call cursor(lnum,1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - let lnum = parlnum - end - end - if s:Match(lnum, s:js_keywords) - " check if the line is a var stmt - " if the line has a comma first or comma last then we can assume that we - " are in a multiple var statement - if s:Match(lnum, s:var_stmt) && (s:Match(lnum, s:comma_last)||s:Match(lnum,s:continuation_regex)) - return lnum - endif - - " other js keywords, not a var - if !s:Match(lnum, s:comma_last)||!s:Match(lnum,s:continuation_regex) - return 0 - end - endif - let lnum = s:PrevNonBlankNonString(lnum - 1) - let prev = prev && lnum > 0 ? prev : 0 - endwhile - - " beginning of program, not a var - return 0 -endfunction - " Check if line 'lnum' has more opening brackets than closing ones. function s:LineHasOpeningBrackets(lnum) let open_0 = 0 @@ -243,82 +117,14 @@ function s:LineHasOpeningBrackets(lnum) endwhile return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) endfunction +" }}} -function s:Match(lnum, regex) - let col = match(getline(a:lnum), a:regex) + 1 - return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0 -endfunction - -function s:IndentWithContinuation(lnum, ind, width) - " Set up variables to use and search for MSL to the previous line. - let p_lnum = a:lnum - let lnum = s:GetMSL(a:lnum, 1) - let line = getline(lnum) - - " If the previous line wasn't a MSL and is continuation return its indent. - " TODO: the || s:IsInString() thing worries me a bit. - if p_lnum != lnum - if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line)) - return a:ind - endif - endif - - " Set up more variables now that we know we aren't continuation bound. - let msl_ind = indent(lnum) - - " If the previous line ended with [*+/.-=], start a continuation that - " indents an extra level. - if s:Match(lnum, s:continuation_regex) - if lnum == p_lnum - return msl_ind + a:width - else - return msl_ind - end - elseif s:InMultiVarStatement(p_lnum, 0, s:PrevNonBlankNonString(p_lnum - 1)) - return indent(p_lnum) - s:sw() - endif - - return a:ind -endfunction - -function s:InOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 && s:Onescope(msl) - return msl - endif - return 0 -endfunction - -function s:ExitingOneLineScope(lnum) - let msl = s:GetMSL(a:lnum, 1) - if msl > 0 - " if the current line is in a one line scope .. - if s:Onescope(msl) - return 0 - else - let prev_msl = s:GetMSL(msl - 1, 1) - if s:Onescope(prev_msl) - return prev_msl - endif - endif - endif - return 0 -endfunction - -" 3. GetJavascriptIndent Function {{{1 +" GetJavascriptIndent Function " ========================= - function GetJavascriptIndent() - " 3.1. Setup {{{1 - " ---------- - " Set up variables for restoring position in file. Could use v:lnum here. - " Avoid use of line('.')/col('.') type functions as the curpos can change - let vcol = col('.') - - " 3.2. Work on the current line {{{1 - " ----------------------------- - - let ind = -1 + if !exists('b:js_cache') + let b:js_cache = [0,0] + end " Get the current line. let line = getline(v:lnum) " previous nonblank line number @@ -326,175 +132,79 @@ function GetJavascriptIndent() " previous line of code let lnum = s:PrevNonBlankNonString(v:lnum - 1) - " to not change multiline string values + " start with strings,comments,etc.{{{2 if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'comment') return -1 endif - - " If we are in a multi-line comment, cindent does the right thing. if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif - - " single opening bracket will assume you want a c style of indenting - if line =~ s:line_pre . '{' && !s:Match(lnum,s:block_regex) && - \ !s:Match(lnum,s:comma_last) - return cindent(v:lnum) - endif - - " cindent each line which has a switch label - if (line =~ s:expr_case) - let s:cpo_switch = &cpo - set cpo+=% - let ind = cindent(v:lnum) - let &cpo = s:cpo_switch - return ind - endif - - " If we got a closing bracket on an empty line, find its match and indent - " according to it. - let col = line =~ s:line_pre . '[]})]' - if col > 0 - let parlnum = v:lnum - while col - call cursor(parlnum, 1) - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - let col = s:Match(parlnum, s:line_pre . '[]})]') - if col - continue - end - if parlnum > 0 - let ind = s:InMultiVarStatement(parlnum, 0, 0)|| s:LineHasOpeningBrackets(parlnum) !~ '2' ? - \ indent(parlnum) : indent(s:GetMSL(parlnum, 0)) - endif - endwhile - return ind - endif - - - " If line starts with an operator... - if (line =~ s:operator_first) - if (s:Match(lnum, s:operator_first) || (s:Match(lnum, s:line_pre . '[])}]') && - \ !(s:Match(v:lnum,s:line_pre . '\.') && s:Match(lnum, ')' . s:line_term)))) - " and so does previous line, don't indent - return indent(lnum) - end - let counts = s:LineHasOpeningBrackets(lnum) - if counts =~ '2' - call cursor(lnum, 1) - " Search for the opening tag - let parlnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if parlnum > 0 - return !s:Match(parlnum, s:operator_first) && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' ? - \ indent(lnum) + s:sw() : indent(parlnum) - end - elseif synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsbracket\|jsparen\|jsobject' - " otherwise, if not in an key/val;array item;param, indent 1 level - return indent(lnum) + s:sw() - end - - " If previous line starts with an operator... - elseif (s:Match(lnum, s:operator_first) && !s:Match(lnum,s:continuation_regex)) || - \ getline(lnum) =~ '[]})];\=' . s:line_term - let counts = s:LineHasOpeningBrackets(lnum) - if counts =~ '2' && !s:Match(lnum, s:operator_first) - call cursor(lnum, 1) - " Search for the opening tag - let mnum = s:lookForParens('(\|{\|\[', ')\|}\|\]', 'nbW', 0) - if mnum > 0 && (s:Match(mnum, s:operator_first) || - \ (s:Onescope(s:PrevNonBlankNonString(mnum - 1))) && !s:Match(mnum, s:line_pre . '{')) - return indent(mnum) - s:sw() - end - elseif s:Match(lnum, s:operator_first) - if counts !~ '1' - return indent(lnum) - s:sw() - end - end - end - - " 3.3. Work on the previous line. {{{1 - " ------------------------------- - - " If the line is empty and the previous nonblank line was a multi-line - " comment, use that comment's indent. Deduct one char to account for the - " space in ' */'. if line =~ '^\s*$' && getline(prevline) =~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@= lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && + \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') + let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] + else + call cursor(v:lnum,1) + let syns = synIDattr(synID(v:lnum, 1, 1), 'name') + if line[1] =~ '\s' + if syns != '' + let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : + \ ['(\|{\|\[',')\|}\|\]'] + let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) + else + let num = 0 end - elseif counts =~ '1' || s:Onescope(lnum) - return ind + s:sw() + else + let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) end end + let b:js_cache = [v:lnum, num] - " 3.4. Work on the MSL line. {{{1 - " -------------------------- - if s:Match(lnum, s:comma_last) && !s:Match(lnum, s:continuation_regex) - return s:Match(lnum, s:var_stmt) ? indent(lnum) + s:sw() : indent(lnum) - - elseif s:Match(s:PrevNonBlankNonString(lnum - 1), s:comma_last) - if !s:Match(lnum, s:comma_last) && s:InMultiVarStatement(lnum,1,0) - return indent(lnum) - s:sw() - end + " most significant part + if line =~ s:line_pre . '[])}]' + return indent(num) end - let ind_con = ind - let ind = s:IndentWithContinuation(lnum, ind_con, s:sw()) - - " }}}2 - " - " - let ols = s:InOneLineScope(lnum) - if ols > 0 - let ind = ind + s:sw() - else - let ols = s:ExitingOneLineScope(lnum) - while ols > 0 && ind > 0 - let ind = ind - s:sw() - let ols = s:InOneLineScope(ols - 1) - endwhile + let switch_offset = 0 + if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'switch' + let num = search('\ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + elseif num > 0 + return indent(num) + s:sw() + switch_offset + end - return ind endfunction -" }}}1 let &cpo = s:cpo_save unlet s:cpo_save From c2b7c0550be2d1c6b6d79b23cb54edf4d691bf34 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sun, 17 Jul 2016 17:09:34 -0700 Subject: [PATCH 239/929] JS Flow refactor This commit rehauls a bunch of the JS Flow features. While still not feature complete, a lot of weird edge cases should now not destroy an entire file, like it used too. --- extras/flow.vim | 85 +++++++++++++++++++++++++++++-------------- syntax/javascript.vim | 17 +++++---- 2 files changed, 67 insertions(+), 35 deletions(-) diff --git a/extras/flow.vim b/extras/flow.vim index 759d7548..fc36fdbb 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -1,21 +1,41 @@ -syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject -syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass -syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster containedin=jsBlock,jsClassBlock,jsFuncBlock,jsBlock,jsTryCatchBlock,jsSwitchBlock,jsParen oneline skipwhite skipempty nextgroup=jsFuncBlock -syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\%(.*}\)\@!\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend -syntax region jsFlowTypeObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowTypeKey,jsFlowNoise skipwhite skipempty nextgroup=jsFunctionBlock extend -syntax match jsFlowTypeKey contained /\<[0-9a-zA-Z_$?]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsFlowTypeValue -syntax region jsFlowTypeValue contained matchgroup=jsFlowNoise start=/:/ end=/[,};]\@=/ contains=@jsFlowCluster -syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster -syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster -syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster -syntax keyword jsFlowDeclareKeyword contained declare -syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array bool -syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow +syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen +syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster +syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster +syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster syntax match jsFlowNoise contained /[:;,<>]/ -syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowArrow -syntax keyword jsFlowStorageClass contained const var let -syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue -syntax region jsFlowClass contained matchgroup=jsFlowNoise start=// oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock +syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object array bool class +syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType +syntax match jsFlowTypeCustom contained /\k*/ skipwhite skipempty nextgroup=jsFlowGroup +syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster +syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster +syntax match jsFlowMaybe contained /?/ + +syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster +syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock +syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock +syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock + +syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs +syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock + +syntax region jsFlowTypeStatement start=/type/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend +syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression +syntax match jsFlowTypeOperator contained /=/ +syntax keyword jsFlowTypeKeyword contained type + +syntax keyword jsFlowDeclare declare skipwhite skipempty nextgroup=jsFlowTypeStatement,jsClassDefinition,jsStorageClass,jsFlowModule,jsFlowInterface +syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowDefinition containedin=jsClassBlock + +syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString +syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster +syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise + +syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend + +syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup +syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrow,jsFlowMaybe,jsFlowParens if version >= 508 || !exists("did_javascript_syn_inits") if version < 508 @@ -24,19 +44,30 @@ if version >= 508 || !exists("did_javascript_syn_inits") else command -nargs=+ HiLink hi def link endif - HiLink jsFlow PreProc - HiLink jsFlowReturn PreProc + HiLink jsFlowDefinition PreProc + HiLink jsFlowType Type + HiLink jsFlowTypeCustom PreProc + HiLink jsFlowTypeof PreProc HiLink jsFlowArray PreProc - HiLink jsFlowDeclareBlock PreProc HiLink jsFlowObject PreProc - HiLink jsFlowParenRegion PreProc - HiLink jsFlowClass PreProc - HiLink jsFlowTypeObject PreProc - HiLink jsFlowTypeKey PreProc - HiLink jsFlowTypeValue PreProc + HiLink jsFlowParens PreProc + HiLink jsFlowGroup PreProc + HiLink jsFlowReturn PreProc + HiLink jsFlowReturnObject jsFlowReturn + HiLink jsFlowReturnArray jsFlowArray + HiLink jsFlowReturnParens jsFlowParens + HiLink jsFlowReturnGroup jsFlowGroup + HiLink jsFlowFunctionGroup PreProc + HiLink jsFlowClassGroup PreProc + HiLink jsFlowArrow PreProc + HiLink jsFlowTypeStatement PreProc + HiLink jsFlowTypeKeyword PreProc + HiLink jsFlowTypeOperator PreProc + HiLink jsFlowMaybe PreProc HiLink jsFlowClassProperty jsClassProperty - HiLink jsFlowType Type - HiLink jsFlowDeclareKeyword Type + HiLink jsFlowDeclare PreProc + HiLink jsFlowModule PreProc + HiLink jsFlowInterface PreProc HiLink jsFlowNoise Noise delcommand HiLink endif diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4af11275..e5d819a5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -33,7 +33,8 @@ syntax match jsFuncCall /\k\+\%(\s*(\)\@=/ syntax match jsParensError /[)}\]]/ " Program Keywords -syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray +syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef +syntax match jsVariableDef contained /\k\+/ nextgroup=jsFlowDefinition syntax keyword jsOperator delete instanceof typeof void new in of syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ syntax keyword jsBooleanTrue true @@ -77,7 +78,7 @@ else endif syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod -syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue,jsFlowParenRegion +syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend @@ -142,8 +143,8 @@ syntax region jsParenIfElse contained matchgroup=jsParens s syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold -syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowDefinition skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold +syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold @@ -157,7 +158,7 @@ syntax region jsRestExpression contained matchgroup=jsRestOperator s syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs -syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs +syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend syntax match jsFuncArgCommas contained ',' syntax keyword jsArguments contained arguments @@ -173,7 +174,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClass +syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue @@ -203,8 +204,8 @@ syntax region jsEnvComment start=/\%^#!/ end=/$/ display " can't make jsComment a skippable type of group for nextgroup syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend -syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass extend keepend -syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClass fold extend keepend +syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend +syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend From 023f02c8dfcfca5de93289a748fbb1f8c765b609 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 17 Jul 2016 19:46:53 -0700 Subject: [PATCH 240/929] 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 0c24d937..434a9353 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -203,7 +203,7 @@ function GetJavascriptIndent() \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 - return indent(num) + s:sw() + switch_offset + return indent(num) + s:sw() + (num == lnum ? 0 : switch_offset) end endfunction From e6a4f2f2d9b4f16e5f1426aa8d996ac1be8e0558 Mon Sep 17 00:00:00 2001 From: Dmitri Vereshchagin Date: Tue, 19 Jul 2016 22:12:42 +0400 Subject: [PATCH 241/929] Update ftplugin (#553) * Revert setting 'regexpengine' from filetype plugin Setting 'regexpengine' from filetype plugin without reenabling syntax doesn't fix problems described in #88 and #93. Seems like those problems are reproducible only in versions 7.4 and 7.4.1. Those few unfortunates who encounter it today will be able to find workaround by reading project issues. * Move filetype plugin to after directory - Add dollar sign to 'iskeyword' - Make use of b:undo_ftplugin variable --- {ftplugin => after/ftplugin}/javascript.vim | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) rename {ftplugin => after/ftplugin}/javascript.vim (53%) diff --git a/ftplugin/javascript.vim b/after/ftplugin/javascript.vim similarity index 53% rename from ftplugin/javascript.vim rename to after/ftplugin/javascript.vim index e11ea2e0..e2d471dd 100644 --- a/ftplugin/javascript.vim +++ b/after/ftplugin/javascript.vim @@ -3,8 +3,6 @@ " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -setlocal suffixesadd+=.js +setlocal iskeyword+=$ suffixesadd+=.js -if v:version == 703 && exists('®expengine') || v:version == 704 && !has('patch2') - set regexpengine=1 -endif +let b:undo_ftplugin .= ' | setlocal iskeyword< suffixesadd<' From 35ac627aa6884db976979f6b2ba8a527a3f1d0ab Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 19 Jul 2016 15:57:15 -0700 Subject: [PATCH 242/929] 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 434a9353..f5b11b37 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -191,7 +191,7 @@ function GetJavascriptIndent() let switch_offset = 0 if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 let bnum = search('\ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 - return indent(num) + s:sw() + (num == lnum ? 0 : switch_offset) + return indent(num) + s:sw() + switch_offset end endfunction From 995007aea69e646016f621aafb4a2f548e27101a Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 19 Jul 2016 19:18:08 -0700 Subject: [PATCH 243/929] Switch (#555) * switch offset always calculated when inside switch --- indent/javascript.vim | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7bd4aef2..e89a692d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -187,10 +187,11 @@ function GetJavascriptIndent() return indent(num) end let switch_offset = 0 - if synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'switch' - let num = search('\ -1 + let bnum = search('\ Date: Tue, 19 Jul 2016 19:24:47 -0700 Subject: [PATCH 244/929] 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 f5b11b37..8433edb3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -192,7 +192,7 @@ function GetJavascriptIndent() if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 let bnum = search('\ Date: Wed, 20 Jul 2016 10:03:44 +0300 Subject: [PATCH 245/929] Remove unused g:javascript_conceal variable --- syntax/javascript.vim | 4 ---- 1 file changed, 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index e5d819a5..116285cc 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -12,10 +12,6 @@ if !exists("main_syntax") let main_syntax = 'javascript' endif -if !exists('g:javascript_conceal') - let g:javascript_conceal = 0 -endif - " Dollar sign is permitted anywhere in an identifier if v:version > 704 || v:version == 704 && has('patch1142') syntax iskeyword @,48-57,_,192-255,$ From c1d8d3766789024931f4353889bcac6e8fbed064 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Mon, 18 Jul 2016 14:18:53 -0700 Subject: [PATCH 246/929] Add jsFlowReturnMaybe --- extras/flow.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index fc36fdbb..288c2568 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -15,6 +15,7 @@ syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock +syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs @@ -34,7 +35,7 @@ syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ e syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend -syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup +syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrow,jsFlowMaybe,jsFlowParens if version >= 508 || !exists("did_javascript_syn_inits") @@ -64,6 +65,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowTypeKeyword PreProc HiLink jsFlowTypeOperator PreProc HiLink jsFlowMaybe PreProc + HiLink jsFlowReturnMaybe PreProc HiLink jsFlowClassProperty jsClassProperty HiLink jsFlowDeclare PreProc HiLink jsFlowModule PreProc From 215e9572b8324c713f09626b51f4a7fdc0b69232 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 20 Jul 2016 00:45:12 -0700 Subject: [PATCH 247/929] Fix jsFlowClassDefinitions --- extras/flow.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 288c2568..3a30874d 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -27,7 +27,8 @@ syntax match jsFlowTypeOperator contained /=/ syntax keyword jsFlowTypeKeyword contained type syntax keyword jsFlowDeclare declare skipwhite skipempty nextgroup=jsFlowTypeStatement,jsClassDefinition,jsStorageClass,jsFlowModule,jsFlowInterface -syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowDefinition containedin=jsClassBlock +syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowClassDef containedin=jsClassBlock +syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen skipwhite skipempty nextgroup=jsClassValue syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster @@ -46,6 +47,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") command -nargs=+ HiLink hi def link endif HiLink jsFlowDefinition PreProc + HiLink jsFlowClassDef jsFlowDefinition HiLink jsFlowType Type HiLink jsFlowTypeCustom PreProc HiLink jsFlowTypeof PreProc From 125337c11897f162c749128bdd804040c76943a0 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 20 Jul 2016 13:02:20 -0700 Subject: [PATCH 248/929] More flow improvements * Fixed a couple funky maybe cases * Improved argument definitions * Misc tweaks --- extras/flow.vim | 16 ++++++++++------ syntax/javascript.vim | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/extras/flow.vim b/extras/flow.vim index 3a30874d..dce98244 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -1,14 +1,16 @@ syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen +syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\)\@=/ contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster -syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster +syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster syntax match jsFlowNoise contained /[:;,<>]/ syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object array bool class syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType syntax match jsFlowTypeCustom contained /\k*/ skipwhite skipempty nextgroup=jsFlowGroup syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster -syntax region jsFlowArrow contained matchgroup=jsFlowNoise start=/(/ end=/)\s*=>/ oneline contains=@jsFlowCluster -syntax match jsFlowMaybe contained /?/ +syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster +syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens +syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock @@ -22,13 +24,13 @@ syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock syntax region jsFlowTypeStatement start=/type/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend -syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression +syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe syntax match jsFlowTypeOperator contained /=/ syntax keyword jsFlowTypeKeyword contained type syntax keyword jsFlowDeclare declare skipwhite skipempty nextgroup=jsFlowTypeStatement,jsClassDefinition,jsStorageClass,jsFlowModule,jsFlowInterface syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowClassDef containedin=jsClassBlock -syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen skipwhite skipempty nextgroup=jsClassValue +syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassValue syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster @@ -37,7 +39,7 @@ syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ e syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe -syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrow,jsFlowMaybe,jsFlowParens +syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens if version >= 508 || !exists("did_javascript_syn_inits") if version < 508 @@ -48,6 +50,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") endif HiLink jsFlowDefinition PreProc HiLink jsFlowClassDef jsFlowDefinition + HiLink jsFlowArgumentDef jsFlowDefinition HiLink jsFlowType Type HiLink jsFlowTypeCustom PreProc HiLink jsFlowTypeof PreProc @@ -62,6 +65,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowReturnGroup jsFlowGroup HiLink jsFlowFunctionGroup PreProc HiLink jsFlowClassGroup PreProc + HiLink jsFlowArrowArguments PreProc HiLink jsFlowArrow PreProc HiLink jsFlowTypeStatement PreProc HiLink jsFlowTypeKeyword PreProc diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 116285cc..8cf3e627 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -139,7 +139,7 @@ syntax region jsParenIfElse contained matchgroup=jsParens s syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowDefinition skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold From 178566475fdff317840365beb9271f66030f7bcd Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 20 Jul 2016 14:06:21 -0700 Subject: [PATCH 249/929] Fixed another maybe case --- extras/flow.vim | 2 ++ 1 file changed, 2 insertions(+) diff --git a/extras/flow.vim b/extras/flow.vim index dce98244..505ab26a 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -11,6 +11,7 @@ syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments +syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock @@ -77,5 +78,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowModule PreProc HiLink jsFlowInterface PreProc HiLink jsFlowNoise Noise + HiLink jsFlowObjectKey jsObjectKey delcommand HiLink endif From c68ecbe99aa5f20a76f31fcb09b85cdf2d64015c Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 20 Jul 2016 19:50:46 -0700 Subject: [PATCH 250/929] removing custom formatting (#565) also adds `nolisp` setting --- indent/javascript.vim | 63 +------------------------------------------ 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c372262c..e0dac792 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -10,7 +10,7 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() -setlocal formatexpr=Fixedgq(v:lnum,v:count) +setlocal nolisp setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1,c1 @@ -209,66 +209,5 @@ endfunction let &cpo = s:cpo_save unlet s:cpo_save -" gq{{{2 -function! Fixedgq(lnum, count) - let l:tw = &tw ? &tw : 80; - let l:count = a:count - let l:first_char = indent(a:lnum) + 1 - - if mode() == 'i' " gq was not pressed, but tw was set - return 1 - endif - - " This gq is only meant to do code with strings, not comments - if s:IsInComment(a:lnum, l:first_char) - return 1 - endif - - if len(getline(a:lnum)) < l:tw && l:count == 1 " No need for gq - return 1 - endif - - " Put all the lines on one line and do normal spliting after that - if l:count > 1 - while l:count > 1 - let l:count -= 1 - normal J - endwhile - endif - - let l:winview = winsaveview() - - call cursor(a:lnum, l:tw + 1) - let orig_breakpoint = searchpairpos(' ', '', '\.', 'bcW', '', a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos(' ', '', '\.', 'bcW', s:skip_expr, a:lnum) - - " No need for special treatment, normal gq handles edgecases better - if breakpoint[1] == orig_breakpoint[1] - call winrestview(l:winview) - return 1 - endif - - " Try breaking after string - if breakpoint[1] <= indent(a:lnum) - call cursor(a:lnum, l:tw + 1) - let breakpoint = searchpairpos('\.', '', ' ', 'cW', s:skip_expr, a:lnum) - endif - - - if breakpoint[1] != 0 - call feedkeys("r\") - else - let l:count = l:count - 1 - endif - - " run gq on new lines - if l:count == 1 - call feedkeys("gqq") - endif - - return 0 -endfunction -"}}} " vim: foldmethod=marker:foldlevel=1 From 005928682d137c049d2a9829f4be12d8b4ceb9d5 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 20 Jul 2016 20:13:32 -0700 Subject: [PATCH 251/929] operators & continuation (#566) * operators & continuation --- indent/javascript.vim | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e0dac792..ec278b50 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -58,8 +58,16 @@ endfunc let s:line_term = '\s*\%(\%(:\@\)\C' . s:line_term || @@ -70,8 +78,6 @@ function s:Onescope(lnum) \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) endfunction -let s:operator_first = s:line_pre . '\%([,:?]\|\([-/.+*]\)\%(\1\|\*\|\/\)\@!\|||\|&&\)' - " Auxiliary Functions {{{2 " ====================== @@ -194,8 +200,8 @@ function GetJavascriptIndent() let num = max([num,bnum]) let b:js_cache[1] = num endif - if (line =~ s:operator_first || - \ (getline(lnum) =~ s:continuation_regex && getline(lnum) !~ s:expr_case) || + if (line =~ g:javascript_opfirst || + \ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case) || \ (s:Onescope(lnum) && line !~ s:line_pre . '{')) && \ (num != lnum && \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') From 31d8b39f2640e5cbb1114455e2ee76cfab3921c7 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 20 Jul 2016 23:55:30 -0700 Subject: [PATCH 252/929] switch enhanced (#568) this is more accurate and allows for nested switches --- indent/javascript.vim | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec278b50..f5242906 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -161,7 +161,6 @@ function GetJavascriptIndent() set cpo+=% let ind = cindent(v:lnum) let &cpo = s:cpo_switch - let b:js_cache = [v:lnum, search('\ -1 let bnum = search('\ Date: Thu, 21 Jul 2016 00:12:06 -0700 Subject: [PATCH 253/929] remove whitespace and regex mistake --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f5242906..0323b81d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -47,7 +47,7 @@ let s:syng_comment = '\%(comment\|doc\)\c' let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" func s:lookForParens(start,end,flags,time) - try + try return searchpair(a:start,'',a:end,a:flags, \ "line('.') < " . (prevnonblank(v:lnum) - 2000) . " ? dummy :" . s:skip_expr \ ,0,a:time) @@ -74,7 +74,7 @@ function s:Onescope(lnum) \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ cursor(line('.'),match( ' ' . strpart(getline(line('.')),0,col('.') - 1), - \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term)) > -1) && + \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term)) > -1) && \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) endfunction @@ -195,7 +195,7 @@ function GetJavascriptIndent() if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 let bnum = search('\ Date: Thu, 21 Jul 2016 01:02:56 -0700 Subject: [PATCH 254/929] negative and decimal switch label values (#569) allows for every possible option including: `set cino+=:-0.5s` `set cino+=:-.5s` --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0323b81d..f9fe9ea9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -195,7 +195,7 @@ function GetJavascriptIndent() if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 let bnum = search('\ Date: Thu, 21 Jul 2016 09:37:32 -0700 Subject: [PATCH 255/929] cleaning making a very bright sheen --- indent/javascript.vim | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f9fe9ea9..9b944556 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -12,7 +12,7 @@ let b:did_indent = 1 setlocal indentexpr=GetJavascriptIndent() setlocal nolisp setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e -setlocal cinoptions+=j1,J1,c1 +setlocal cinoptions+=j1,J1 let b:undo_indent = 'setlocal indentexpr< formatexpr< indentkeys< cinoptions<' @@ -146,21 +146,14 @@ function GetJavascriptIndent() if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif - if line =~ '^\s*$' && getline(prevline) =~ '\%(\%(^\s*\/\/\|\/\*\).*\)\@ -1 let bnum = search('\ Date: Thu, 21 Jul 2016 09:44:10 -0700 Subject: [PATCH 256/929] more cleaning --- indent/javascript.vim | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9b944556..73d3b1a8 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -14,7 +14,7 @@ setlocal nolisp setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1 -let b:undo_indent = 'setlocal indentexpr< formatexpr< indentkeys< cinoptions<' +let b:undo_indent = 'setlocal indentexpr< indentkeys< cinoptions<' " Only define the function once. if exists("*GetJavascriptIndent") @@ -137,6 +137,9 @@ function GetJavascriptIndent() let prevline = prevnonblank(v:lnum - 1) " previous line of code let lnum = s:PrevNonBlankNonString(v:lnum - 1) + if lnum == 0 + return 0 + endif " start with strings,comments,etc.{{{2 if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || @@ -146,9 +149,7 @@ function GetJavascriptIndent() if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) return cindent(v:lnum) endif - if lnum == 0 - return 0 - endif + if (line =~ s:expr_case) let cpo_switch = &cpo set cpo+=% From 0c3a3509ebcdf4710c09cfb2fd2a4a9867c93794 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 21 Jul 2016 20:10:38 -0700 Subject: [PATCH 257/929] add jsfunccall to not indent args --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 73d3b1a8..6cbee1fd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -195,7 +195,7 @@ function GetJavascriptIndent() \ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case) || \ (s:Onescope(lnum) && line !~ s:line_pre . '{')) && \ (num != lnum && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') + \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsfunccall\|jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From 96885ca809e9d579435e86d4a5d00a22b23f5a61 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 21 Jul 2016 21:35:25 -0700 Subject: [PATCH 258/929] small perf gain --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6cbee1fd..8ed3f135 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -166,17 +166,17 @@ function GetJavascriptIndent() let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] else call cursor(v:lnum,1) - let syns = synIDattr(synID(v:lnum, 1, 1), 'name') - if line[1] =~ '\s' + if line[0] =~ '\s' + let syns = synIDattr(synID(v:lnum, 1, 1), 'name') if syns != '' let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : \ ['(\|{\|\[',')\|}\|\]'] let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) else - let num = 0 + let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) end else - let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) + let num = 0 end end let b:js_cache = [v:lnum, num] From 6c440b3ecb13abed60a6f0083764673e80a01b8f Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 21 Jul 2016 21:41:10 -0700 Subject: [PATCH 259/929] perf continued --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8ed3f135..7ac67b24 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -173,7 +173,7 @@ function GetJavascriptIndent() \ ['(\|{\|\[',')\|}\|\]'] let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) else - let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) + let num = 0 end else let num = 0 From b4038a26c937524d00c75f3bbe75b46acad5e2df Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 21 Jul 2016 22:24:06 -0700 Subject: [PATCH 260/929] addresses unindented code --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7ac67b24..7dc16964 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -176,7 +176,7 @@ function GetJavascriptIndent() let num = 0 end else - let num = 0 + let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) end end let b:js_cache = [v:lnum, num] From 9a6c48548eb0ce54399b69959dd27ad2fd46a41b Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 21 Jul 2016 22:29:22 -0700 Subject: [PATCH 261/929] minor refactor --- indent/javascript.vim | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7dc16964..65cd6132 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -166,17 +166,15 @@ function GetJavascriptIndent() let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] else call cursor(v:lnum,1) - if line[0] =~ '\s' - let syns = synIDattr(synID(v:lnum, 1, 1), 'name') - if syns != '' - let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : - \ ['(\|{\|\[',')\|}\|\]'] - let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) - else - let num = 0 - end - else + let syns = synIDattr(synID(v:lnum, 1, 1), 'name') + if line[0] =~ '\s' && syns != '' + let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : + \ ['(\|{\|\[',')\|}\|\]'] + let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) + elseif syns != '' let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) + else + let num = 0 end end let b:js_cache = [v:lnum, num] From e895bd1629bca407721043756f5b110fa50442cb Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 22 Jul 2016 00:18:53 -0700 Subject: [PATCH 262/929] fix syn-indent issue --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 65cd6132..4cb129ff 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -193,7 +193,7 @@ function GetJavascriptIndent() \ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case) || \ (s:Onescope(lnum) && line !~ s:line_pre . '{')) && \ (num != lnum && - \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsfunccall\|jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') + \ synIDattr(synID(v:lnum, 1, 1), 'name') !~? 'jsdestructuringblock\|args\|jsbracket\|jsparen\|jsobject') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From ab5d96bbb7c0cb4cb03a65c49264527f12a34a3d Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 23 Jul 2016 22:24:17 -0700 Subject: [PATCH 263/929] possible reuse of logic (simple lexing) (#570) reusing of logic --- indent/javascript.vim | 57 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4cb129ff..4863cb1f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -44,7 +44,7 @@ let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "synIDattr(synID(line('.'),col('.'),1),'name') =~ '".s:syng_strcom."'" +let s:skip_expr = "s:IsInStringOrComment(line('.'),col('.'))" func s:lookForParens(start,end,flags,time) try @@ -69,13 +69,14 @@ if !exists('g:javascript_continuation') endif let g:javascript_continuation .= s:line_term -function s:Onescope(lnum) - return getline(a:lnum) =~ '\%(\\)\C' . s:line_term || - \ (cursor(a:lnum, match(getline(a:lnum),')' . s:line_term)) > -1 && +function s:Onescope(lnum,text,add) + return a:text =~ '\%(\' . (a:add ? '\|try\|finally' : '' ) . '\)\C' . s:line_term || + \ (cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ cursor(line('.'),match( ' ' . strpart(getline(line('.')),0,col('.') - 1), - \ '\<\%(else\|for\%(\s+each\)\=\|if\|let\|while\|with\)\C' . s:line_term)) > -1) && - \ (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bw',100) : 1) + \ (a:add ? '\K\k*' : + \ '\<\%(else\|for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . s:line_term)) > -1) && + \ (a:add || (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction " Auxiliary Functions {{{2 @@ -86,11 +87,6 @@ function s:IsInStringOrComment(lnum, col) return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom endfunction -" Check if the character at lnum:col is inside a multi-line comment. -function s:IsInComment(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_comment -endfunction - " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) @@ -110,18 +106,21 @@ function s:LineHasOpeningBrackets(lnum) let open_4 = 0 let line = getline(a:lnum) let pos = match(line, '[][(){}]', 0) + let last = 0 while pos != -1 if !s:IsInStringOrComment(a:lnum, pos + 1) let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 + let last = pos else let open_{idx - 1} = open_{idx - 1} - 1 endif endif let pos = match(line, '[][(){}]', pos + 1) endwhile - return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) + return [(open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . + \ (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)), last] endfunction " }}} @@ -129,7 +128,7 @@ endfunction " ========================= function GetJavascriptIndent() if !exists('b:js_cache') - let b:js_cache = [0,0] + let b:js_cache = [0,0,0] end " Get the current line. let line = getline(v:lnum) @@ -143,10 +142,10 @@ function GetJavascriptIndent() " start with strings,comments,etc.{{{2 if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || - \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'comment') + \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? s:syng_comment) return -1 endif - if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsInComment(v:lnum, 1) + if line !~ '^\%(\/\*\|\s*\/\/\)' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? s:syng_comment) return cindent(v:lnum) endif @@ -161,23 +160,24 @@ function GetJavascriptIndent() " the containing paren, bracket, curly let pcounts = [0] - if b:js_cache[0] >= lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') - let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] + if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && + \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0][0] !~ '2') + let num = pcounts[0][0] =~ '1' ? lnum : b:js_cache[1] + if pcounts[0][0] =~'1' + call cursor(lnum,pcounts[0][1]) + end else call cursor(v:lnum,1) let syns = synIDattr(synID(v:lnum, 1, 1), 'name') if line[0] =~ '\s' && syns != '' let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : \ ['(\|{\|\[',')\|}\|\]'] - let num = s:lookForParens(pattern[0],pattern[1],'nbw',2000) - elseif syns != '' - let num = s:lookForParens('(\|{\|\[',')\|}\|\]','nbW',2000) + let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) else - let num = 0 + let num = s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) end end - let b:js_cache = [v:lnum, num] + let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] " most significant part if line =~ s:line_pre . '[])}]' @@ -185,15 +185,14 @@ function GetJavascriptIndent() end let switch_offset = 0 if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 - let bnum = search('\ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From bf7d4b663c743e1a5852080823e9b61f74cab249 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Jul 2016 10:34:39 -0700 Subject: [PATCH 264/929] remove switch syn check (#571) * remove switch syn check https://github.com/pangloss/vim-javascript/issues/177#issuecomment-234758932 --- indent/javascript.vim | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4863cb1f..e366cece 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -76,7 +76,7 @@ function s:Onescope(lnum,text,add) \ cursor(line('.'),match( ' ' . strpart(getline(line('.')),0,col('.') - 1), \ (a:add ? '\K\k*' : \ '\<\%(else\|for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . s:line_term)) > -1) && - \ (a:add || (expand("") =~ 'while\C' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) + \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction " Auxiliary Functions {{{2 @@ -183,16 +183,12 @@ function GetJavascriptIndent() if line =~ s:line_pre . '[])}]' return indent(num) end - let switch_offset = 0 - if index(map(synstack(v:lnum, 1), 'synIDattr( v:val, "name")'),'jsSwitchBlock') > -1 - let bnum = search('\") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) if ((line =~ g:javascript_opfirst || \ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case)) && - \ (num == 0 || s:Onescope(num, strpart(getline(num),0,b:js_cache[2] - 1),1))) || - \ (s:Onescope(lnum,getline(lnum),0) && line !~ s:line_pre . '{') + \ inb) || (s:Onescope(lnum,getline(lnum),0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From ad8d72ad4c0d1dad9c2012b2eead9ed7d5ec07c2 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Jul 2016 11:00:35 -0700 Subject: [PATCH 265/929] cleaning indent --- indent/javascript.vim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e366cece..611ed1ea 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -44,7 +44,7 @@ let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "s:IsInStringOrComment(line('.'),col('.'))" +let s:skip_expr = "s:IsSyn(line('.'),col('.'),0)" func s:lookForParens(start,end,flags,time) try @@ -83,15 +83,15 @@ endfunction " ====================== " Check if the character at lnum:col is inside a string, comment, or is ascii. -function s:IsInStringOrComment(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom +function s:IsSyn(lnum, col, reg) + return synIDattr(synID(a:lnum, a:col, 1), 'name') =~? (a:reg ? a:reg : s:syng_strcom) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 - if !s:IsInStringOrComment(lnum, matchend(getline(lnum), '^\s*[^''"]')) + if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),0) break endif let lnum = prevnonblank(lnum - 1) @@ -108,7 +108,7 @@ function s:LineHasOpeningBrackets(lnum) let pos = match(line, '[][(){}]', 0) let last = 0 while pos != -1 - if !s:IsInStringOrComment(a:lnum, pos + 1) + if !s:IsSyn(a:lnum, pos + 1, 0) let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 @@ -141,8 +141,8 @@ function GetJavascriptIndent() endif " start with strings,comments,etc.{{{2 - if (line !~ '^[''"`]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? 'string\|template') || - \ (line !~ '^\s*[/*]' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? s:syng_comment) + if (line !~ '^[''"`]' && s:IsSyn(v:lnum,1,'string\|template')) || + \ (line !~ '^\s*[/*]' && s:IsSyn(v:lnum,1,s:syng_comment)) return -1 endif if line !~ '^\%(\/\*\|\s*\/\/\)' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? s:syng_comment) From f90b8c85e0a510c3e35fd3b10c53127e61bffb26 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Jul 2016 11:06:15 -0700 Subject: [PATCH 266/929] more cleaning --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 611ed1ea..b46573ee 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -145,7 +145,7 @@ function GetJavascriptIndent() \ (line !~ '^\s*[/*]' && s:IsSyn(v:lnum,1,s:syng_comment)) return -1 endif - if line !~ '^\%(\/\*\|\s*\/\/\)' && synIDattr(synID(v:lnum, 1, 1), 'name') =~? s:syng_comment) + if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsSyn(v:lnum,1,s:syng_comment) return cindent(v:lnum) endif From 57470573a9fe7caf60c95d1582fafb412ba6d333 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Jul 2016 17:02:29 -0700 Subject: [PATCH 267/929] remove obvious comment the folding is enough for separating content --- indent/javascript.vim | 2 -- 1 file changed, 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b46573ee..09a0674c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -124,8 +124,6 @@ function s:LineHasOpeningBrackets(lnum) endfunction " }}} -" GetJavascriptIndent Function -" ========================= function GetJavascriptIndent() if !exists('b:js_cache') let b:js_cache = [0,0,0] From 506783bc16a9ffed9a1fb1360891ced486b697be Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 24 Jul 2016 22:20:24 -0700 Subject: [PATCH 268/929] move lines from search pair function --- indent/javascript.vim | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 09a0674c..806da210 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -44,13 +44,11 @@ let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "s:IsSyn(line('.'),col('.'),0)" +let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),0)" func s:lookForParens(start,end,flags,time) try - return searchpair(a:start,'',a:end,a:flags, - \ "line('.') < " . (prevnonblank(v:lnum) - 2000) . " ? dummy :" . s:skip_expr - \ ,0,a:time) + return searchpair(a:start,'',a:end,a:flags,s:skip_expr,0,a:time) catch /E118/ return searchpair(a:start,'',a:end,a:flags,0,0) endtry From acb4f00324c84c175d93804b39efad76ee66442a Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 25 Jul 2016 01:50:02 -0700 Subject: [PATCH 269/929] fix syn function vimscript is strange --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 806da210..8a1e4b63 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -44,7 +44,7 @@ let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). -let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),0)" +let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),'')" func s:lookForParens(start,end,flags,time) try @@ -82,14 +82,14 @@ endfunction " Check if the character at lnum:col is inside a string, comment, or is ascii. function s:IsSyn(lnum, col, reg) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~? (a:reg ? a:reg : s:syng_strcom) + return synIDattr(synID(a:lnum, a:col, 1), 'name') =~? (a:reg != '' ? a:reg : s:syng_strcom) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevNonBlankNonString(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 - if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),0) + if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),'') break endif let lnum = prevnonblank(lnum - 1) @@ -106,7 +106,7 @@ function s:LineHasOpeningBrackets(lnum) let pos = match(line, '[][(){}]', 0) let last = 0 while pos != -1 - if !s:IsSyn(a:lnum, pos + 1, 0) + if !s:IsSyn(a:lnum, pos + 1, '') let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 From 2905f34d829f62478fe7755a6cf49d593645a15f Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 25 Jul 2016 10:26:51 -0700 Subject: [PATCH 270/929] removing mode-line the file is no longer long enough to require automatic folding! --- indent/javascript.vim | 2 -- 1 file changed, 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8a1e4b63..568b7570 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -195,5 +195,3 @@ endfunction let &cpo = s:cpo_save unlet s:cpo_save - -" vim: foldmethod=marker:foldlevel=1 From cbcfaaf09f1ce37170b20507ba5f95ebc13d9c5e Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 26 Jul 2016 13:25:47 -0700 Subject: [PATCH 271/929] adding more operators (#573) * adding more operators I think adding `<>` could mess with xml type things so i've not included them --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 568b7570..441f1b97 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -58,12 +58,12 @@ let s:line_term = '\s*\%(\%(:\@\@!\||\|&\|in\%(stanceof\)\=\>\)\C' endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([*,.?:]\|+\@ Date: Wed, 27 Jul 2016 11:28:46 -0700 Subject: [PATCH 272/929] Flow tweaks * Improved OR operator * Various fixes for arguments --- extras/flow.vim | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/extras/flow.vim b/extras/flow.vim index 505ab26a..a1848830 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -1,5 +1,5 @@ syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen -syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\)\@=/ contains=@jsFlowCluster +syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster @@ -12,14 +12,16 @@ syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject +syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster -syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock -syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock -syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock -syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock +syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp +syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp +syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp +syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword -syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock +syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp +syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock @@ -39,8 +41,8 @@ syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ e syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend -syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe -syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens +syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp +syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator if version >= 508 || !exists("did_javascript_syn_inits") if version < 508 @@ -79,5 +81,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFlowInterface PreProc HiLink jsFlowNoise Noise HiLink jsFlowObjectKey jsObjectKey + HiLink jsFlowOrOperator PreProc + HiLink jsFlowReturnOrOp jsFlowOrOperator delcommand HiLink endif From 13610e67c47529e3745c76e4b963cc97fdec9486 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 27 Jul 2016 11:35:24 -0700 Subject: [PATCH 273/929] Updating indent top comments --- indent/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 441f1b97..18ad9630 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -1,5 +1,7 @@ " Vim indent file " Language: Javascript +" Maintainer: vim-javascript community +" URL: https://github.com/pangloss/vim-javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org " Only load this indent file when no other was loaded. @@ -179,7 +181,7 @@ function GetJavascriptIndent() if line =~ s:line_pre . '[])}]' return indent(num) end - let inb = num == 0 ? 1 : s:Onescope(num, strpart(getline(num),0,b:js_cache[2] - 1),1) + let inb = num == 0 ? 1 : s:Onescope(num, strpart(getline(num),0,b:js_cache[2] - 1),1) let switch_offset = (!inb || num == 0) || expand("") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) if ((line =~ g:javascript_opfirst || From 33833cc48f67540632a2654cab36efc205cf76ac Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 27 Jul 2016 19:06:40 -0700 Subject: [PATCH 274/929] allow for line breaks before blocks (#575) ``` if () a=b ``` --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 18ad9630..1b3706b6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,9 +73,9 @@ function s:Onescope(lnum,text,add) return a:text =~ '\%(\' . (a:add ? '\|try\|finally' : '' ) . '\)\C' . s:line_term || \ (cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && - \ cursor(line('.'),match( ' ' . strpart(getline(line('.')),0,col('.') - 1), - \ (a:add ? '\K\k*' : - \ '\<\%(else\|for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . s:line_term)) > -1) && + \ search((a:add ? '\K\k*' : + \ '\<\%(else\|for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . + \ '\_s*\%#','bW')) && \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From 9e2c10e32e8fada2019a27f34ce494f1b36d3862 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 27 Jul 2016 20:11:43 -0700 Subject: [PATCH 275/929] remove else not supposed to be there --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1b3706b6..78e96026 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ function s:Onescope(lnum,text,add) \ (cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ search((a:add ? '\K\k*' : - \ '\<\%(else\|for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . + \ '\<\%(for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . \ '\_s*\%#','bW')) && \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From 1d32e38b0a875263a9fb4cbe60787df48f2b6b12 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 27 Jul 2016 21:34:07 -0700 Subject: [PATCH 276/929] regex for word boundary --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 78e96026..eab6dbd5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -70,7 +70,7 @@ endif let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) - return a:text =~ '\%(\' . (a:add ? '\|try\|finally' : '' ) . '\)\C' . s:line_term || + return a:text =~ '\%(\' . (a:add ? '\|\ -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ search((a:add ? '\K\k*' : From 6d70fab417009adb22062962c853fb8648d044b0 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 28 Jul 2016 00:24:25 -0700 Subject: [PATCH 277/929] fix c-style continuation (#576) * fix c-style continuation --- indent/javascript.vim | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index eab6dbd5..6844dc2f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,16 +71,15 @@ let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) return a:text =~ '\%(\' . (a:add ? '\|\ -1 && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && - \ search((a:add ? '\K\k*' : - \ '\<\%(for\%(\s+each\)\=\|function\*\=\%(\s\+\K\k*\)\=\|if\|let\|switch\|while\|with\)\C') . - \ '\_s*\%#','bW')) && + \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' : + \ '\<\%(for\%(\s+each\)\=\|if\|let\|switch\|while\|with\)\C') . '\_s*\%#','bW')) && \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction " Auxiliary Functions {{{2 -" ====================== " Check if the character at lnum:col is inside a string, comment, or is ascii. function s:IsSyn(lnum, col, reg) @@ -88,7 +87,7 @@ function s:IsSyn(lnum, col, reg) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. -function s:PrevNonBlankNonString(lnum) +function s:PrevCodeLine(lnum) let lnum = prevnonblank(a:lnum) while lnum > 0 if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),'') @@ -133,7 +132,7 @@ function GetJavascriptIndent() " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) " previous line of code - let lnum = s:PrevNonBlankNonString(v:lnum - 1) + let lnum = s:PrevCodeLine(v:lnum - 1) if lnum == 0 return 0 endif From 924a6456ccff5783d9f8811bf901882282bd0c6e Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 29 Jul 2016 00:00:51 -0700 Subject: [PATCH 278/929] misc fixes (#578) make sure to calculate switch_offset even when using 'c-style' and fix block comments at the very top of a file --- indent/javascript.vim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6844dc2f..dde72676 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,11 +71,11 @@ let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) return a:text =~ '\%(\' . (a:add ? '\|\ -1 && + \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || + \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' : - \ '\<\%(for\%(\s+each\)\=\|if\|let\|switch\|while\|with\)\C') . '\_s*\%#','bW')) && + \ '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)\C') . '\_s*\%#','bW') && \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction @@ -132,10 +132,6 @@ function GetJavascriptIndent() " previous nonblank line number let prevline = prevnonblank(v:lnum - 1) " previous line of code - let lnum = s:PrevCodeLine(v:lnum - 1) - if lnum == 0 - return 0 - endif " start with strings,comments,etc.{{{2 if (line !~ '^[''"`]' && s:IsSyn(v:lnum,1,'string\|template')) || @@ -145,6 +141,10 @@ function GetJavascriptIndent() if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsSyn(v:lnum,1,s:syng_comment) return cindent(v:lnum) endif + let lnum = s:PrevCodeLine(v:lnum - 1) + if lnum == 0 + return 0 + endif if (line =~ s:expr_case) let cpo_switch = &cpo From ee3183e7f2773a82c17cd1f819cc2da9374b2206 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 29 Jul 2016 21:12:49 -0700 Subject: [PATCH 279/929] fix ftplugin var and clean indent (#580) * fix ftplugin var and clean indent --- after/ftplugin/javascript.vim | 6 +++++- indent/javascript.vim | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/after/ftplugin/javascript.vim b/after/ftplugin/javascript.vim index e2d471dd..c6c42d60 100644 --- a/after/ftplugin/javascript.vim +++ b/after/ftplugin/javascript.vim @@ -5,4 +5,8 @@ setlocal iskeyword+=$ suffixesadd+=.js -let b:undo_ftplugin .= ' | setlocal iskeyword< suffixesadd<' +if exists('b:undo_ftplugin') + let b:undo_ftplugin .= ' | setlocal iskeyword< suffixesadd<' +else + let b:undo_ftplugin = 'setlocal iskeyword< suffixesadd<' +endif diff --git a/indent/javascript.vim b/indent/javascript.vim index dde72676..9121c81e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -3,6 +3,7 @@ " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org +" Last Change: July 29, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -56,7 +57,7 @@ func s:lookForParens(start,end,flags,time) endtry endfunc -let s:line_term = '\s*\%(\%(:\@ Date: Sat, 30 Jul 2016 01:04:45 -0700 Subject: [PATCH 280/929] comment on performance, angle brackets --- indent/javascript.vim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9121c81e..618105f4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -61,12 +61,12 @@ let s:line_term = '\s*\%(\/\*.*\*\/\s*\)*\%(:\@\@!\||\|&\|in\%(stanceof\)\=\>\)\C' + let g:javascript_opfirst = '\%([<>,:?^%]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\||\|&\|in\%(stanceof\)\=\>\)\C' endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([*,.?:^%]\|+\@\|\*\@= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0][0] !~ '2') From e8bb2bad78296f06e7945960c72b45ac9022f145 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 30 Jul 2016 21:32:45 -0700 Subject: [PATCH 281/929] remove line comment appended to code (#581) * remove line comment appended to code --- indent/javascript.vim | 52 +++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 618105f4..6d063669 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -1,9 +1,9 @@ " Vim indent file " Language: Javascript -" Maintainer: vim-javascript community -" URL: https://github.com/pangloss/vim-javascript +" Maintainer: vim-javascript community +" URL: https://github.com/pangloss/vim-javascript " Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org -" Last Change: July 29, 2016 +" Last Change: July 30, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -29,13 +29,13 @@ set cpo&vim " Get shiftwidth value if exists('*shiftwidth') - func s:sw() + function s:sw() return shiftwidth() - endfunc + endfunction else - func s:sw() + function s:sw() return &sw - endfunc + endfunction endif let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' @@ -49,15 +49,15 @@ let s:syng_comment = '\%(comment\|doc\)\c' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),'')" -func s:lookForParens(start,end,flags,time) +function s:lookForParens(start,end,flags,time) try return searchpair(a:start,'',a:end,a:flags,s:skip_expr,0,a:time) catch /E118/ return searchpair(a:start,'',a:end,a:flags,0,0) endtry -endfunc +endfunction -let s:line_term = '\s*\%(\/\*.*\*\/\s*\)*\%(:\@' . (a:add ? '\|\ -1 && + \ cursor(line('.'),match(s:Stripline(getline(line('.'))), ')' . s:line_term))>-1) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' : @@ -82,6 +83,11 @@ endfunction " Auxiliary Functions {{{2 +" strip line of comment +function s:StripLine(c) + return substitute(a:c, '\%(:\@ 0 ? lnum : -1 endfunction " Check if line 'lnum' has more opening brackets than closing ones. @@ -127,7 +133,7 @@ endfunction function GetJavascriptIndent() if !exists('b:js_cache') let b:js_cache = [0,0,0] - end + endif " Get the current line. let line = getline(v:lnum) " previous nonblank line number @@ -142,7 +148,9 @@ function GetJavascriptIndent() return cindent(v:lnum) endif let lnum = s:PrevCodeLine(v:lnum - 1) - if lnum == 0 + let pline = s:StripLine(getline(lnum)) + let line = s:StripLine(line) + if lnum <= 0 return 0 endif @@ -163,7 +171,7 @@ function GetJavascriptIndent() let num = pcounts[0][0] =~ '1' ? lnum : b:js_cache[1] if pcounts[0][0] =~'1' call cursor(lnum,pcounts[0][1]) - end + endif else call cursor(v:lnum,1) let syns = synIDattr(synID(v:lnum, 1, 1), 'name') @@ -173,24 +181,24 @@ function GetJavascriptIndent() let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) else let num = s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) - end - end + endif + endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] " most significant part if line =~ s:line_pre . '[])}]' return indent(num) - end - let inb = num == 0 ? 1 : s:Onescope(num, strpart(getline(num),0,b:js_cache[2] - 1),1) + endif + let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) let switch_offset = (!inb || num == 0) || expand("") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) if ((line =~ g:javascript_opfirst || - \ (getline(lnum) =~ g:javascript_continuation && getline(lnum) !~ s:expr_case)) && - \ inb) || (s:Onescope(lnum,getline(lnum),0) && line !~ s:line_pre . '{') + \ (pline =~ g:javascript_continuation && pline !~ s:expr_case)) && + \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset - end + endif endfunction From bc6422b5a452d707e0c8c737196a83e5ac1a5163 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 30 Jul 2016 22:02:11 -0700 Subject: [PATCH 282/929] had a problem with some of the changes --- indent/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6d063669..e5b9c8a6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -72,8 +72,7 @@ let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) return a:text =~ '\%(\' . (a:add ? '\|\ -1 && - \ cursor(line('.'),match(s:Stripline(getline(line('.'))), ')' . s:line_term))>-1) || + \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' : From 60eaba7be5f5ac1ec69d7ce04e8e5b5c3accce8a Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 30 Jul 2016 22:21:06 -0700 Subject: [PATCH 283/929] 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 e5b9c8a6..67f99951 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,6 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Acknowledgement: Based off of vim-ruby maintained by Nikolai Weibull http://vim-ruby.rubyforge.org " Last Change: July 30, 2016 " Only load this indent file when no other was loaded. @@ -147,11 +146,10 @@ function GetJavascriptIndent() return cindent(v:lnum) endif let lnum = s:PrevCodeLine(v:lnum - 1) - let pline = s:StripLine(getline(lnum)) - let line = s:StripLine(line) if lnum <= 0 return 0 endif + let line = s:StripLine(line) if (line =~ s:expr_case) let cpo_switch = &cpo @@ -191,6 +189,7 @@ function GetJavascriptIndent() let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) let switch_offset = (!inb || num == 0) || expand("") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) + let pline = s:StripLine(getline(lnum)) if ((line =~ g:javascript_opfirst || \ (pline =~ g:javascript_continuation && pline !~ s:expr_case)) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') From 6706a2442b757ecc631b220b4a2cbcd7e1d9f8a1 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 30 Jul 2016 22:35:09 -0700 Subject: [PATCH 284/929] few remaining touches --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 67f99951..3f273ea1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -100,7 +100,7 @@ function s:PrevCodeLine(lnum) endif let lnum = prevnonblank(lnum - 1) endwhile - return lnum > 0 ? lnum : -1 + return lnum endfunction " Check if line 'lnum' has more opening brackets than closing ones. @@ -146,7 +146,7 @@ function GetJavascriptIndent() return cindent(v:lnum) endif let lnum = s:PrevCodeLine(v:lnum - 1) - if lnum <= 0 + if lnum == 0 return 0 endif let line = s:StripLine(line) From a328e8175f4763a4221bbb86047f5a4d615caffd Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 31 Jul 2016 10:07:25 -0700 Subject: [PATCH 285/929] add label support (#582) * add label support --- indent/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 3f273ea1..f9d64664 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: July 30, 2016 +" Last Change: July 31, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -191,7 +191,9 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) let pline = s:StripLine(getline(lnum)) if ((line =~ g:javascript_opfirst || - \ (pline =~ g:javascript_continuation && pline !~ s:expr_case)) && + \ (pline =~ g:javascript_continuation && pline !~ s:expr_case && + \ (pline !~ ':' . s:line_term || line !~# s:line_pre . + \ '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)'))) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 5ba6eab7648c705535b494b79bbcc9850b9e37df Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 31 Jul 2016 11:01:36 -0700 Subject: [PATCH 286/929] case-sensitivity (#583) * case-sensitivity --- indent/javascript.vim | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f9d64664..64ca942f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -38,12 +38,12 @@ else endif let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' -let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:\C' +let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)\c' +let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)' " Regex of syntax group names that are strings or documentation. -let s:syng_comment = '\%(comment\|doc\)\c' +let s:syng_comment = '\%(comment\|doc\)' " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),'')" @@ -60,23 +60,23 @@ let s:line_term = '\s*\%(\/\*.*\*\/\s*\)*$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\||\|&\|in\%(stanceof\)\=\>\)\C' + let g:javascript_opfirst = '\%([<>,:?^%]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\||\|&\|in\%(stanceof\)\=\>\)' endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<*,.?:^%]\|+\@\|\*\@\|\*\@' . (a:add ? '\|\' . (a:add ? '\|\ -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && - \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)\C' : - \ '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)\C') . '\_s*\%#','bW') && - \ (a:add || (expand("") == 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) + \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)' : + \ '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && + \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction " Auxiliary Functions {{{2 @@ -151,7 +151,7 @@ function GetJavascriptIndent() endif let line = s:StripLine(line) - if (line =~ s:expr_case) + if (line =~# s:expr_case) let cpo_switch = &cpo set cpo+=% let ind = cindent(v:lnum) @@ -187,13 +187,13 @@ function GetJavascriptIndent() return indent(num) endif let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) - let switch_offset = (!inb || num == 0) || expand("") != 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : + let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) let pline = s:StripLine(getline(lnum)) - if ((line =~ g:javascript_opfirst || - \ (pline =~ g:javascript_continuation && pline !~ s:expr_case && + if ((line =~# g:javascript_opfirst || + \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && \ (pline !~ ':' . s:line_term || line !~# s:line_pre . - \ '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)'))) && + \ '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)\>'))) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 86413728b55e1ffb7a31521339c5c851114fa582 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 31 Jul 2016 12:26:39 -0700 Subject: [PATCH 287/929] Don't join strings in multiple lines easier to read in one line --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 64ca942f..56ad87e1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -192,8 +192,8 @@ function GetJavascriptIndent() let pline = s:StripLine(getline(lnum)) if ((line =~# g:javascript_opfirst || \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && - \ (pline !~ ':' . s:line_term || line !~# s:line_pre . - \ '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)\>'))) && + \ (pline !~ ':' . s:line_term || line !~# + \ s:line_pre . '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)\>'))) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From c003d8b9745c897de819d05ac39bd0674db14df2 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 31 Jul 2016 12:53:10 -0700 Subject: [PATCH 288/929] join lines --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 56ad87e1..90d9dc4e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,9 +73,8 @@ function s:Onescope(lnum,text,add) return a:text =~# '\%(\' . (a:add ? '\|\ -1) && - \ s:lookForParens('(', ')', 'cbW', 100) > 0 && - \ search((a:add ? '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)' : - \ '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && + \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? + \ '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From 58095d8647aaaaa50478c3a19b52c7ee5bb32f01 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 31 Jul 2016 22:00:25 -0700 Subject: [PATCH 289/929] regex char classes --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 90d9dc4e..035e30e9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ function s:Onescope(lnum,text,add) \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? - \ '\%(function\*\|[A-Za-z_$][0-9A-Za-z_$]*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && + \ '\%(function\*\|\%(\h\|\$\)\%(\w\|\$\)*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From bd4c5270e72a198b544f8a8a56faec6d17e4bb77 Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 1 Aug 2016 12:08:00 -0700 Subject: [PATCH 290/929] limit regex lookbehind --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 035e30e9..1be39302 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -40,7 +40,7 @@ endif let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(string\|regex\|special\|doc\|comment\|template\)' +let s:syng_strcom = '\%(s\%(tring\|pecial\)\|regex\|doc\|comment\|template\)' " Regex of syntax group names that are strings or documentation. let s:syng_comment = '\%(comment\|doc\)' @@ -74,7 +74,7 @@ function s:Onescope(lnum,text,add) \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? - \ '\%(function\*\|\%(\h\|\$\)\%(\w\|\$\)*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|while\|with\)') . '\_s*\%#\C','bW') && + \ '\%(function\*\|\%(\h\|\$\)\%(\w\|\$\)*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction @@ -192,7 +192,7 @@ function GetJavascriptIndent() if ((line =~# g:javascript_opfirst || \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && \ (pline !~ ':' . s:line_term || line !~# - \ s:line_pre . '\%(debugger\|do\|else\|finally\|for\|if\|let\|switch\|throw\|try\|while\|with\)\>'))) && + \ s:line_pre . '\%(d\%(ebugger\|o\)\|else\|f\%(inally\|or\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>'))) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 4278caa2757940d581117a325e118004a21a517f Mon Sep 17 00:00:00 2001 From: bounceme Date: Mon, 1 Aug 2016 19:46:33 -0700 Subject: [PATCH 291/929] unicode identifiers javascript allows for much more than just [A-Za-z] for identifiers. this is also faster on more recent versions of vim. --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1be39302..a8276802 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ function s:Onescope(lnum,text,add) \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? - \ '\%(function\*\|\%(\h\|\$\)\%(\w\|\$\)*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && + \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From 6de8f62f669952941e6ea57da854d579486ca2db Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 2 Aug 2016 09:41:48 -0700 Subject: [PATCH 292/929] more regex --- indent/javascript.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a8276802..a23a4c4f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,10 +37,10 @@ else endfunction endif -let s:line_pre = '^\s*\%(\/\*.*\*\/\s*\)*' +let s:line_pre = '^\s*\%(\/\*.\{-}\*\/\s*\)*' let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. -let s:syng_strcom = '\%(s\%(tring\|pecial\)\|regex\|doc\|comment\|template\)' +let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' " Regex of syntax group names that are strings or documentation. let s:syng_comment = '\%(comment\|doc\)' @@ -56,7 +56,7 @@ function s:lookForParens(start,end,flags,time) endtry endfunction -let s:line_term = '\s*\%(\/\*.*\*\/\s*\)*$' +let s:line_term = '\s*\%(\/\*.\{-}\*\/\s*\)*$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') @@ -74,7 +74,8 @@ function s:Onescope(lnum,text,add) \ ((a:add && a:text =~ s:line_pre . s:line_term && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? - \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && + \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : + \ '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction @@ -192,7 +193,7 @@ function GetJavascriptIndent() if ((line =~# g:javascript_opfirst || \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && \ (pline !~ ':' . s:line_term || line !~# - \ s:line_pre . '\%(d\%(ebugger\|o\)\|else\|f\%(inally\|or\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>'))) && + \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>'))) && \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 27a37b4a77783628cf988fbbffa8e8e0be29288a Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 2 Aug 2016 19:32:37 -0700 Subject: [PATCH 293/929] for 585 (#586) changes operator behavior inside of invoking parens, object literals, and arrays. --- indent/javascript.vim | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a23a4c4f..c47d7223 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -186,15 +186,17 @@ function GetJavascriptIndent() if line =~ s:line_pre . '[])}]' return indent(num) endif - let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) + + let pline = s:StripLine(getline(lnum)) + let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || + \ (num < lnum && (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) - let pline = s:StripLine(getline(lnum)) - if ((line =~# g:javascript_opfirst || - \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && - \ (pline !~ ':' . s:line_term || line !~# - \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>'))) && - \ inb) || (s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') + + if (inb && (line =~# g:javascript_opfirst || + \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && (pline !~ ':' . s:line_term || line !~# + \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>')))) || + \ (num < lnum && s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From b65cd1447236c3ee5fdec81f7bd601ab5fb08dcb Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 2 Aug 2016 20:00:54 -0700 Subject: [PATCH 294/929] update comments --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c47d7223..d598b1db 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: July 31, 2016 +" Last Change: August 2, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -182,7 +182,6 @@ function GetJavascriptIndent() endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - " most significant part if line =~ s:line_pre . '[])}]' return indent(num) endif @@ -193,6 +192,7 @@ function GetJavascriptIndent() let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) + " most significant, find the indent amount if (inb && (line =~# g:javascript_opfirst || \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && (pline !~ ':' . s:line_term || line !~# \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>')))) || From 97e5fcab6693fa006d6552ece9b72c60e7f04373 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 2 Aug 2016 21:16:25 -0700 Subject: [PATCH 295/929] last commit extended to blocks --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d598b1db..419e5ce5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -187,8 +187,8 @@ function GetJavascriptIndent() endif let pline = s:StripLine(getline(lnum)) - let inb = num == 0 ? 1 : s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || - \ (num < lnum && (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) + let inb = num == 0 ? 1 : (s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || + \ (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) && num < lnum let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) From 23b4639fc6038e15c1a01c1d8e3126d801f3c1fb Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 2 Aug 2016 21:35:05 -0700 Subject: [PATCH 296/929] accuracy and speed increase for line_term regex --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 419e5ce5..ecec5257 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -56,7 +56,7 @@ function s:lookForParens(start,end,flags,time) endtry endfunction -let s:line_term = '\s*\%(\/\*.\{-}\*\/\s*\)*$' +let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') From 73c85a3f7e0749edad7c6c10e946b2d4ac73e1b9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 3 Aug 2016 01:22:47 -0700 Subject: [PATCH 297/929] awful off-by-one bug so it appears that my testing didn't reveal this because I use (and apparently most people use): ``` function a() { var i = 1, c = 2 } ``` instead of: ``` function a(){ var i = 1, c = 2 } ``` --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ecec5257..4e2568a5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -116,7 +116,7 @@ function s:LineHasOpeningBrackets(lnum) let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 - let last = pos + let last = pos + 1 else let open_{idx - 1} = open_{idx - 1} - 1 endif From b8762e8af610cf98d42e4b8ff610060953a5a3a9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 3 Aug 2016 09:15:02 -0700 Subject: [PATCH 298/929] remove buggy linehasopeningbracket trick --- indent/javascript.vim | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4e2568a5..aea64c43 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -110,21 +110,19 @@ function s:LineHasOpeningBrackets(lnum) let open_4 = 0 let line = getline(a:lnum) let pos = match(line, '[][(){}]', 0) - let last = 0 while pos != -1 if !s:IsSyn(a:lnum, pos + 1, '') let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 - let last = pos + 1 else let open_{idx - 1} = open_{idx - 1} - 1 endif endif let pos = match(line, '[][(){}]', pos + 1) endwhile - return [(open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . - \ (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)), last] + return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . + \ (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) endfunction " }}} @@ -162,15 +160,15 @@ 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 pcounts = [0] if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0][0] !~ '2') - let num = pcounts[0][0] =~ '1' ? lnum : b:js_cache[1] - if pcounts[0][0] =~'1' - call cursor(lnum,pcounts[0][1]) + \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') + let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] + if pcounts[0] =~'1' + call s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) endif else - call cursor(v:lnum,1) let syns = synIDattr(synID(v:lnum, 1, 1), 'name') if line[0] =~ '\s' && syns != '' let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : From 6a3fac49aa8d6a9e6d2a62b8f7f9eddf4aee74be Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 3 Aug 2016 12:07:45 -0700 Subject: [PATCH 299/929] cleaning --- indent/javascript.vim | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index aea64c43..cf99f00a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -164,10 +164,7 @@ function GetJavascriptIndent() let pcounts = [0] if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') - let num = pcounts[0] =~ '1' ? lnum : b:js_cache[1] - if pcounts[0] =~'1' - call s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) - endif + let num = pcounts[0] =~ '1' ? s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) : b:js_cache[1] else let syns = synIDattr(synID(v:lnum, 1, 1), 'name') if line[0] =~ '\s' && syns != '' From 336d4351cea47c820e4c67af4e7afa6e822cc0fb Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 4 Aug 2016 19:48:39 -0700 Subject: [PATCH 300/929] more cleaning --- indent/javascript.vim | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index cf99f00a..11bd91e2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " strip line of comment function s:StripLine(c) - return substitute(a:c, '\%(:\@= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') - let num = pcounts[0] =~ '1' ? s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) : b:js_cache[1] + let num = pcounts[0] =~ '1' ? s:lookForParens('[({[]','[])}]','bW',2000) : b:js_cache[1] else let syns = synIDattr(synID(v:lnum, 1, 1), 'name') if line[0] =~ '\s' && syns != '' let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : - \ ['(\|{\|\[',')\|}\|\]'] + \ ['[({[]','[])}]'] let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) else - let num = s:lookForParens('(\|{\|\[',')\|}\|\]','bW',2000) + let num = s:lookForParens('[({[]','[])}]','bW',2000) endif endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] From fc43554f2a5d16762451c385f21b3ab754ffc567 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 4 Aug 2016 21:05:27 -0700 Subject: [PATCH 301/929] case-sensitivity --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 11bd91e2..9fa3dbbf 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " strip line of comment function s:StripLine(c) - return a:c !~ s:expr_case ? substitute(a:c, '\%(:\@ Date: Thu, 4 Aug 2016 22:20:36 -0700 Subject: [PATCH 302/929] simplify regex --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 9fa3dbbf..f591a0f1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,7 +71,7 @@ let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) return a:text =~# '\%(\' . (a:add ? '\|\ -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : From 2a85b3c34ca6032e1949a50ffe15a2a491e783d9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 6 Aug 2016 11:35:07 -0700 Subject: [PATCH 303/929] ind updates (#593) --- indent/javascript.vim | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f591a0f1..e30e272a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 2, 2016 +" Last Change: August 6, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -88,7 +88,7 @@ endfunction " Check if the character at lnum:col is inside a string, comment, or is ascii. function s:IsSyn(lnum, col, reg) - return synIDattr(synID(a:lnum, a:col, 1), 'name') =~? (a:reg != '' ? a:reg : s:syng_strcom) + return synIDattr(synID(a:lnum, a:col, 0), 'name') =~? (a:reg != '' ? a:reg : s:syng_strcom) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. @@ -104,7 +104,7 @@ function s:PrevCodeLine(lnum) endfunction " Check if line 'lnum' has more opening brackets than closing ones. -function s:LineHasOpeningBrackets(lnum) +function s:Balanced(lnum) let open_0 = 0 let open_2 = 0 let open_4 = 0 @@ -121,8 +121,7 @@ function s:LineHasOpeningBrackets(lnum) endif let pos = match(line, '[][(){}]', pos + 1) endwhile - return (open_0 > 0 ? 1 : (open_0 == 0 ? 0 : 2)) . (open_2 > 0 ? 1 : (open_2 == 0 ? 0 : 2)) . - \ (open_4 > 0 ? 1 : (open_4 == 0 ? 0 : 2)) + return (!open_4 + !open_2 + !open_0) - 2 endfunction " }}} @@ -160,19 +159,16 @@ 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 pcounts = [0] if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > lnum || map(pcounts,'s:LineHasOpeningBrackets(lnum)')[0] !~ '2') - let num = pcounts[0] =~ '1' ? s:lookForParens('[({[]','[])}]','bW',2000) : b:js_cache[1] - else + \ (b:js_cache[0] > lnum || s:Balanced(lnum) > 0) + let num = b:js_cache[1] + elseif line[0] =~ '\s' let syns = synIDattr(synID(v:lnum, 1, 1), 'name') - if line[0] =~ '\s' && syns != '' - let pattern = syns =~? 'funcblock' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : syns =~? 'jsbracket'? ['\[','\]'] : - \ ['[({[]','[])}]'] - let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) - else - let num = s:lookForParens('[({[]','[])}]','bW',2000) - endif + let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : + \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] + let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) + else + let num = s:lookForParens('[({[]','[])}]','bW',2000) endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] From 4a126ee6aa2ac113f6315e6d97e03035cee049cf Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 6 Aug 2016 15:48:39 -0700 Subject: [PATCH 304/929] negatives are truthy in vimscript --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e30e272a..ec4b07b4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -180,7 +180,7 @@ function GetJavascriptIndent() let inb = num == 0 ? 1 : (s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || \ (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) && num < lnum let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (match(&cino,'.*:\zs[^,]*s') ? s:sw() : 1)) + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~ '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount if (inb && (line =~# g:javascript_opfirst || From 29519c62a56e54934b7ae4887cc2ae2ecedb2331 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 6 Aug 2016 17:06:12 -0700 Subject: [PATCH 305/929] case sensitive keep forgetting this --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec4b07b4..00a4206a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -180,7 +180,7 @@ function GetJavascriptIndent() let inb = num == 0 ? 1 : (s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || \ (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) && num < lnum let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~ '.*:[^,]*s' ? s:sw() : 1)) + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount if (inb && (line =~# g:javascript_opfirst || From 0a7432f3e1afaf02becba648fdc62ea80bf489c8 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 6 Aug 2016 19:39:07 -0700 Subject: [PATCH 306/929] remove transparent syntax check --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 00a4206a..bca66262 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -163,7 +163,7 @@ function GetJavascriptIndent() \ (b:js_cache[0] > lnum || s:Balanced(lnum) > 0) let num = b:js_cache[1] elseif line[0] =~ '\s' - let syns = synIDattr(synID(v:lnum, 1, 1), 'name') + let syns = synIDattr(synID(v:lnum, 1, 0), 'name') let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) From a7e60bbe490215c3983c871bfd16de146d140fa1 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 7 Aug 2016 08:18:53 -0700 Subject: [PATCH 307/929] remove repeated syn checking --- indent/javascript.vim | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bca66262..74ffa97d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -132,14 +132,14 @@ function GetJavascriptIndent() " Get the current line. let line = getline(v:lnum) " previous nonblank line number - let prevline = prevnonblank(v:lnum - 1) + let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc.{{{2 - if (line !~ '^[''"`]' && s:IsSyn(v:lnum,1,'string\|template')) || - \ (line !~ '^\s*[/*]' && s:IsSyn(v:lnum,1,s:syng_comment)) + if (line !~ '^[''"`]' && syns =~? 'string\|template') || + \ (line !~ '^\s*[/*]' && syns =~? s:syng_comment) return -1 endif - if line !~ '^\%(\/\*\|\s*\/\/\)' && s:IsSyn(v:lnum,1,s:syng_comment) + if line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment return cindent(v:lnum) endif let lnum = s:PrevCodeLine(v:lnum - 1) @@ -162,8 +162,7 @@ function GetJavascriptIndent() if b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && \ (b:js_cache[0] > lnum || s:Balanced(lnum) > 0) let num = b:js_cache[1] - elseif line[0] =~ '\s' - let syns = synIDattr(synID(v:lnum, 1, 0), 'name') + elseif syns != '' && line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) From b59dfbc8717f47be84b1a3633bb3a6af4cc70225 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 7 Aug 2016 08:32:00 -0700 Subject: [PATCH 308/929] 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 74ffa97d..4cf644fd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 6, 2016 +" Last Change: August 7, 2016 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -103,7 +103,7 @@ function s:PrevCodeLine(lnum) return lnum endfunction -" Check if line 'lnum' has more opening brackets than closing ones. +" Check if line 'lnum' has a balanced amount of parentheses. function s:Balanced(lnum) let open_0 = 0 let open_2 = 0 @@ -131,7 +131,6 @@ function GetJavascriptIndent() endif " Get the current line. let line = getline(v:lnum) - " previous nonblank line number let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc.{{{2 From 9703a61af908ec223fe7fd64ad0d3766aa2693d9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 9 Aug 2016 12:04:14 -0700 Subject: [PATCH 309/929] cleaning, minor performance improvements --- indent/javascript.vim | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4cf644fd..32857609 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -46,14 +46,14 @@ 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 = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : s:IsSyn(line('.'),col('.'),'')" +let s:skip_expr = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:lookForParens(start,end,flags,time) - try + if has('reltime') return searchpair(a:start,'',a:end,a:flags,s:skip_expr,0,a:time) - catch /E118/ + else return searchpair(a:start,'',a:end,a:flags,0,0) - endtry + endif endfunction let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' @@ -86,16 +86,11 @@ function s:StripLine(c) return a:c !~# s:expr_case ? substitute(a:c, '\%(:\@ 0 - if !s:IsSyn(lnum, matchend(getline(lnum), '^\s*[^''"]'),'') + if synIDattr(synID(lnum,matchend(getline(lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom break endif let lnum = prevnonblank(lnum - 1) @@ -111,7 +106,7 @@ function s:Balanced(lnum) let line = getline(a:lnum) let pos = match(line, '[][(){}]', 0) while pos != -1 - if !s:IsSyn(a:lnum, pos + 1, '') + if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom let idx = stridx('(){}[]', line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 From 6f31d721380443c808ce04403363a70d9f6f07ac Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 12 Aug 2016 01:09:54 -0700 Subject: [PATCH 310/929] fix regex --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 32857609..222028bd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -38,7 +38,7 @@ else endif let s:line_pre = '^\s*\%(\/\*.\{-}\*\/\s*\)*' -let s:expr_case = s:line_pre . '\%(\%(case\>.*\)\|default\)\s*:' +let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' @@ -75,7 +75,7 @@ function s:Onescope(lnum,text,add) \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : - \ '\<\%(for\%(\s+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && + \ '\<\%(for\%(\s\+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction From 898a536e024b840e68f2efc09679e79ead823453 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 12 Aug 2016 01:39:24 -0700 Subject: [PATCH 311/929] disambiguate vars --- indent/javascript.vim | 56 +++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 222028bd..f40cf605 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -5,7 +5,7 @@ " Last Change: August 7, 2016 " Only load this indent file when no other was loaded. -if exists("b:did_indent") +if exists('b:did_indent') finish endif let b:did_indent = 1 @@ -19,7 +19,7 @@ setlocal cinoptions+=j1,J1 let b:undo_indent = 'setlocal indentexpr< indentkeys< cinoptions<' " Only define the function once. -if exists("*GetJavascriptIndent") +if exists('*GetJavascriptIndent') finish endif @@ -76,7 +76,7 @@ function s:Onescope(lnum,text,add) \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : \ '\<\%(for\%(\s\+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && - \ (a:add || (expand("") ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) + \ (a:add || (expand('') ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) endfunction " Auxiliary Functions {{{2 @@ -88,14 +88,14 @@ endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevCodeLine(lnum) - let lnum = prevnonblank(a:lnum) - while lnum > 0 - if synIDattr(synID(lnum,matchend(getline(lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom + let l:lnum = prevnonblank(a:lnum) + while l:lnum > 0 + if synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom break endif - let lnum = prevnonblank(lnum - 1) + let l:lnum = prevnonblank(l:lnum - 1) endwhile - return lnum + return l:lnum endfunction " Check if line 'lnum' has a balanced amount of parentheses. @@ -103,18 +103,18 @@ function s:Balanced(lnum) let open_0 = 0 let open_2 = 0 let open_4 = 0 - let line = getline(a:lnum) - let pos = match(line, '[][(){}]', 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('(){}[]', line[pos]) + let idx = stridx('(){}[]', l:line[pos]) if idx % 2 == 0 let open_{idx} = open_{idx} + 1 else let open_{idx - 1} = open_{idx - 1} - 1 endif endif - let pos = match(line, '[][(){}]', pos + 1) + let pos = match(l:line, '[][(){}]', pos + 1) endwhile return (!open_4 + !open_2 + !open_0) - 2 endfunction @@ -125,23 +125,23 @@ function GetJavascriptIndent() let b:js_cache = [0,0,0] endif " Get the current line. - let line = getline(v:lnum) + let l:line = getline(v:lnum) let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc.{{{2 - if (line !~ '^[''"`]' && syns =~? 'string\|template') || - \ (line !~ '^\s*[/*]' && syns =~? s:syng_comment) + if (l:line !~ '^[''"`]' && syns =~? 'string\|template') || + \ (l:line !~ '^\s*[/*]' && syns =~? s:syng_comment) return -1 endif - if line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment + if l:line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment return cindent(v:lnum) endif - let lnum = s:PrevCodeLine(v:lnum - 1) - if lnum == 0 + let l:lnum = s:PrevCodeLine(v:lnum - 1) + if l:lnum == 0 return 0 endif - if (line =~# s:expr_case) + if (l:line =~# s:expr_case) let cpo_switch = &cpo set cpo+=% let ind = cindent(v:lnum) @@ -153,10 +153,10 @@ 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 b:js_cache[0] >= lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > lnum || s:Balanced(lnum) > 0) + if b:js_cache[0] >= l:lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) let num = b:js_cache[1] - elseif syns != '' && line[0] =~ '\s' + elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : \ syns =~? 'jsbracket'? ['\[','\]'] : ['[({[]','[])}]'] let num = s:lookForParens(pattern[0],pattern[1],'bW',2000) @@ -165,21 +165,21 @@ function GetJavascriptIndent() endif let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - if line =~ s:line_pre . '[])}]' + if l:line =~ s:line_pre . '[])}]' return indent(num) endif - let pline = s:StripLine(getline(lnum)) + let pline = s:StripLine(getline(l:lnum)) let inb = num == 0 ? 1 : (s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) || - \ (line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) && num < lnum + \ (l:line !~ s:line_pre . ',' && pline !~ ',' . s:line_term)) && num < l:lnum let switch_offset = (!inb || num == 0) || expand("") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount - if (inb && (line =~# g:javascript_opfirst || - \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && (pline !~ ':' . s:line_term || line !~# + if (inb && (l:line =~# g:javascript_opfirst || + \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && (pline !~ ':' . s:line_term || l:line !~# \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>')))) || - \ (num < lnum && s:Onescope(lnum,pline,0) && line !~ s:line_pre . '{') + \ (num < l:lnum && s:Onescope(l:lnum,pline,0) && l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From debb9bf72249cc3290fa9e8f54709f609b1cf0e9 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 13 Aug 2016 19:47:18 -0700 Subject: [PATCH 312/929] Readme Updates (#599) * Readme Updates * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index bcefe6c6..662a2006 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,11 @@ variables: let g:javascript_conceal_super = "Ω" let g:javascript_conceal_arrow_function = "⇒" +## Indentation Specific + +* `:h cino-:` +* End-of-line continuations : `g:javascript_continuation` ( slightly complicated, look at the source code ) +* Start-of-line continuations : `g:javascript_opfirst` ( same as above ) ## Contributing From 0cab45687178cb67c4bf19173e24ab010cd6fa26 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sun, 14 Aug 2016 13:00:18 -0700 Subject: [PATCH 313/929] regex improvements --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f40cf605..1a6eedde 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -60,12 +60,12 @@ let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\||\|&\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,:?^%|&]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<*,.?:^%]\|+\@\|\*\@\|\*\@ Date: Mon, 15 Aug 2016 18:44:52 -0700 Subject: [PATCH 314/929] block statement (#596) this uses the same algorithm from https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader which the acorn parser also uses. it actually is basically the same as what i had originally but with support for labeled block statements and plain block statements. --- indent/javascript.vim | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1a6eedde..38acae0d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 7, 2016 +" Last Change: August 15, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -70,13 +70,19 @@ endif let g:javascript_continuation .= s:line_term function s:Onescope(lnum,text,add) - return a:text =~# '\%(\' . (a:add ? '\|\\)' . s:line_term ? 'no b' : \ ((a:add && a:text =~ s:line_pre . '$' && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && - \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search((a:add ? - \ '\%(function\*\|[[:lower:][:upper:]_$][[:digit:][:lower:][:upper:]_$]*\)' : - \ '\<\%(for\%(\s\+each\)\=\|if\|let\|w\%(hile\|ith\)\)') . '\_s*\%#\C','bW') && - \ (a:add || (expand('') ==# 'while' ? !s:lookForParens('\\C', '\\C','bW',100) : 1)) + \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && + \ (a:add || ((expand('') !=# 'while' || !s:lookForParens('\C\', '\C\','nbW',100)) && + \ expand('cword') !=# 'each' || search('\C\') : '' +endfunction + +" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader +function s:isBlock() + return getline(line('.'))[col('.')-1] == '{' && !search( + \ '\C\%(\%([-=~!<*+,.?^%|&\[(]\|=\@\|\*\@") !=# 'switch' ? 0 : &cino !~ ':' || !has('float') ? s:sw() : + call cursor(b:js_cache[1:]) + let inb = num == 0 || num < l:lnum && ((l:line !~ s:line_pre . ',' && pline !~ ',' . s:line_term) || s:isBlock()) + let switch_offset = num == 0 || s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) !=# 'switch' ? 0 : + \ &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount if (inb && (l:line =~# g:javascript_opfirst || - \ (pline =~# g:javascript_continuation && pline !~# s:expr_case && (pline !~ ':' . s:line_term || l:line !~# - \ s:line_pre . '\%(d\%(o\|ebugger\)\|else\|f\%(or\|inally\)\|if\|let\|switch\|t\%(hrow\|ry\)\|w\%(hile\|ith\)\)\>')))) || - \ (num < l:lnum && s:Onescope(l:lnum,pline,0) && l:line !~ s:line_pre . '{') + \ (pline =~# g:javascript_continuation && pline !~# s:expr_case))) || + \ (num < l:lnum && s:Onescope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)' && + \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 return indent(num) + s:sw() + switch_offset From 3a20412d264f369dc09d2f29dd6e5f95614c0a22 Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 16 Aug 2016 19:21:52 -0700 Subject: [PATCH 315/929] cleaning (#601) cleaning and improving readability --- indent/javascript.vim | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 38acae0d..882fe48a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 15, 2016 +" Last Change: August 16, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -46,15 +46,17 @@ 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 = "line('.') < (prevnonblank(v:lnum) - 2000) ? dummy : synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" +let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" -function s:lookForParens(start,end,flags,time) - if has('reltime') - return searchpair(a:start,'',a:end,a:flags,s:skip_expr,0,a:time) - else - return searchpair(a:start,'',a:end,a:flags,0,0) - endif -endfunction +if has('reltime') + function s:lookForParens(start,end,flags,time) + return searchpair(a:start,'',a:end,a:flags,s:skip_expr,max([prevnonblank(v:lnum) - 2000,0]),a:time) + endfunction +else + function s:lookForParens(start,end,flags,n) + return searchpair(a:start,'',a:end,a:flags,0,max([prevnonblank(v:lnum) - 2000,0])) + endfunction +endif let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' @@ -62,11 +64,11 @@ let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' if !exists('g:javascript_opfirst') let g:javascript_opfirst = '\%([<>,:?^%|&]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif -let g:javascript_opfirst = s:line_pre . g:javascript_opfirst - if !exists('g:javascript_continuation') let g:javascript_continuation = '\%([<=*,.?:^%|&]\|+\@\|\*\@ 0 + while l:lnum if synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"]'),0),'name') !~? s:syng_strcom - break + return l:lnum endif let l:lnum = prevnonblank(l:lnum - 1) endwhile - return l:lnum endfunction " Check if line 'lnum' has a balanced amount of parentheses. @@ -176,7 +177,7 @@ function GetJavascriptIndent() endif let pline = s:StripLine(getline(l:lnum)) - call cursor(b:js_cache[1:]) + call cursor(b:js_cache[1],b:js_cache[2]) let inb = num == 0 || num < l:lnum && ((l:line !~ s:line_pre . ',' && pline !~ ',' . s:line_term) || s:isBlock()) let switch_offset = num == 0 || s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) !=# 'switch' ? 0 : \ &cino !~ ':' || !has('float') ? s:sw() : From cef306faf8ae064fed37590c03d4ffbca15e7836 Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 17 Aug 2016 13:23:43 -0700 Subject: [PATCH 316/929] settings (#603) these don't seem to be very relevant when using indentexprs, and may override the indentation script, opinions on this are welcomed, and honestly I don't know exactly what effect these have. the clojure indent file and a few others included with vim has these options set to off --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 882fe48a..21fdf3aa 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -12,11 +12,11 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() -setlocal nolisp +setlocal nolisp noautoindent nosmartindent setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e setlocal cinoptions+=j1,J1 -let b:undo_indent = 'setlocal indentexpr< indentkeys< cinoptions<' +let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys< cinoptions<' " Only define the function once. if exists('*GetJavascriptIndent') From aadf36b731716105d0b63454f508c7272b67a69e Mon Sep 17 00:00:00 2001 From: bounceme Date: Wed, 17 Aug 2016 19:11:37 -0700 Subject: [PATCH 317/929] cache can be invalid for he current line --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 21fdf3aa..ec756641 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -160,7 +160,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 b:js_cache[0] >= l:lnum && b:js_cache[0] <= v:lnum && b:js_cache[0] && + if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' From f16fe69f0f6fee588c96ce4131dd4c93860cbb04 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 18 Aug 2016 11:50:57 -0700 Subject: [PATCH 318/929] Change function names --- indent/javascript.vim | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec756641..bae12128 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -49,11 +49,11 @@ let s:syng_comment = '\%(comment\|doc\)' let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" if has('reltime') - function s:lookForParens(start,end,flags,time) + 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) endfunction else - function s:lookForParens(start,end,flags,n) + function s:GetPair(start,end,flags,n) return searchpair(a:start,'',a:end,a:flags,0,max([prevnonblank(v:lnum) - 2000,0])) endfunction endif @@ -75,16 +75,16 @@ function s:Onescope(lnum,text,add) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : \ ((a:add && a:text =~ s:line_pre . '$' && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && - \ s:lookForParens('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && - \ (a:add || ((expand('') !=# 'while' || !s:lookForParens('\C\', '\C\','nbW',100)) && + \ s:GetPair('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && + \ (a:add || ((expand('') !=# 'while' || !s:GetPair('\C\', '\C\','nbW',100)) && \ expand('cword') !=# 'each' || search('\C\') : '' endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader -function s:isBlock() +function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( \ '\C\%(\%([-=~!<*+,.?^%|&\[(]\|=\@\|\*\@ Date: Thu, 18 Aug 2016 11:54:00 -0700 Subject: [PATCH 319/929] Rename function --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bae12128..4b11fdd3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,7 +71,7 @@ endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst let g:javascript_continuation .= s:line_term -function s:Onescope(lnum,text,add) +function s:OneScope(lnum,text,add) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : \ ((a:add && a:text =~ s:line_pre . '$' && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && @@ -179,14 +179,14 @@ function GetJavascriptIndent() let pline = s:StripLine(getline(l:lnum)) call cursor(b:js_cache[1],b:js_cache[2]) let inb = num == 0 || num < l:lnum && ((l:line !~ s:line_pre . ',' && pline !~ ',' . s:line_term) || s:IsBlock()) - let switch_offset = num == 0 || s:Onescope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) !=# 'switch' ? 0 : + let switch_offset = num == 0 || s:OneScope(num, s:StripLine(strpart(getline(num),0,b:js_cache[2] - 1)),1) !=# 'switch' ? 0 : \ &cino !~ ':' || !has('float') ? s:sw() : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount if (inb && (l:line =~# g:javascript_opfirst || \ (pline =~# g:javascript_continuation && pline !~# s:expr_case))) || - \ (num < l:lnum && s:Onescope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)' && + \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)' && \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 67f2990a8b74d8e72387fced7a8b6d09b9c62e22 Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 18 Aug 2016 17:41:47 -0700 Subject: [PATCH 320/929] regex improvements (#607) small regex improvements --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4b11fdd3..321d56f1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,7 +37,7 @@ else endfunction endif -let s:line_pre = '^\s*\%(\/\*.\{-}\*\/\s*\)*' +let s:line_pre = '^\s*\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=' let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' @@ -58,14 +58,14 @@ else endfunction endif -let s:line_term = '\%(\s*\%(\/\*.\{-}\*\/\s*\)\=\)\@>$' +let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%|&]\|\([-/.+]\)\%(\1\|\*\|\/\)\@!\|\*\/\@!\|=>\@!\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\([-/.+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<=*,.?:^%|&]\|+\@\|\*\@\|\ Date: Thu, 18 Aug 2016 21:03:43 -0700 Subject: [PATCH 321/929] more regex (#608) --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 321d56f1..214d83d5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,7 +37,7 @@ else endfunction endif -let s:line_pre = '^\s*\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=' +let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\%([-=~!<*+,.?^%|&\[(]\|=\@\|\*\@\|\*\@ Date: Fri, 19 Aug 2016 14:58:34 -0700 Subject: [PATCH 322/929] function removed,cleaning --- indent/javascript.vim | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 214d83d5..b7b463ec 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -89,11 +89,6 @@ endfunction " Auxiliary Functions {{{2 -" strip line of comment -function s:StripLine(c) - return a:c !~# s:expr_case ? substitute(a:c, '\%(:\@ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset From 8eea63270067ca03cadbd0548866684729a986ac Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 19 Aug 2016 18:53:03 -0700 Subject: [PATCH 323/929] fix foreach method calls --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b7b463ec..5a16f2ac 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -182,7 +182,7 @@ function GetJavascriptIndent() " most significant, find the indent amount if (inb && (l:line =~# g:javascript_opfirst || (!swcase && pline =~# g:javascript_continuation))) || - \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)' && + \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From efab7db0bb6ee2898b716962c69b10697c04822c Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 19 Aug 2016 19:15:43 -0700 Subject: [PATCH 324/929] date --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5a16f2ac..d68b3971 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 16, 2016 +" Last Change: August 19, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -182,7 +182,7 @@ function GetJavascriptIndent() " most significant, find the indent amount if (inb && (l:line =~# g:javascript_opfirst || (!swcase && pline =~# g:javascript_continuation))) || - \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && + \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 055ce0ca67955c4d457b08ec3fe6f84a619ed951 Mon Sep 17 00:00:00 2001 From: bounceme Date: Fri, 19 Aug 2016 21:02:33 -0700 Subject: [PATCH 325/929] switch stuff --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d68b3971..18c5dae9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -181,7 +181,7 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount - if (inb && (l:line =~# g:javascript_opfirst || (!swcase && pline =~# g:javascript_continuation))) || + if (inb && (!swcase && (l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation))) || \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset From 95161928410806a14974284195304364f4557547 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 20 Aug 2016 00:39:34 -0700 Subject: [PATCH 326/929] case statements update --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 18c5dae9..02e332a9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 19, 2016 +" Last Change: August 20, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -181,8 +181,8 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount - if (inb && (!swcase && (l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation))) || - \ (num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && + if inb && !swcase && ((l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation) || + \ num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 34a070cc3d8a3c71812f82bceb6b559e41dffff1 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 20 Aug 2016 11:57:11 -0700 Subject: [PATCH 327/929] minor style changes --- indent/javascript.vim | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 02e332a9..51881d16 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -102,9 +102,7 @@ endfunction " Check if line 'lnum' has a balanced amount of parentheses. function s:Balanced(lnum) - let open_0 = 0 - let open_2 = 0 - let open_4 = 0 + let [open_0,open_2,open_4] = [0,0,0] let l:line = getline(a:lnum) let pos = match(l:line, '[][(){}]', 0) while pos != -1 @@ -131,7 +129,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 6787729dca38a1e4be5c13586b1e94e2624f5762 Mon Sep 17 00:00:00 2001 From: bounceme Date: Sat, 20 Aug 2016 21:28:58 -0700 Subject: [PATCH 328/929] remove ugly function call --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 51881d16..612771f9 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -174,7 +174,7 @@ function GetJavascriptIndent() let swcase = getline(l:lnum) =~# s:expr_case let pline = swcase ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sat, 20 Aug 2016 21:36:24 -0700 Subject: [PATCH 329/929] last commit revert --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 612771f9..51881d16 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -174,7 +174,7 @@ function GetJavascriptIndent() let swcase = getline(l:lnum) =~# s:expr_case let pline = swcase ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sun, 21 Aug 2016 15:03:06 -0700 Subject: [PATCH 330/929] containing braces which aren't blocks --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 51881d16..55065c6a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Mon, 22 Aug 2016 11:38:07 -0700 Subject: [PATCH 331/929] comment fix for multiline comments which were being considered operator first lines in some cases. may be getting some bug reports for this on master --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 55065c6a..e1601515 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -62,7 +62,7 @@ let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\([-/.+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\([-/.+]\)\%(\1\|\*\)\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') let g:javascript_continuation = '\%([<=,.?/*:^%|&]\|+\@\|\ Date: Mon, 22 Aug 2016 12:11:57 -0700 Subject: [PATCH 332/929] improve regex --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e1601515..b0588e13 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -62,7 +62,7 @@ let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\([-/.+]\)\%(\1\|\*\)\@!\|=>\@!\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\/[^/*]\|\([-.+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') let g:javascript_continuation = '\%([<=,.?/*:^%|&]\|+\@\|\ Date: Wed, 24 Aug 2016 16:21:45 -0700 Subject: [PATCH 333/929] Fix export default style indents --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b0588e13..dccf1b8d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Wed, 24 Aug 2016 21:42:34 -0700 Subject: [PATCH 334/929] regex update --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index dccf1b8d..af8e5d1c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Thu, 25 Aug 2016 00:21:44 -0700 Subject: [PATCH 335/929] allow nl in export default --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index af8e5d1c..524cada2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Fri, 26 Aug 2016 19:56:52 -0700 Subject: [PATCH 336/929] small bugfixes --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 524cada2..c9a89556 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -77,7 +77,7 @@ function s:OneScope(lnum,text,add) \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && \ s:GetPair('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && \ (a:add || ((expand('') !=# 'while' || !s:GetPair('\C\', '\C\','nbW',100)) && - \ expand('cword') !=# 'each' || search('\C\') : '' + \ (expand('') !=# 'each' || search('\C\') : '' endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader From 51035b51a04d52156401baac5e8af6dc8b889a09 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 31 Aug 2016 19:30:32 -0700 Subject: [PATCH 337/929] react property expressions fixes #618 elegantly (hopefully) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c9a89556..694403af 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -84,7 +84,7 @@ endfunction function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( \ '\C\%(\\|\*\@ Date: Fri, 2 Sep 2016 15:10:06 -0700 Subject: [PATCH 338/929] adjustable indent (experimental) https://github.com/mxw/vim-jsx/issues/116#issuecomment-244400990 thanks to @mxw for the suggestion --- indent/javascript.vim | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 694403af..c13f4f59 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -122,7 +122,7 @@ endfunction function GetJavascriptIndent() if !exists('b:js_cache') - let b:js_cache = [0,0,0] + let b:js_cache = [0,0,0,0] endif " Get the current line. let l:line = getline(v:lnum) @@ -152,9 +152,11 @@ 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 known = 0 call cursor(v:lnum,1) if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) + let known = 1 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -163,7 +165,11 @@ function GetJavascriptIndent() else let num = s:GetPair('[({[]','[])}]','bW',2000) endif - let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] + + if known && b:js_cache[3] + let known = indent(b:js_cache[0]) - b:js_cache[3] + endif + let b:js_cache[:3] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' return indent(num) @@ -182,9 +188,13 @@ function GetJavascriptIndent() if inb && !swcase && ((l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation) || \ num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') - return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + let ind = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + let b:js_cache[3] = ind + return ind + known elseif num > 0 - return indent(num) + s:sw() + switch_offset + let ind = indent(num) + s:sw() + switch_offset + let b:js_cache[3] = ind + return ind + known endif endfunction From d6616d5fd6f87633856d96abbbd7931f3a3db468 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Sep 2016 15:28:28 -0700 Subject: [PATCH 339/929] Update javascript.vim --- indent/javascript.vim | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c13f4f59..7190dc38 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -169,7 +169,7 @@ function GetJavascriptIndent() if known && b:js_cache[3] let known = indent(b:js_cache[0]) - b:js_cache[3] endif - let b:js_cache[:3] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] + let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' return indent(num) @@ -177,15 +177,14 @@ function GetJavascriptIndent() call cursor(b:js_cache[1],b:js_cache[2]) - let swcase = getline(l:lnum) =~# s:expr_case - let pline = swcase ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@' && \ l:line !~ s:line_pre . '{') let ind = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset From 0bba857641759969cca990c815ec7a830fcbee60 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Sep 2016 19:38:52 -0700 Subject: [PATCH 340/929] bugfixes --- indent/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7190dc38..ec08fb62 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -156,7 +156,9 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) - let known = 1 + if b:js_cache[1] == num + let known = 1 + end let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -184,7 +186,7 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount - if inb && ((l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation) || + if inb && ((l:line =~# g:javascript_opfirst || pline !~# s:expr_case . s:line_term && pline =~# g:javascript_continuation) || \ num < l:lnum && s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{') let ind = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset From f8a4a45f3d52bf42a28868c3f1b2d727522d7d8e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Sep 2016 19:50:44 -0700 Subject: [PATCH 341/929] fixes for the bugfixes --- indent/javascript.vim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec08fb62..5cba356a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -112,6 +112,9 @@ function s:Balanced(lnum) let open_{idx} = open_{idx} + 1 else let open_{idx - 1} = open_{idx - 1} - 1 + if open_{idx - 1} < 0 + return 0 + end endif endif let pos = match(l:line, '[][(){}]', pos + 1) @@ -150,15 +153,13 @@ function GetJavascriptIndent() endif "}}} + let known = 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. - let known = 0 call cursor(v:lnum,1) if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) - if b:js_cache[1] == num - let known = 1 - end + let known = 1 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -171,6 +172,7 @@ function GetJavascriptIndent() if known && b:js_cache[3] let known = indent(b:js_cache[0]) - b:js_cache[3] endif + let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' From 174d94e6f097851d495ba5cf0f8f537a9bcade62 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 00:04:25 -0700 Subject: [PATCH 342/929] produce cindent-like --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5cba356a..100f8b9e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -182,7 +182,7 @@ function GetJavascriptIndent() call cursor(b:js_cache[1],b:js_cache[2]) let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sat, 3 Sep 2016 12:18:56 -0700 Subject: [PATCH 343/929] performance refactor --- indent/javascript.vim | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 100f8b9e..f3c37eca 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -179,25 +179,21 @@ function GetJavascriptIndent() return indent(num) endif - call cursor(b:js_cache[1],b:js_cache[2]) let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@' && - \ l:line !~ s:line_pre . '{') - let ind = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset - let b:js_cache[3] = ind - return ind + known + if ((l:line =~# g:javascript_opfirst || pline !~# s:expr_case . s:line_term && pline =~# g:javascript_continuation) || + \ s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && + \ l:line !~ s:line_pre . '{') && cursor(b:js_cache[1],b:js_cache[2]) + 2 && (num == 0 || s:IsBlock()) + let b:js_cache[3] = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + return b:js_cache[3] + known elseif num > 0 - let ind = indent(num) + s:sw() + switch_offset - let b:js_cache[3] = ind - return ind + known + let b:js_cache[3] = indent(num) + s:sw() + switch_offset + return b:js_cache[3] + known endif endfunction From 0a3bb524283eb4777cbd86322f03b5a2ee266e91 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 13:07:30 -0700 Subject: [PATCH 344/929] 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 f3c37eca..b5231e44 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -188,7 +188,7 @@ function GetJavascriptIndent() " most significant, find the indent amount if ((l:line =~# g:javascript_opfirst || pline !~# s:expr_case . s:line_term && pline =~# g:javascript_continuation) || \ s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && - \ l:line !~ s:line_pre . '{') && cursor(b:js_cache[1],b:js_cache[2]) + 2 && (num == 0 || s:IsBlock()) + \ l:line !~ s:line_pre . '{') && (num == 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) let b:js_cache[3] = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset return b:js_cache[3] + known elseif num > 0 From cc9bd56e8f857fbc7a4e59c73dbeec7481182b51 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 13:29:16 -0700 Subject: [PATCH 345/929] 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 b5231e44..07800524 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -62,10 +62,10 @@ let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,:?^%|*&]\|\/[^/*]\|\([-.+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,?^%|*&]\|\/[^/*]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<=,.?/*:^%|&]\|+\@\|\ Date: Sat, 3 Sep 2016 16:43:43 -0700 Subject: [PATCH 346/929] deprecate options --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 662a2006..d2a81dd5 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,8 @@ variables: ## Indentation Specific * `:h cino-:` -* End-of-line continuations : `g:javascript_continuation` ( slightly complicated, look at the source code ) -* Start-of-line continuations : `g:javascript_opfirst` ( same as above ) +* End-of-line continuations : `g:javascript_continuation` ( deprecated ) +* Start-of-line continuations : `g:javascript_opfirst` ( deprecated ) ## Contributing From 8711b66df9014f6032f8f77a0b825ce669aa181c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 17:16:28 -0700 Subject: [PATCH 347/929] remove variables from readme --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index d2a81dd5..1cd79f4c 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,6 @@ variables: ## Indentation Specific * `:h cino-:` -* End-of-line continuations : `g:javascript_continuation` ( deprecated ) -* Start-of-line continuations : `g:javascript_opfirst` ( deprecated ) ## Contributing From bf74844aa2b3a79e9f86139363f267efd1a6fdb5 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 22:02:43 -0700 Subject: [PATCH 348/929] fix cached blank line problem --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 07800524..d74eed5b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -170,7 +170,7 @@ function GetJavascriptIndent() endif if known && b:js_cache[3] - let known = indent(b:js_cache[0]) - b:js_cache[3] + let known = prevnonblank(b:js_cache[0]) == b:js_cache[0] ? indent(b:js_cache[0]) - b:js_cache[3] : 0 endif let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] From 0586678395b756da7e554d62df872757fe3c1778 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Sep 2016 22:34:48 -0700 Subject: [PATCH 349/929] far better version of last commit --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d74eed5b..6155c5cd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -170,7 +170,7 @@ function GetJavascriptIndent() endif if known && b:js_cache[3] - let known = prevnonblank(b:js_cache[0]) == b:js_cache[0] ? indent(b:js_cache[0]) - b:js_cache[3] : 0 + let known = indent(lnum) - b:js_cache[3] endif let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] From 22d0e64ee15c906685cab631309e83882d692e38 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 00:04:33 -0700 Subject: [PATCH 350/929] more performance and bugfixes --- indent/javascript.vim | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6155c5cd..ec6dda4e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -154,12 +154,15 @@ function GetJavascriptIndent() "}}} let known = 0 + let pcounts = [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) - if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && - \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) - let known = 1 + if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + \ (b:js_cache[0] > l:lnum || map(pcounts,'s:Balanced(l:lnum)')[0] > 0) + if pcounts[0] > 0 + let known = 1 + end let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -170,12 +173,13 @@ function GetJavascriptIndent() endif if known && b:js_cache[3] - let known = indent(lnum) - b:js_cache[3] + let known = indent(l:lnum) - b:js_cache[3] endif let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' + let b:js_cache[0] = 0 return indent(num) endif From 023e1d851e8eb4e94cb62a791660fd0b7ab59dd2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 00:20:37 -0700 Subject: [PATCH 351/929] other fixes with cache --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ec6dda4e..ba41a99a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -159,10 +159,10 @@ function GetJavascriptIndent() " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && - \ (b:js_cache[0] > l:lnum || map(pcounts,'s:Balanced(l:lnum)')[0] > 0) + \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) if pcounts[0] > 0 let known = 1 - end + endif let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : From 5f7e36a4a69723aee7824e051c8a4e2b166b180d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 00:34:57 -0700 Subject: [PATCH 352/929] formatting,date --- indent/javascript.vim | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ba41a99a..71ba0dea 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: August 20, 2016 +" Last Change: September 4, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -114,7 +114,7 @@ function s:Balanced(lnum) let open_{idx - 1} = open_{idx - 1} - 1 if open_{idx - 1} < 0 return 0 - end + endif endif endif let pos = match(l:line, '[][(){}]', pos + 1) @@ -160,9 +160,7 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) - if pcounts[0] > 0 - let known = 1 - endif + let known = pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -183,7 +181,6 @@ function GetJavascriptIndent() return indent(num) endif - let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sun, 4 Sep 2016 09:47:48 -0700 Subject: [PATCH 353/929] small changes --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 71ba0dea..58b06c53 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -143,6 +143,7 @@ function GetJavascriptIndent() if l:lnum == 0 return 0 endif + let pline = getline(l:lnum) if (l:line =~# s:expr_case) let cpo_switch = &cpo @@ -158,7 +159,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 b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && pline !~ '}' \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) let known = pcounts[0] > 0 let num = b:js_cache[1] @@ -177,11 +178,10 @@ function GetJavascriptIndent() let b:js_cache[:2] = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] if l:line =~ s:line_pre . '[])}]' - let b:js_cache[0] = 0 return indent(num) endif - let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sun, 4 Sep 2016 10:02:44 -0700 Subject: [PATCH 354/929] fix --- indent/javascript.vim | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 58b06c53..409a02f3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -143,7 +143,6 @@ function GetJavascriptIndent() if l:lnum == 0 return 0 endif - let pline = getline(l:lnum) if (l:line =~# s:expr_case) let cpo_switch = &cpo @@ -159,8 +158,8 @@ 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 b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && b:js_cache[0] && pline !~ '}' - \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) + if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + \ (getline(l:lnum) !~ s:line_pre . '}' && map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) let known = pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' @@ -181,7 +180,7 @@ function GetJavascriptIndent() return indent(num) endif - let pline = pline =~# s:expr_case ? pline : substitute(pline, '\%(:\@ Date: Sun, 4 Sep 2016 10:10:33 -0700 Subject: [PATCH 355/929] cleaning --- indent/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 409a02f3..fe4f6766 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -143,6 +143,7 @@ function GetJavascriptIndent() if l:lnum == 0 return 0 endif + let pline = getline(l:lnum) if (l:line =~# s:expr_case) let cpo_switch = &cpo @@ -159,7 +160,7 @@ function GetJavascriptIndent() " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && - \ (getline(l:lnum) !~ s:line_pre . '}' && map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) + \ (pline !~ s:line_pre . '}' && map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) let known = pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' @@ -180,7 +181,7 @@ function GetJavascriptIndent() return indent(num) endif - let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@ Date: Sun, 4 Sep 2016 10:47:56 -0700 Subject: [PATCH 356/929] cleaning --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index fe4f6766..abcb2f3d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -143,7 +143,6 @@ function GetJavascriptIndent() if l:lnum == 0 return 0 endif - let pline = getline(l:lnum) if (l:line =~# s:expr_case) let cpo_switch = &cpo @@ -160,7 +159,7 @@ function GetJavascriptIndent() " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && - \ (pline !~ s:line_pre . '}' && map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) + \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) let known = pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' @@ -181,7 +180,7 @@ function GetJavascriptIndent() return indent(num) endif - let pline = pline =~# s:expr_case ? pline : substitute(pline, '\%(:\@ Date: Sun, 4 Sep 2016 13:15:48 -0700 Subject: [PATCH 357/929] small change --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index abcb2f3d..b603af8f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -160,7 +160,7 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) - let known = pcounts[0] > 0 + let known = l:lnum == b:js_cache[0] && pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : From 46b6dd514bc8092225dcb43d3807b5ccab28a462 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 13:24:07 -0700 Subject: [PATCH 358/929] allow blank line in adjustment calc --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b603af8f..ebd218cd 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -160,7 +160,7 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) - let known = l:lnum == b:js_cache[0] && pcounts[0] > 0 + let known = l:lnum == prevnonblank(b:js_cache[0]) && pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : From 4d7a4227e874af6d6ff738dbcc38acc6141e9e6b Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 16:50:47 -0700 Subject: [PATCH 359/929] superfluous condition --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ebd218cd..eb8db924 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -158,7 +158,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 b:js_cache[0] && b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) let known = l:lnum == prevnonblank(b:js_cache[0]) && pcounts[0] > 0 let num = b:js_cache[1] From 39f09ee50941f6373fa66a06de42751411d4c2a7 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Sep 2016 17:07:00 -0700 Subject: [PATCH 360/929] simplify assignment --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index eb8db924..f0cca94d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -109,9 +109,9 @@ function s:Balanced(lnum) if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom let idx = stridx('(){}[]', l:line[pos]) if idx % 2 == 0 - let open_{idx} = open_{idx} + 1 + let open_{idx} += 1 else - let open_{idx - 1} = open_{idx - 1} - 1 + let open_{idx - 1} -= 1 if open_{idx - 1} < 0 return 0 endif From 0134b36de5dc7f8154f64a38647951e3f9e68cc2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Sep 2016 19:06:00 -0700 Subject: [PATCH 361/929] little optimizations (#627) * little optimizations * extra parens --- indent/javascript.vim | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f0cca94d..d214f29b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -38,7 +38,7 @@ else endif let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' -let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:' +let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|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\)' @@ -180,15 +180,16 @@ function GetJavascriptIndent() return indent(num) endif - let pline = getline(l:lnum) =~# s:expr_case ? getline(l:lnum) : substitute(getline(l:lnum), '\%(:\@' && - \ l:line !~ s:line_pre . '{') && (num == 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) + \ l:line !~ s:line_pre . '{' let b:js_cache[3] = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset return b:js_cache[3] + known elseif num > 0 From e69cc169119e0779b6edaf03e0f0dd4faa9fa074 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Sep 2016 21:43:48 -0700 Subject: [PATCH 362/929] no adjustment in block statements This wasn't working due to the fluctuating indent possible in blocks. --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d214f29b..ae211c7a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -191,7 +191,7 @@ function GetJavascriptIndent() \ s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{' let b:js_cache[3] = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset - return b:js_cache[3] + known + return b:js_cache[3] elseif num > 0 let b:js_cache[3] = indent(num) + s:sw() + switch_offset return b:js_cache[3] + known From a7e64a92ad196e09f03722fab942e0a13273df2a Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Sep 2016 22:00:58 -0700 Subject: [PATCH 363/929] don't let variable in block --- indent/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ae211c7a..a6d84d1d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -190,8 +190,7 @@ function GetJavascriptIndent() \ (num == 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) || \ s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{' - let b:js_cache[3] = (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset - return b:js_cache[3] + return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 let b:js_cache[3] = indent(num) + s:sw() + switch_offset return b:js_cache[3] + known From 89b5505ab2485cd6c84b68af582a84b3d5825322 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Sep 2016 22:10:00 -0700 Subject: [PATCH 364/929] Allow any comment or empty in adjustment --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a6d84d1d..6bf22c8a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -160,7 +160,7 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) - let known = l:lnum == prevnonblank(b:js_cache[0]) && pcounts[0] > 0 + let known = pcounts[0] > 0 let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : From 0ab4b1d1838badea13314c5919f2897706ae4e70 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Sep 2016 22:27:14 -0700 Subject: [PATCH 365/929] small fix --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 6bf22c8a..da2e6733 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -186,14 +186,14 @@ function GetJavascriptIndent() \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:sw() : 1)) " most significant, find the indent amount - if (l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation) && - \ (num == 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) || + let isOp = l:line =~# g:javascript_opfirst || pline =~# g:javascript_continuation + if isOp && (num == 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) || \ s:OneScope(l:lnum,pline,0) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 let b:js_cache[3] = indent(num) + s:sw() + switch_offset - return b:js_cache[3] + known + return b:js_cache[3] + (isOp ? known : 0) endif endfunction From 81d85029ae43bf7cd831ae8d8d772f2be31206b8 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 8 Sep 2016 00:00:16 -0700 Subject: [PATCH 366/929] refactor adjustment and simplify since the adjustment wasn't working well in blocks with blanks or comments, and there is never a continuation in !blocks this is far more simple --- indent/javascript.vim | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index da2e6733..f64f80c0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -125,7 +125,7 @@ endfunction function GetJavascriptIndent() if !exists('b:js_cache') - let b:js_cache = [0,0,0,0] + let b:js_cache = [0,0,0] endif " Get the current line. let l:line = getline(v:lnum) @@ -153,14 +153,11 @@ function GetJavascriptIndent() endif "}}} - let known = 0 - let pcounts = [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) if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && - \ (map(pcounts,'s:Balanced(l:lnum)')[0] > 0 || b:js_cache[0] > l:lnum) - let known = pcounts[0] > 0 + \ (s:Balanced(l:lnum) > 0 || b:js_cache[0] > l:lnum) let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -170,11 +167,7 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW',2000) endif - if known && b:js_cache[3] - let known = indent(l:lnum) - b:js_cache[3] - endif - - let b:js_cache[:2] = [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) @@ -192,8 +185,7 @@ function GetJavascriptIndent() \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 - let b:js_cache[3] = indent(num) + s:sw() + switch_offset - return b:js_cache[3] + (isOp ? known : 0) + return isOp && num < l:lnum ? indent(l:lnum) : indent(num) + s:sw() + switch_offset endif endfunction From b53274d98e7a16d492b07b23786279e390ec2376 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 8 Sep 2016 16:52:58 -0700 Subject: [PATCH 367/929] more small improvements --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f64f80c0..b98d9f00 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -157,7 +157,7 @@ function GetJavascriptIndent() " same scope or starts a new one, unless if it closed a scope. call cursor(v:lnum,1) if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && - \ (s:Balanced(l:lnum) > 0 || b:js_cache[0] > l:lnum) + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -174,13 +174,13 @@ function GetJavascriptIndent() endif let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), '\%(:\@' && \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset From 91314f3f30a48618ca0ff5dd575cbc17c9199d40 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 8 Sep 2016 17:24:09 -0700 Subject: [PATCH 368/929] fix objects after ternary ':' this will not be an issue since nobody uses labels for simple blocks, and if they do it is adjustable --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b98d9f00..ea6cf2d7 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,8 +83,8 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Thu, 8 Sep 2016 19:31:56 -0700 Subject: [PATCH 369/929] fix blocks after case statement --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ea6cf2d7..0ec7c944 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -84,7 +84,7 @@ endfunction function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( \ '\C\%(\\|\*\@ Date: Thu, 8 Sep 2016 19:33:33 -0700 Subject: [PATCH 370/929] remove 1 char --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0ec7c944..f90e1217 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -83,7 +83,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Thu, 8 Sep 2016 22:51:18 -0700 Subject: [PATCH 371/929] allow bind op as line end continuation --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f90e1217..4dbf5d88 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -65,7 +65,7 @@ if !exists('g:javascript_opfirst') let g:javascript_opfirst = '\%([<>,?^%|*&]\|\/[^/*]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') - let g:javascript_continuation = '\%([<=,.?/*^%|&]\|:\@\|\ Date: Fri, 9 Sep 2016 21:11:19 -0700 Subject: [PATCH 372/929] small script function changes (#628) the code is now much less embarassing --- indent/javascript.vim | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4dbf5d88..faf592b3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -71,20 +71,19 @@ endif let g:javascript_opfirst = s:line_pre . g:javascript_opfirst let g:javascript_continuation .= s:line_term -function s:OneScope(lnum,text,add) +function s:OneScope(lnum,text) return a:text =~# '\%(\\)' . s:line_term ? 'no b' : - \ ((a:add && a:text =~ s:line_pre . '$' && search('\%' . s:PrevCodeLine(a:lnum - 1) . 'l.)' . s:line_term)) || - \ cursor(a:lnum, match(a:text, ')' . s:line_term)) > -1) && - \ s:GetPair('(', ')', 'cbW', 100) > 0 && search('\C\l\+\_s*\%#','bW') && - \ (a:add || ((expand('') !=# 'while' || !s:GetPair('\C\', '\C\','nbW',100)) && - \ (expand('') !=# 'each' || search('\C\') : '' + \ 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) && + \ (expand('') !=# 'each' || search('\C\') : '' endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( \ '\C\%(\\|\*\@ 0 && search('\C\' && + \ s:OneScope(l:lnum,pline) =~# '\<\%(for\|each\|if\|let\|no\sb\|w\%(hile\|ith\)\)\>' && \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 From 0b6aad4c4051a4a4a9c2efe6499cd3adbc6dc3ba Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Sep 2016 13:43:32 -0700 Subject: [PATCH 373/929] speed increase attempt (#629) --- indent/javascript.vim | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index faf592b3..d7c5f208 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -47,13 +47,23 @@ 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."'" +function s:skip_func(lnum) + if !s:free || getline(line('.')) =~ '[''/"\\]' + 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:looksyn = s:free ? line('.') : s:looksyn + return !s:free +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 @@ -74,8 +84,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 @@ -131,7 +141,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 @@ -154,6 +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] = [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) @@ -161,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',2000) + let num = s:GetPair(pattern[0],pattern[1],'bW','s:skip_func(s:looksyn)',2000) else - let num = s:GetPair('[({[]','[])}]','bW',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('.')] @@ -175,7 +186,7 @@ function GetJavascriptIndent() let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), '\%(:\@ 0 && search('\C\ 0 && search('\C\ Date: Tue, 13 Sep 2016 11:14:42 -0700 Subject: [PATCH 374/929] copy indent if in same scope only --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d7c5f208..10ae987d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -164,10 +164,10 @@ 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] = [v:lnum - 1,1] + let [s:looksyn,s:free,pcounts] = [v:lnum - 1,1,[0]] 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) + \ (b:js_cache[0] > l:lnum || map(pcounts,'s:Balanced(l:lnum)')[0] > 0) let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -197,7 +197,7 @@ function GetJavascriptIndent() \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 - return isOp && num < l:lnum ? indent(l:lnum) : indent(num) + s:sw() + switch_offset + return isOp && num < l:lnum && pcounts[0] > 0 ? indent(l:lnum) : indent(num) + s:sw() + switch_offset endif endfunction From faf6f67efe6eacc772c6d52617b48e7ac0d8523f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 13 Sep 2016 12:05:38 -0700 Subject: [PATCH 375/929] remove indent copy I can improve it in the future, but it isn't that great now --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 10ae987d..04670498 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -164,10 +164,10 @@ 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,pcounts] = [v:lnum - 1,1,[0]] + 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 || map(pcounts,'s:Balanced(l:lnum)')[0] > 0) + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum) > 0) let num = b:js_cache[1] elseif syns != '' && l:line[0] =~ '\s' let pattern = syns =~? 'block' ? ['{','}'] : syns =~? 'jsparen' ? ['(',')'] : @@ -197,7 +197,7 @@ function GetJavascriptIndent() \ l:line !~ s:line_pre . '{' return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset elseif num > 0 - return isOp && num < l:lnum && pcounts[0] > 0 ? indent(l:lnum) : indent(num) + s:sw() + switch_offset + return indent(num) + s:sw() + switch_offset endif endfunction From 4e2e37755a0393fae9b7844056958eb969527d28 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Mon, 12 Sep 2016 15:09:22 -0500 Subject: [PATCH 376/929] Add highlight group specifically for object colons --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 8cf3e627..cbe8d339 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -75,11 +75,12 @@ endif syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue +syntax match jsObjectColon contained /:/ skipwhite skipempty syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend syntax match jsObjectSeparator contained /,/ -syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=@jsExpression extend +syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName @@ -285,6 +286,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFloat Float HiLink jsBooleanTrue Boolean HiLink jsBooleanFalse Boolean + HiLink jsObjectColon jsNoise HiLink jsNoise Noise HiLink jsBrackets Noise HiLink jsParens Noise From 355d6650d825849a3d43b3a102c0d92b4fb0765d Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 02:14:43 -0500 Subject: [PATCH 377/929] Add individual syntax groups for various parenthesis Many of these are noise, but I don't consider function parenthesis to be so. Rather than creating a non-function parens group, I just created a group for each type and then linked them all to `jsParens` so that everything will behave as it currently does for users who are using `jsParens`. --- syntax/javascript.vim | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index cbe8d339..8070d488 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -136,10 +136,10 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus "" Code blocks syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold -syntax region jsParenIfElse contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold -syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold -syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold -syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold +syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold +syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold +syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold @@ -233,6 +233,10 @@ if version >= 508 || !exists("did_javascript_syn_inits") endif HiLink jsComment Comment HiLink jsEnvComment PreProc + HiLink jsParensIfElse jsParens + HiLink jsParensRepeat jsParens + HiLink jsParensSwitch jsParens + HiLink jsParensCatch jsParens HiLink jsCommentTodo Todo HiLink jsString String HiLink jsObjectKeyString String From 615f83754490c72f93eeac29f86b31c3b77f4b01 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 02:33:19 -0500 Subject: [PATCH 378/929] Add more specialized groups for the various braces Similar to the parens from the previous commit, this will allow users to customize the look of various types of braces rather than having to go all-in on non-function braces. ------------------------------------------------------------------------------ Actions: * Fix #589 --- syntax/javascript.vim | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 8070d488..3f9cb9b5 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -41,12 +41,12 @@ syntax keyword jsModuleKeywords contained import syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault syntax keyword jsModuleOperators contained from syntax keyword jsModuleOperators contained as -syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment +syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment syntax match jsModuleAsterisk contained /*/ syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression -syntax region jsExportBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment +syntax region jsExportBlock contained matchgroup=jsExportBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend @@ -98,17 +98,17 @@ exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal " Statement Keywords syntax keyword jsStatement contained break continue with yield debugger syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse -syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsBlock +syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat -syntax keyword jsDo do skipwhite skipempty nextgroup=jsBlock +syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock syntax keyword jsLabel contained case default syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock -syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsBlock +syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw syntax keyword jsAsyncKeyword async await -syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsBlock +syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock " Keywords syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat @@ -136,16 +136,19 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus "" Code blocks syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold -syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold -syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsBlock extend fold +syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold +syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsIfElseBlock contained matchgroup=jsIfElseBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold -syntax region jsTryCatchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold -syntax region jsSwitchBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsLabel,jsSwitchColon extend fold +syntax region jsTryCatchBlock contained matchgroup=jsTryCatchBraces start=/{/ end=/}/ contains=@jsAll skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold +syntax region jsFinallyBlock contained matchgroup=jsFinallyBraces start=/{/ end=/}/ contains=@jsAll extend fold +syntax region jsSwitchBlock contained matchgroup=jsSwitchBraces start=/{/ end=/}/ contains=@jsAll,jsLabel,jsSwitchColon extend fold +syntax region jsRepeatBlock contained matchgroup=jsRepeatBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold @@ -299,8 +302,15 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFuncParens Noise HiLink jsClassBraces Noise HiLink jsClassNoise Noise + HiLink jsIfElseBraces jsBraces + HiLink jsTryCatchBraces jsBraces + HiLink jsModuleBraces jsBraces HiLink jsObjectBraces Noise HiLink jsObjectSeparator Noise + HiLink jsFinallyBraces jsBraces + HiLink jsRepeatBraces jsBraces + HiLink jsSwitchBraces jsBraces + HiLink jsExportBraces jsBraces HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsTemplateBraces jsBraces From 430b5284ff69e07977ead013a3caf7b66ee0414c Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 02:58:24 -0500 Subject: [PATCH 379/929] Removed 'contained' constraint from 'this' keyword highlight `this` can be used outside of any other block and thus needs to be highlighted there. ------------------------------------------------------------------------------ Actions: * Fix #610 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3f9cb9b5..69311f69 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -92,7 +92,7 @@ exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '') exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '') exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '') -exe 'syntax keyword jsThis this contained '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') +exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '') exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '') " Statement Keywords From aa2fb9015918eae56e9a11b44e281ee016b12c63 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 03:05:21 -0500 Subject: [PATCH 380/929] Add section comments --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 69311f69..6c58163b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -74,6 +74,7 @@ else endif syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod +" Objects syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue syntax match jsObjectColon contained /:/ skipwhite skipempty syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue @@ -133,7 +134,7 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT " HTML events and internal variables syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize -"" Code blocks +" Code blocks syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold @@ -171,6 +172,7 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipe exe 'syntax match jsFunction /\/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +" Classes syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty From 20bb09ae6cdade7bb973539e9fa40e35280baff0 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 03:19:04 -0500 Subject: [PATCH 381/929] Fix decorator syntax highlighting There were a few issues here: * Class decorators weren't being highlighted since they exist outside of any other group * Decorators which take a parameter didn't have their parameters property highlighted * Decorators which decorated a function within an object weren't being highlighted -------------------------------------------------------------------------------- Actions: * Fixes #590 * Fixes #572 --- syntax/javascript.vim | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 6c58163b..d0f88abf 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -137,6 +137,7 @@ syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus " Code blocks syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold +syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold @@ -152,7 +153,7 @@ syntax region jsSwitchBlock contained matchgroup=jsSwitchBraces s syntax region jsRepeatBlock contained matchgroup=jsRepeatBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold -syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression extend fold +syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator extend fold syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ @@ -177,8 +178,6 @@ syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup -syntax match jsDecorator contained "@" nextgroup=jsDecoratorFunction -syntax match jsDecoratorFunction contained "[a-zA-Z_][a-zA-Z0-9_.]*" syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend @@ -211,6 +210,10 @@ syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=j syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend +" Decorators +syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction +syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator + if exists("javascript_plugin_jsdoc") runtime extras/jsdoc.vim " NGDoc requires JSDoc From 801aad41bd9a52015fff99ebcc92c9db9c3baef8 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 03:21:26 -0500 Subject: [PATCH 382/929] Change highlight link for decorators to 'Tag' This makes quite a bit more sense to me since decorators are a type of annotation to the function below. --- syntax/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index d0f88abf..c4ee3394 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -326,8 +326,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleKeywords Include HiLink jsModuleOperators Include HiLink jsModuleDefault Include - HiLink jsDecorator Special - HiLink jsDecoratorFunction Special + HiLink jsDecorator Tag + HiLink jsDecoratorFunction Tag HiLink jsFuncArgOperator jsFuncArgs HiLink jsModuleAsterisk Noise HiLink jsClassProperty jsObjectKey From 6c78b77ad48b76b10d9054c7b65aba79acec58f4 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 03:28:59 -0500 Subject: [PATCH 383/929] Whitespace --- syntax/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index c4ee3394..e3e2373d 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -112,13 +112,13 @@ syntax keyword jsAsyncKeyword async await syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock " Keywords -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat -syntax keyword jsGlobalNodeObjects module exports global process -syntax match jsGlobalNodeObjects /require/ contains=jsFuncCall -syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError -syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat +syntax keyword jsGlobalNodeObjects module exports global process +syntax match jsGlobalNodeObjects /require/ contains=jsFuncCall +syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError +syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval " DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? -syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public +syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public " DISCUSS: Should we really be matching stuff like this? " DOM2 Objects From 0cb2e1134d397b9a06d57ef8a1bae4f666630a25 Mon Sep 17 00:00:00 2001 From: Jeff Felchner Date: Tue, 13 Sep 2016 03:52:14 -0500 Subject: [PATCH 384/929] Change ClassKeywords to Keywords instead of Define It's right there in the name: "Keyword" and should be highlighted as such. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index e3e2373d..b6b1ba51 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -288,7 +288,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsOperator Operator HiLink jsOf Operator HiLink jsStorageClass StorageClass - HiLink jsClassKeywords Structure + HiLink jsClassKeywords Keyword HiLink jsThis Special HiLink jsSuper Constant HiLink jsNan Number From 5c4de0c43d23a98cf382f045aff270977c3bb12c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 13 Sep 2016 16:05:06 -0700 Subject: [PATCH 385/929] slight changes to the skip_func (#632) This is what I was initially intending to do. this version works mostly the same --- indent/javascript.vim | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 04670498..1591dac0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -48,10 +48,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."'" function s:skip_func(lnum) - if !s:free || getline(line('.')) =~ '[''/"\\]' - return eval(s:skip_expr) - endif - if search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) + if !s:free || getline(line('.')) =~ '[''/"\\]' || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) let s:free = !eval(s:skip_expr) endif let s:looksyn = s:free ? line('.') : s:looksyn From d5dbecb6e9084052573c9eb7d6de9536b9f2034e Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 14 Sep 2016 15:21:10 -0700 Subject: [PATCH 386/929] Group link fixes --- syntax/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b6b1ba51..56e7c6d3 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -326,8 +326,9 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsModuleKeywords Include HiLink jsModuleOperators Include HiLink jsModuleDefault Include - HiLink jsDecorator Tag - HiLink jsDecoratorFunction Tag + HiLink jsDecorator Special + HiLink jsDecoratorFunction Function + HiLink jsParensDecorator jsParens HiLink jsFuncArgOperator jsFuncArgs HiLink jsModuleAsterisk Noise HiLink jsClassProperty jsObjectKey From a59f5cb991954dbe4d094dfe1f67bedcc27ea549 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 14 Sep 2016 15:41:53 -0700 Subject: [PATCH 387/929] First pass at improved async/await support --- syntax/javascript.vim | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 56e7c6d3..e6503357 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -84,7 +84,7 @@ syntax match jsObjectSeparator contained /,/ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ -syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName +syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ contains=jsAsyncKeyword skipwhite skipempty nextgroup=jsObjectFuncName syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue @@ -108,7 +108,8 @@ syntax keyword jsTry try skipwhite skipempty nextgro syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw -syntax keyword jsAsyncKeyword async await +syntax keyword jsAsyncKeyword async skipwhite skipempty nextgroup=jsFunction,jsFuncName +syntax keyword jsAwaitKeyword await syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock " Keywords @@ -176,7 +177,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc " Classes syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty +syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ contains=jsAsyncKeyword skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression @@ -226,8 +227,8 @@ if exists("javascript_plugin_flow") runtime extras/flow.vim endif -syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword +syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsAsyncKeyword,jsAwaitKeyword +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -275,6 +276,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFinally Exception HiLink jsCatch Exception HiLink jsAsyncKeyword Keyword + HiLink jsAwaitKeyword Keyword HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction From d3e952cf8ddb556233638915c79be57c752cda7d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 01:41:39 -0700 Subject: [PATCH 388/929] multi-braceless statements (#636) * multi-braceless statements This changes: ``` if (1) for (;;) i += l ``` to: ``` if (1) for (;;) i += l ``` --- indent/javascript.vim | 60 +++++++++++++++++++++++++++++++------------ 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1591dac0..b890a43a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -75,15 +75,38 @@ if !exists('g:javascript_continuation') let g:javascript_continuation = '\%([<=,.?/*^%|&:]\|+\@\|\\)' . s:line_term ? 'no b' : + return cursor(a:lnum, match(' ' . a:text, '\%(\\)' . s:line_term)) > -1 || \ 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('') !=# 'each' || search('\C\') : '' + \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && + \ search('\C\<\%(for\%(\_s\+each\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') +endfunction + +function s:iscontOne(i,num,cont) + let [l:i, l:cont, l:num] = [a:i, a:cont, a:num > 0 ? a:num : 1] + let pind = a:num > 0 ? indent(l:num) : -s:sw() + let ind = indent(l:i) + (!l:cont ? s:sw() : 0) + let bL = 0 + while l:i >= l:num && (!l:cont || ind > pind + s:sw()) + if indent(l:i) < ind " first line always true for !cont, false for !!cont + if s:OneScope(l:i,substitute(getline(l:i),':\@') ==# 'while' && searchpair(s:line_pre . '\C\','','\C\','bW',s:skip_expr,l:num,100) > 0 + return 0 + endif + let bL += 1 + let l:cont = 0 + let l:i = line('.') + elseif !l:cont + break + endif + let ind = indent(l:i) + endif + let l:i = s:PrevCodeLine(l:i - 1) + endwhile + return bL * s:sw() endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader @@ -138,8 +161,8 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc.{{{2 - if (l:line !~ '^[''"]' && syns =~? '\%(string\|template\)') || - \ (l:line !~ '^\s*[/*]' && syns =~? s:syng_comment) + if l:line !~ '^[''"]' && syns =~? '\%(string\|template\)' || + \ l:line !~ '^\s*[/*]' && syns =~? s:syng_comment return -1 endif if l:line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment @@ -150,7 +173,7 @@ function GetJavascriptIndent() return 0 endif - if (l:line =~# s:expr_case) + if l:line =~# s:expr_case let cpo_switch = &cpo set cpo+=% let ind = cindent(v:lnum) @@ -176,11 +199,16 @@ function GetJavascriptIndent() let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - if l:line =~ s:line_pre . '[])}]' + let l:line = substitute(l:line,s:line_pre,'','') + if l:line =~ '^[])}]' return indent(num) endif + call cursor(v:lnum,1) + if l:line =~# '^while\>' && searchpair(s:line_pre . '\C\','','\C\','bW',s:skip_expr,num,100) > 0 + return indent(line('.')) + endif - let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), '\%(:\@ 0 && search('\C\' && - \ l:line !~ s:line_pre . '{' - return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + let bL = s:iscontOne(l:lnum,num,isOp) + let bL = bL ? bL - (l:line =~ '^{') * s:sw() : bL + if isOp && (num <= 0 || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) + return (num > 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + bL elseif num > 0 - return indent(num) + s:sw() + switch_offset + return indent(num) + s:sw() + switch_offset + bL endif - + return bL endfunction From ebd222b3dfd05878145be3488573745aa160de70 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 04:00:10 -0700 Subject: [PATCH 389/929] date,format --- indent/javascript.vim | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b890a43a..42eb0882 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -2,7 +2,7 @@ " Language: Javascript " Maintainer: vim-javascript community " URL: https://github.com/pangloss/vim-javascript -" Last Change: September 4, 2016 +" Last Change: September 18, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -112,12 +112,10 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@\|\*\@ Date: Sun, 18 Sep 2016 04:06:48 -0700 Subject: [PATCH 390/929] Update javascript.vim --- indent/javascript.vim | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 42eb0882..836fc6d6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -97,8 +97,7 @@ function s:iscontOne(i,num,cont) return 0 endif let bL += 1 - let l:cont = 0 - let l:i = line('.') + let [l:cont, l:i] = [0, line('.')] elseif !l:cont break endif @@ -148,7 +147,6 @@ function s:Balanced(lnum) endwhile return (!open_4 + !open_2 + !open_0) - 2 endfunction -" }}} function GetJavascriptIndent() if !exists('b:js_cache') From 6426110f831bd2ab6459e87c5bffad99d18697e1 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 14:49:38 -0700 Subject: [PATCH 391/929] 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 836fc6d6..646954f2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -156,7 +156,7 @@ function GetJavascriptIndent() let l:line = getline(v:lnum) let syns = synIDattr(synID(v:lnum, 1, 0), 'name') - " start with strings,comments,etc.{{{2 + " start with strings,comments,etc. if l:line !~ '^[''"]' && syns =~? '\%(string\|template\)' || \ l:line !~ '^\s*[/*]' && syns =~? s:syng_comment return -1 From aa37199ecf040b7003f2d523b83f9ef0f04d25e3 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 15:41:46 -0700 Subject: [PATCH 392/929] change to searchpair helper --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 646954f2..8d5ced26 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -93,7 +93,7 @@ function s:iscontOne(i,num,cont) while l:i >= l:num && (!l:cont || ind > pind + s:sw()) if indent(l:i) < ind " first line always true for !cont, false for !!cont if s:OneScope(l:i,substitute(getline(l:i),':\@') ==# 'while' && searchpair(s:line_pre . '\C\','','\C\','bW',s:skip_expr,l:num,100) > 0 + if expand('') ==# 'while' && s:GetPair(s:line_pre . '\C\\%>'.l:num-1.'l','\C\','bW',s:skip_expr,100) > 0 return 0 endif let bL += 1 @@ -199,7 +199,7 @@ function GetJavascriptIndent() return indent(num) endif call cursor(v:lnum,1) - if l:line =~# '^while\>' && searchpair(s:line_pre . '\C\','','\C\','bW',s:skip_expr,num,100) > 0 + if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\\%>'.num-1.'l','\C\','bW',s:skip_expr,100) > 0 return indent(line('.')) endif From b2ded12588b35aa551240ec33e637f7ef04d52eb Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 16:02:55 -0700 Subject: [PATCH 393/929] change num <= 0 to 0 --- indent/javascript.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8d5ced26..83e889b6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -192,6 +192,7 @@ function GetJavascriptIndent() let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) endif + let num = num > 0 ? num : 0 let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] let l:line = substitute(l:line,s:line_pre,'','') @@ -199,13 +200,13 @@ function GetJavascriptIndent() return indent(num) endif call cursor(v:lnum,1) - if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\\%>'.num-1.'l','\C\','bW',s:skip_expr,100) > 0 + if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\\%>'.(num-!!num).'l','\C\','bW',s:skip_expr,100) > 0 return indent(line('.')) endif let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), ':\@ 0 && search('\C\ 0 ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + bL - elseif num > 0 + if isOp && (!num || cursor(b:js_cache[1],b:js_cache[2]) || s:IsBlock()) + return (num ? indent(num) : -s:sw()) + (s:sw() * 2) + switch_offset + bL + elseif num return indent(num) + s:sw() + switch_offset + bL endif return bL From 5df8b344a49c54be1bfe133a62f4fc00fc313bd7 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 16:15:26 -0700 Subject: [PATCH 394/929] more number conversion --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 83e889b6..2f09133a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -86,7 +86,7 @@ function s:OneScope(lnum,text) endfunction function s:iscontOne(i,num,cont) - let [l:i, l:cont, l:num] = [a:i, a:cont, a:num > 0 ? a:num : 1] + let [l:i, l:cont, l:num] = [a:i, a:cont, a:num ? a:num : 1] let pind = a:num > 0 ? indent(l:num) : -s:sw() let ind = indent(l:i) + (!l:cont ? s:sw() : 0) let bL = 0 From 3b38947f2f90d8bfa1522ecb67856238f305e606 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 18 Sep 2016 16:19:47 -0700 Subject: [PATCH 395/929] prev --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 2f09133a..30e64eb1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -87,7 +87,7 @@ endfunction function s:iscontOne(i,num,cont) let [l:i, l:cont, l:num] = [a:i, a:cont, a:num ? a:num : 1] - let pind = a:num > 0 ? indent(l:num) : -s:sw() + let pind = a:num ? indent(l:num) : -s:sw() let ind = indent(l:i) + (!l:cont ? s:sw() : 0) let bL = 0 while l:i >= l:num && (!l:cont || ind > pind + s:sw()) From ff5f3f14418765b487a9071db8f7ff72946f1fe1 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 19 Sep 2016 01:17:29 -0700 Subject: [PATCH 396/929] fix concat bug --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 30e64eb1..aee8e2c3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -93,7 +93,7 @@ function s:iscontOne(i,num,cont) while l:i >= l:num && (!l:cont || ind > pind + s:sw()) if indent(l:i) < ind " first line always true for !cont, false for !!cont if s:OneScope(l:i,substitute(getline(l:i),':\@') ==# 'while' && s:GetPair(s:line_pre . '\C\\%>'.l:num-1.'l','\C\','bW',s:skip_expr,100) > 0 + if expand('') ==# 'while' && s:GetPair(s:line_pre . '\C\\%>'.(l:num-1).'l','\C\','bW',s:skip_expr,100) > 0 return 0 endif let bL += 1 From 1219b150b063df8979ab48a4a2e6f3bb6e502840 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 20 Sep 2016 19:20:01 -0700 Subject: [PATCH 397/929] small skip_func improvements (#637) this will improve performance depending on the file. I will try and clean it a little --- indent/javascript.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index aee8e2c3..3ec4abe6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -48,11 +48,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."'" function s:skip_func(lnum) - if !s:free || getline(line('.')) =~ '[''/"\\]' || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) + if !s:free || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) let s:free = !eval(s:skip_expr) + let s:looksyn = s:free ? line('.') : s:looksyn + return !s:free endif - let s:looksyn = s:free ? line('.') : s:looksyn - return !s:free + let s:looksyn = line('.') + return getline(line('.')) =~ '[''/"\\]' && eval(s:skip_expr) endfunction if has('reltime') From afbe2844ee39d0c01a7b27214262d817550ea0c8 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 20 Sep 2016 22:41:36 -0700 Subject: [PATCH 398/929] more minor optimizations (#638) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 3ec4abe6..67006e35 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -54,7 +54,7 @@ function s:skip_func(lnum) return !s:free endif let s:looksyn = line('.') - return getline(line('.')) =~ '[''/"\\]' && eval(s:skip_expr) + return (search('\/','nbW',line('.')) || search('[''"\\]','nW',line('.'))) && eval(s:skip_expr) endfunction if has('reltime') From a7225e4bd1882236c5a7db10aadcdfca1de3b352 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 22 Sep 2016 02:07:40 -0700 Subject: [PATCH 399/929] Fix jsGlobalNodeObjects and jsFuncCall priority Give jsGlobalNodeObjects a higher priority that can therefore be targeted if desired. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 56e7c6d3..20b131b2 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -114,7 +114,7 @@ syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgro " Keywords syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat syntax keyword jsGlobalNodeObjects module exports global process -syntax match jsGlobalNodeObjects /require/ contains=jsFuncCall +syntax match jsGlobalNodeObjects /require/ containedin=jsFuncCall syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval " DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved? From d94ab71e2230896f0d5a30c3c812dcd4058cef3d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 22 Sep 2016 21:28:57 -0700 Subject: [PATCH 400/929] optimize top scope indentation speed (#640) makes a huge difference when not in a 'scope'. avoids checking the whole file * improve helper --- indent/javascript.vim | 61 +++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 67006e35..fb500d7d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -58,12 +58,12 @@ function s:skip_func(lnum) endfunction if has('reltime') - 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) + 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:000),a:time) endfunction else function s:GetPair(start,end,flags,...) - return searchpair(a:start,'',a:end,a:flags,0,max([prevnonblank(v:lnum) - 2000,0])) + return searchpair(a:start,'',a:end,a:flags,"line('.') < prevnonblank(v:lnum) - 2000 ? dummy : 0") endfunction endif @@ -88,14 +88,14 @@ function s:OneScope(lnum,text) endfunction function s:iscontOne(i,num,cont) - let [l:i, l:cont, l:num] = [a:i, a:cont, a:num ? a:num : 1] - let pind = a:num ? indent(l:num) : -s:sw() - let ind = indent(l:i) + (!l:cont ? s:sw() : 0) + 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 bL = 0 - while l:i >= l:num && (!l:cont || ind > pind + s:sw()) + while l:i >= l:num && (!l:cont || ind > pind + s:W) if indent(l:i) < ind " first line always true for !cont, false for !!cont if s:OneScope(l:i,substitute(getline(l:i),':\@') ==# 'while' && s:GetPair(s:line_pre . '\C\\%>'.(l:num-1).'l','\C\','bW',s:skip_expr,100) > 0 + if expand('') ==# 'while' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num) > 0 return 0 endif let bL += 1 @@ -107,7 +107,7 @@ function s:iscontOne(i,num,cont) endif let l:i = s:PrevCodeLine(l:i - 1) endwhile - return bL * s:sw() + return bL * s:W endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader @@ -136,7 +136,7 @@ function s:Balanced(lnum) while pos != -1 if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom let idx = stridx('(){}[]', l:line[pos]) - if idx % 2 == 0 + if !(idx % 2) let open_{idx} += 1 else let open_{idx - 1} -= 1 @@ -147,7 +147,7 @@ function s:Balanced(lnum) endif let pos = match(l:line, '[][(){}]', pos + 1) endwhile - return (!open_4 + !open_2 + !open_0) - 2 + return !(open_4 || open_2 || open_0) endfunction function GetJavascriptIndent() @@ -181,46 +181,51 @@ 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] = [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) - let num = b:js_cache[1] - 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)',2000) + if getline(l:lnum) !~ '^\S' + let [s:looksyn,s:free] = [v:lnum - 1,1] + if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) + let num = b:js_cache[1] + 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)',2000) + else + let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) + endif else - let num = s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) + let num = s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif - let num = num > 0 ? num : 0 + let num = (num > 0) * num let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] let l:line = substitute(l:line,s:line_pre,'','') if l:line =~ '^[])}]' - return indent(num) + return !!num * indent(num) endif call cursor(v:lnum,1) - if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\\%>'.(num-!!num).'l','\C\','bW',s:skip_expr,100) > 0 + if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,num) > 0 return indent(line('.')) endif + let s:W = s:sw() let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), ':\@ 0 && search('\C\ Date: Fri, 23 Sep 2016 20:03:19 -0700 Subject: [PATCH 401/929] normalize header in vim and current, date (#642) Any issues with this? It doesn't rlly mean anything, just something to satisfy vim/dev --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index fb500d7d..ff4851ab 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -1,8 +1,8 @@ " Vim indent file " Language: Javascript -" Maintainer: vim-javascript community +" Maintainer: Chris Paul ( https://github.com/bounceme ) " URL: https://github.com/pangloss/vim-javascript -" Last Change: September 18, 2016 +" Last Change: September 23, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') From fcdc1dcdb5256932330eb7bae16febbd43fb88d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Pr=C3=A9vost?= Date: Sat, 24 Sep 2016 19:29:46 -0400 Subject: [PATCH 402/929] Fix jsFlowTypeCustom regex to allow dots --- extras/flow.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index a1848830..028ea3fc 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -6,7 +6,7 @@ syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ syntax match jsFlowNoise contained /[:;,<>]/ syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object array bool class syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType -syntax match jsFlowTypeCustom contained /\k*/ skipwhite skipempty nextgroup=jsFlowGroup +syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGroup syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=// contains=@jsFlowCluster syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens From ce7c06c390a1ec6b8b770d2813232b3fe41c02dd Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 25 Sep 2016 00:04:30 -0700 Subject: [PATCH 403/929] simplify comments --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ff4851ab..d649c087 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -163,7 +163,7 @@ function GetJavascriptIndent() \ l:line !~ '^\s*[/*]' && syns =~? s:syng_comment return -1 endif - if l:line !~ '^\%(\/\*\|\s*\/\/\)' && syns =~? s:syng_comment + if l:line =~ '^\s*\*' && syns =~? s:syng_comment return cindent(v:lnum) endif let l:lnum = s:PrevCodeLine(v:lnum - 1) From 5453eb09dc7f79ca1aa49fd8dc9451d068a7e345 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 25 Sep 2016 00:27:20 -0700 Subject: [PATCH 404/929] more string/comment cleaning --- indent/javascript.vim | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d649c087..a092d9cf 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -159,13 +159,15 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc. - if l:line !~ '^[''"]' && syns =~? '\%(string\|template\)' || - \ l:line !~ '^\s*[/*]' && syns =~? s:syng_comment + if syns =~? s:syng_comment + if l:line =~ '^\s*\*' + return cindent(v:lnum) + elseif l:line !~ '^\s*\/' + return -1 + endif + elseif syns =~? '\%(string\|template\)' && l:line !~ '^[''"]' return -1 endif - if l:line =~ '^\s*\*' && syns =~? s:syng_comment - return cindent(v:lnum) - endif let l:lnum = s:PrevCodeLine(v:lnum - 1) if l:lnum == 0 return 0 From 02c8c644c306eb3675fdf9d0b556babd39e84d65 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 25 Sep 2016 00:50:34 -0700 Subject: [PATCH 405/929] remove rar --- indent/javascript.vim | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a092d9cf..665a558b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -42,9 +42,6 @@ let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|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\)' -" Regex of syntax group names that are strings or documentation. -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."'" function s:skip_func(lnum) @@ -159,7 +156,7 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc. - if syns =~? s:syng_comment + if syns =~? '\%(comment\|doc\)' if l:line =~ '^\s*\*' return cindent(v:lnum) elseif l:line !~ '^\s*\/' From dc678406de4352fd03c49dfb2b0dc32733bd1ce9 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 25 Sep 2016 13:37:41 -0700 Subject: [PATCH 406/929] more optimization (#646) --- indent/javascript.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 665a558b..c6d5e110 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -178,6 +178,8 @@ function GetJavascriptIndent() return ind endif + let l:line = substitute(l:line,s:line_pre,'','') + " 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) @@ -186,7 +188,10 @@ function GetJavascriptIndent() if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) let num = b:js_cache[1] - elseif syns != '' && l:line[0] =~ '\s' + 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) @@ -200,7 +205,6 @@ function GetJavascriptIndent() let num = (num > 0) * num let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - let l:line = substitute(l:line,s:line_pre,'','') if l:line =~ '^[])}]' return !!num * indent(num) endif From 92f1d98dbe740bdbb26b9595dab32b16320c641a Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 25 Sep 2016 20:09:43 -0700 Subject: [PATCH 407/929] switch accuracy and performance (#647) --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c6d5e110..e89e493d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -38,7 +38,7 @@ else endif let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' -let s:expr_case = s:line_pre . '\%(\%(case\>.\+\)\|default\)\s*:\C' +let s:expr_case = '\<\%(\%(case\>.\+\)\|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\)' @@ -170,7 +170,9 @@ function GetJavascriptIndent() return 0 endif - if l:line =~# s:expr_case + let l:line = substitute(l:line,s:line_pre,'','') + + if l:line =~# '^' . s:expr_case let cpo_switch = &cpo set cpo+=% let ind = cindent(v:lnum) @@ -178,8 +180,6 @@ function GetJavascriptIndent() return ind endif - let l:line = substitute(l:line,s:line_pre,'','') - " 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 6ecbda3b318f1e7178a4a59f4702af1fa9ce05e4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 26 Sep 2016 18:46:05 -0700 Subject: [PATCH 408/929] clean isBlock (#648) --- indent/javascript.vim | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e89e493d..f38b7183 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -109,9 +109,10 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() - return getline(line('.'))[col('.')-1] == '{' && !search( - \ '\C\%(\\|\*\@') !~# + \ '\<\%(var\|const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' + \ : !search('\C\%([-=~!<*+,./?^%|&\[(]\|=\@\)\_s*\%#','nbW') && + \ (search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. From d6b2fd599fd7e03952e854acfc1c4cee0c0b1da3 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 26 Sep 2016 19:20:31 -0700 Subject: [PATCH 409/929] change regex case --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f38b7183..d3e17d10 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: September 23, 2016 +" Last Change: September 26, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -109,9 +109,9 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() - return getline(line('.'))[col('.')-1] == '{' && !search('\') !~# + return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# \ '\<\%(var\|const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' - \ : !search('\C\%([-=~!<*+,./?^%|&\[(]\|=\@\)\_s*\%#','nbW') && + \ : !search('\%([-=~!<*+,./?^%|&\[(]\|=\@\)\_s*\%#','nbW') && \ (search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) endfunction From 77c4ae620420a3e9f88667b7df334ebdde2485ea Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 27 Sep 2016 16:28:14 -0700 Subject: [PATCH 410/929] better line cleaning (#649) --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d3e17d10..b8679f68 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -75,7 +75,7 @@ if !exists('g:javascript_continuation') endif let g:javascript_opfirst = '^' . g:javascript_opfirst -let g:javascript_continuation .= s:line_term +let g:javascript_continuation .= '$' function s:OneScope(lnum,text) return cursor(a:lnum, match(' ' . a:text, '\%(\\)' . s:line_term)) > -1 || @@ -215,7 +215,7 @@ function GetJavascriptIndent() endif let s:W = s:sw() - let pline = substitute(substitute(getline(l:lnum),s:expr_case,'\=repeat(" ",strlen(submatch(0)))',''), ':\@ 0 && search('\C\ Date: Tue, 27 Sep 2016 17:20:38 -0700 Subject: [PATCH 411/929] more regex line endings --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b8679f68..cc084535 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -78,8 +78,8 @@ let g:javascript_opfirst = '^' . g:javascript_opfirst let g:javascript_continuation .= '$' function s:OneScope(lnum,text) - return cursor(a:lnum, match(' ' . a:text, '\%(\\)' . s:line_term)) > -1 || - \ cursor(a:lnum, match(' ' . a:text, ')' . s:line_term)) > -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\+each\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') endfunction @@ -91,7 +91,7 @@ function s:iscontOne(i,num,cont) let bL = 0 while l:i >= l:num && (!l:cont || ind > pind + s:W) if indent(l:i) < ind " first line always true for !cont, false for !!cont - if s:OneScope(l:i,substitute(getline(l:i),':\@') ==# 'while' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num) > 0 return 0 endif From 88111be6a7c50c63b36e3dbe8c110df0951ec473 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 27 Sep 2016 17:30:28 -0700 Subject: [PATCH 412/929] factor out --- indent/javascript.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index cc084535..e9373299 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -66,6 +66,10 @@ endif let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' +function s:Trimline(ln) + return substitute(substitute(getline(a:ln),':\@,?^%|*&]\|\/[^/*]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' @@ -91,7 +95,7 @@ function s:iscontOne(i,num,cont) let bL = 0 while l:i >= l:num && (!l:cont || ind > pind + s:W) if indent(l:i) < ind " first line always true for !cont, false for !!cont - if s:OneScope(l:i,substitute(substitute(getline(l:i),':\@') ==# 'while' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num) > 0 return 0 endif @@ -215,7 +219,7 @@ function GetJavascriptIndent() endif let s:W = s:sw() - let pline = substitute(substitute(getline(l:lnum),':\@ 0 && search('\C\ Date: Tue, 27 Sep 2016 19:29:41 -0700 Subject: [PATCH 413/929] small regex changes --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e9373299..acecc6c6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -82,8 +82,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\+each\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') endfunction @@ -114,7 +114,7 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# - \ '\<\%(var\|const\|let\|import\|export\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' + \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' \ : !search('\%([-=~!<*+,./?^%|&\[(]\|=\@\)\_s*\%#','nbW') && \ (search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) endfunction From 833d6ec12724633c323d5d1dab0a4a8fc2e25393 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 27 Sep 2016 21:42:04 -0700 Subject: [PATCH 414/929] short circuit cache check --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index acecc6c6..60f89efa 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -208,11 +208,11 @@ function GetJavascriptIndent() endif let num = (num > 0) * num - let b:js_cache = [v:lnum,num,line('.') == v:lnum ? b:js_cache[2] : col('.')] - if l:line =~ '^[])}]' return !!num * indent(num) endif + let b:js_cache = [v:lnum,num,line('.') == v:lnum ? 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) > 0 return indent(line('.')) From c76d65bd50907fe76a0008371792b821408c1bff Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 27 Sep 2016 22:41:07 -0700 Subject: [PATCH 415/929] fail earlier --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 60f89efa..8da6c6a1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -190,7 +190,7 @@ function GetJavascriptIndent() call cursor(v:lnum,1) if getline(l:lnum) !~ '^\S' let [s:looksyn,s:free] = [v:lnum - 1,1] - if b:js_cache[0] < v:lnum && b:js_cache[0] >= l:lnum && + 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 =~ '^[])}]' From cd4ace412688995e6c6eddc95c3ee3ed5b7dd495 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 28 Sep 2016 08:10:30 -0700 Subject: [PATCH 416/929] wrap for magic (#651) --- indent/javascript.vim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8da6c6a1..7bbee713 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -153,6 +153,9 @@ function s:Balanced(lnum) endfunction function GetJavascriptIndent() + try + let save_magic = &magic + set magic if !exists('b:js_cache') let b:js_cache = [0,0,0] endif @@ -236,6 +239,9 @@ function GetJavascriptIndent() return indent(num) + s:W + switch_offset + bL endif return bL + finally + let &magic = save_magic + endtry endfunction From 572b98d12b97b126a739bac539f4ba4be3365578 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 28 Sep 2016 11:11:41 -0700 Subject: [PATCH 417/929] Fixing another funky comment situation --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 20b131b2..b4ce555b 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -171,7 +171,7 @@ syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArg syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend exe 'syntax match jsFunction /\/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') -exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock contains=jsFuncBraces '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') " Classes syntax keyword jsClassKeywords contained extends class From ecc674fc517e1286b023e2dad1112f37b0fcfb99 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 30 Sep 2016 21:59:19 -0700 Subject: [PATCH 418/929] flow generic classes (#652) --- indent/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7bbee713..e64b454e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -115,8 +115,9 @@ endfunction function s:IsBlock() return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' - \ : !search('\%([-=~!<*+,./?^%|&\[(]\|=\@\)\_s*\%#','nbW') && - \ (search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) + \ : !search('[-=~!<*+,./?^%|&\[(]\_s*\%#','nbW') && (search('>\_s*\%#','bW') ? search('=\%#','bW') || + \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' : + \ search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. From b0d7c153a83f796465aeba6fc430be6e0c39a9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Zugmeyer?= Date: Sun, 2 Oct 2016 16:41:22 +0200 Subject: [PATCH 419/929] add support for "for await" (asynchronous iteration) --- syntax/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index b4ce555b..74b619b1 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -101,7 +101,7 @@ syntax keyword jsStatement contained break continue with yield debugger syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch -syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat +syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock syntax keyword jsLabel contained case default syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock @@ -164,6 +164,7 @@ syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ s syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend syntax match jsFuncArgCommas contained ',' syntax keyword jsArguments contained arguments +syntax keyword jsForAwait contained await skipwhite skipempty nextgroup=jsParenRepeat " Matches a single keyword argument with no parens syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend @@ -275,6 +276,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFinally Exception HiLink jsCatch Exception HiLink jsAsyncKeyword Keyword + HiLink jsForAwait Keyword HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction From f64dae7106df808f4654c5f88ea019d274197b0e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 3 Oct 2016 13:57:35 -0700 Subject: [PATCH 420/929] for await indent (#656) #654 --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e64b454e..984e8957 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -85,7 +85,7 @@ function s:OneScope(lnum,text) 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\+each\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') + \ search('\C\<\%(for\%(\_s\+\%(await\|each\)\)\=\|if\|let\|w\%(hile\|ith\)\)\_s*\%#','bW') endfunction function s:iscontOne(i,num,cont) From f674cbab548f1f8a05c1654f441b13fefc282d80 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 4 Oct 2016 21:04:00 -0700 Subject: [PATCH 421/929] case label needs non whitespace- (#658) can otherwise be a object key --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 984e8957..1f1786c3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -38,7 +38,7 @@ else endif let s:line_pre = '^\s*\%(\%(\%(\/\*.\{-}\)\=\*\+\/\s*\)\=\)\@>' -let s:expr_case = '\<\%(\%(case\>.\+\)\|default\)\s*:\C' +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\)' From 292d90161b225ce726fe6ab0d5e3f2cb1c4ea6aa Mon Sep 17 00:00:00 2001 From: "Tom X. Tobin" Date: Wed, 5 Oct 2016 16:44:55 -0400 Subject: [PATCH 422/929] Fix JSDoc highlighting for optional parameters Fixes #574. --- extras/jsdoc.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/jsdoc.vim b/extras/jsdoc.vim index fff64f89..645d55a3 100644 --- a/extras/jsdoc.vim +++ b/extras/jsdoc.vim @@ -18,7 +18,7 @@ syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRe syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend syntax region jsDocTypeNoParam contained start="{" end="}" oneline syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" -syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+" +syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.\{-}]\|=\)\+" syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags if version >= 508 || !exists("did_javascript_syn_inits") From ba2245fbe7384a4dc9de6f0d1c120dad977d0406 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 6 Oct 2016 21:17:20 -0700 Subject: [PATCH 423/929] Misc improvements (#661) --- indent/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1f1786c3..e5c57496 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -72,7 +72,7 @@ endfunction " configurable regexes that define continuation lines, not including (, {, or [. if !exists('g:javascript_opfirst') - let g:javascript_opfirst = '\%([<>,?^%|*&]\|\/[^/*]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' + let g:javascript_opfirst = '\%([<>,?^%|*&]\|\/[/*]\@!\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)' endif if !exists('g:javascript_continuation') let g:javascript_continuation = '\%([<=,.?/*^%|&:]\|+\@\|\= l:num && (!l:cont || ind > pind + s:W) - if indent(l:i) < ind " first line always true for !cont, false for !!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) > 0 + if expand('') ==# 'while' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num + !!a:num) > 0 return 0 endif let bL += 1 @@ -155,8 +155,8 @@ endfunction function GetJavascriptIndent() try - let save_magic = &magic - set magic + let save_magic = &magic + set magic if !exists('b:js_cache') let b:js_cache = [0,0,0] endif @@ -218,7 +218,7 @@ function GetJavascriptIndent() let b:js_cache = [v:lnum,num,line('.') == v:lnum ? 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) > 0 + if l:line =~# '^while\>' && s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,num + 1) > 0 return indent(line('.')) endif From 8d904f65f575e5d081ae740d19a2409b69118576 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 8 Oct 2016 12:28:01 -0700 Subject: [PATCH 424/929] improve end of line trim (#662) * improve end of line trim * Date --- indent/javascript.vim | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e5c57496..a6eefba0 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: September 26, 2016 +" Last Change: October 8, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -38,6 +38,8 @@ 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. let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' @@ -64,10 +66,23 @@ else endfunction endif -let s:line_term = '\s*\%(\%(\/\%(\%(\*.\{-}\*\/\)\|\%(\*\+\)\)\)\s*\)\=$' - +" indent/python.vim function s:Trimline(ln) - return substitute(substitute(getline(a:ln),':\@ Date: Sun, 9 Oct 2016 18:31:13 -0700 Subject: [PATCH 425/929] skip comment (#665) * skip comment https://github.com/pangloss/vim-javascript/issues/664#issuecomment-252492671 --- indent/javascript.vim | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a6eefba0..0a527b2e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -128,7 +128,9 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() - return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# + return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' \ : !search('[-=~!<*+,./?^%|&\[(]\_s*\%#','nbW') && (search('>\_s*\%#','bW') ? search('=\%#','bW') || \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' : From 214450913faa965be8579910bcd64390c3c59bcd Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 9 Oct 2016 19:58:54 -0700 Subject: [PATCH 426/929] shorten long line,date --- indent/javascript.vim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0a527b2e..f883d241 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 8, 2016 +" Last Change: October 9, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -111,7 +111,9 @@ function s:iscontOne(i,num,cont) while l:i >= l:num && (!l:cont || ind > pind + s:W) 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 + if expand('') ==# 'while' && + \ s:GetPair(s:line_pre . '\C\','\C\','bW',s:skip_expr,100,l:num + !!a:num) > 0 + return 0 endif let bL += 1 From ba0ae275cb95f8c4b2363d923a5fa42cec6019fc Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 9 Oct 2016 19:59:38 -0700 Subject: [PATCH 427/929] remove random nl --- indent/javascript.vim | 1 - 1 file changed, 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f883d241..e6af48a8 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -113,7 +113,6 @@ function s:iscontOne(i,num,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 - return 0 endif let bL += 1 From da65c0cdd3cb8b0aa6c5676ef38c0ec6ac0e3744 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 10 Oct 2016 17:09:36 -0700 Subject: [PATCH 428/929] massive expression to if chain (#667) --- indent/javascript.vim | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e6af48a8..4f0301da 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -129,13 +129,31 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock() - return getline(line('.'))[col('.')-1] == '{' && !search('\C\') !~# - \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' - \ : !search('[-=~!<*+,./?^%|&\[(]\_s*\%#','nbW') && (search('>\_s*\%#','bW') ? search('=\%#','bW') || - \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' : - \ search(s:expr_case . '\_s*\%#','nbW') || !search('[{:]\_s*\%#','bW') || s:IsBlock())) + if getline(line('.'))[col('.')-1] == '{' + if search('\C\') !~# + \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' + elseif char == '>' + return search('=\%#','bW') || synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' + elseif char == ':' + return strpart(getline(line('.')),0,col('.')) =~# s:expr_case . '$' + elseif char == '{' + return s:IsBlock() + else + return char !~# '[-=~!<*+,./?^%|&\[(]' + endif + else + return 1 + endif + endif endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. From 7e9aeb30fe657bb15dc9653b9b15858235f957ab Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 11 Oct 2016 00:41:31 -0700 Subject: [PATCH 429/929] word boundary to start/end --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4f0301da..9720c7f8 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,7 @@ function s:IsBlock() let char = getline(line('.'))[col('.')-1] if char =~# '\l' return expand('') !~# - \ '\<\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)\>' + \ '^\%(var\|const\|let\|\%(im\|ex\)port\|yield\|de\%(fault\|lete\)\|void\|t\%(ypeof\|hrow\)\|new\|in\%(stanceof\)\=\)$' elseif char == '>' return search('=\%#','bW') || synIDattr(synID(line('.'),col('.'),0),'name') =~? 'flownoise' elseif char == ':' From 7d30463e18181302d1134899b635ef84a9c7d84a Mon Sep 17 00:00:00 2001 From: bounceme Date: Tue, 11 Oct 2016 11:57:46 -0700 Subject: [PATCH 430/929] Revert "Merge branch 'master' into develop" This reverts commit 822dfe5f919a938682b4a0ad386f9d2909627e17, reversing changes made to da65c0cdd3cb8b0aa6c5676ef38c0ec6ac0e3744. --- syntax/javascript.vim | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4a37bb7f..74b619b1 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -84,7 +84,7 @@ syntax match jsObjectSeparator contained /,/ syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/ -syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ contains=jsAsyncKeyword skipwhite skipempty nextgroup=jsObjectFuncName +syntax match jsObjectMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue @@ -108,8 +108,7 @@ syntax keyword jsTry try skipwhite skipempty nextgro syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch syntax keyword jsException throw -syntax keyword jsAsyncKeyword async skipwhite skipempty nextgroup=jsFunction,jsFuncName -syntax keyword jsAwaitKeyword await +syntax keyword jsAsyncKeyword async await syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock " Keywords @@ -178,7 +177,7 @@ exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFunc " Classes syntax keyword jsClassKeywords contained extends class syntax match jsClassNoise contained /\./ -syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ contains=jsAsyncKeyword skipwhite skipempty nextgroup=jsFuncName,jsClassProperty +syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression @@ -228,8 +227,8 @@ if exists("javascript_plugin_flow") runtime extras/flow.vim endif -syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo,jsAsyncKeyword,jsAwaitKeyword -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry +syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo +syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -277,7 +276,7 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFinally Exception HiLink jsCatch Exception HiLink jsAsyncKeyword Keyword - HiLink jsAwaitKeyword Keyword + HiLink jsForAwait Keyword HiLink jsArrowFunction Type HiLink jsFunction Type HiLink jsGenerator jsFunction From baa07dd0d5bf521cf88419d00d2a5d7672dd8e60 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 12 Oct 2016 21:20:29 -0700 Subject: [PATCH 431/929] 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 432/929] 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 433/929] 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 434/929] 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 435/929] 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 436/929] 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 437/929] 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 438/929] 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 439/929] 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 440/929] 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 441/929] 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 442/929] 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 443/929] 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 444/929] 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 445/929] 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 446/929] 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 447/929] 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 448/929] 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 449/929] 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 450/929] 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 451/929] 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 452/929] 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 453/929] 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 454/929] 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 455/929] 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 456/929] 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 457/929] 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 458/929] 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 From 4456229dd73ce3672b35be60afeb9021033e0375 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 26 Oct 2016 15:15:23 -0700 Subject: [PATCH 459/929] non whitespace non : after case statement --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 5191a2c2..67f50b30 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,7 +37,7 @@ else endfunction endif -let s:expr_case = '\<\%(\%(case\>\s*\S.\{-}\)\|default\)\s*:\C' +let s:expr_case = '\<\%(\%(case\>\s*[^[:blank:]:].\{-}\)\|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\)' From 460598f32fda138d45960f5becfd627efcc2a074 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 27 Oct 2016 19:14:27 -0700 Subject: [PATCH 460/929] fix 'default' property identifier (#689) --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 67f50b30..0a448395 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,8 @@ function s:IsBlock() elseif char == '>' return pchar == '=' || syn =~? '^jsflow' elseif char == ':' - return strpart(getline('.'),0,col('.')) =~# s:expr_case . '$' + return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),s:expr_case . '$')) + 1 && + \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') else return stridx('-=~!<*+,/?^%|&([',char) < 0 endif From bf2a1b42f2724658b9d62dbe0dfb5acacd316ef0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 27 Oct 2016 22:40:13 -0700 Subject: [PATCH 461/929] last case statement --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0a448395..8551cce7 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -140,7 +140,7 @@ function s:IsBlock() elseif char == '>' return pchar == '=' || syn =~? '^jsflow' elseif char == ':' - return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),s:expr_case . '$')) + 1 && + return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') else return stridx('-=~!<*+,/?^%|&([',char) < 0 From 2d33a9e11a1496c38aa4949caa240c3a1feefcee Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 29 Oct 2016 11:46:32 -0700 Subject: [PATCH 462/929] code cleaning --- indent/javascript.vim | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8551cce7..e4a380fb 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -132,11 +132,8 @@ function s:IsBlock() 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 + return index(split('return const let import export yield default delete var void typeof throw new in instanceof') + \ , expand('')) < (0 + (line('.') != l:ln)) elseif char == '>' return pchar == '=' || syn =~? '^jsflow' elseif char == ':' From b4517ac35479dc07eb9c6a853835556b231c500a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Rodr=C3=ADguez?= Date: Sat, 29 Oct 2016 17:28:02 -0300 Subject: [PATCH 463/929] Add fetch keyword to list of globals Closes #688. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 74b619b1..22733c78 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -112,7 +112,7 @@ syntax keyword jsAsyncKeyword async await syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock " Keywords -syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat +syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch syntax keyword jsGlobalNodeObjects module exports global process syntax match jsGlobalNodeObjects /require/ containedin=jsFuncCall syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError From 579997a82c4e9009675bf295b69ed28b34cff541 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 29 Oct 2016 14:16:34 -0700 Subject: [PATCH 464/929] isBlock cleaning --- indent/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e4a380fb..c565af8c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -142,9 +142,8 @@ function s:IsBlock() else return stridx('-=~!<*+,/?^%|&([',char) < 0 endif - else - return 1 endif + return 1 endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. From 8996ec59311978869c254bbd614e1168a6152e78 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 29 Oct 2016 14:21:18 -0700 Subject: [PATCH 465/929] date, cleaning --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c565af8c..335eacde 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 24, 2016 +" Last Change: October 29, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -139,9 +139,8 @@ function s:IsBlock() elseif char == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') - else - return stridx('-=~!<*+,/?^%|&([',char) < 0 endif + return stridx('-=~!<*+,/?^%|&([',char) < 0 endif return 1 endfunction From afb03f5eb638187cba6d175b3f60ff07188b4b81 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 29 Oct 2016 17:28:51 -0700 Subject: [PATCH 466/929] cleaning,skip_func --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 335eacde..d945200a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -50,7 +50,7 @@ function s:skip_func(lnum) return !s:free endif let s:looksyn = line('.') - return (strridx(getline('.'),'/',col('.')-1) + 1 || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) + return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) endfunction if has('reltime') From 187b1d6a0ee5513db105bdf34e07663d13923993 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 30 Oct 2016 16:58:11 -0700 Subject: [PATCH 467/929] recursion in isBlock: comment skip (#692) --- indent/javascript.vim | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d945200a..c8195ac4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -115,21 +115,15 @@ function s:iscontOne(i,num,cont) endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader -function s:IsBlock() - let l:ln = line('.') +function s:IsBlock(...) + let l:ln = get(a:000,0,line('.')) if search('\S','bW') 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('.')[col('.')-1] - let pchar = getline('.')[col('.')-2] - let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') - endif - if syn =~? '\%(xml\|jsx\)' + if syn =~? 'comment' + return search('\/[/*]','bW') && s:IsBlock(l:ln) + elseif syn =~? '\%(xml\|jsx\)' return char != '{' elseif char =~# '\l' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') From f8fc08c8d3e1726ee3e9eba61a965a294e584343 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 30 Oct 2016 20:01:47 -0700 Subject: [PATCH 468/929] small comment fix --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c8195ac4..69f24107 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -120,7 +120,7 @@ function s:IsBlock(...) if search('\S','bW') let char = getline('.')[col('.')-1] let pchar = getline('.')[col('.')-2] - let syn = synIDattr(synID(line('.'),col('.')-1,0),'name') + let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') if syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) elseif syn =~? '\%(xml\|jsx\)' From dcf820b2a401bdbfff7d54feeef0e1ecceb1d581 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 30 Oct 2016 21:17:22 -0700 Subject: [PATCH 469/929] adjust precedence of comment/jsx --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 69f24107..1fe371ff 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -121,10 +121,10 @@ function s:IsBlock(...) let char = getline('.')[col('.')-1] let pchar = getline('.')[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') - if syn =~? 'comment' - return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif syn =~? '\%(xml\|jsx\)' + if syn =~? '\%(xml\|jsx\)' return char != '{' + elseif syn =~? 'comment' + return search('\/[/*]','bW') && s:IsBlock(l:ln) elseif char =~# '\l' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) From 1e52ed9bcd2d5f89c062d34afeeac4bcfbad831e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 00:11:43 -0700 Subject: [PATCH 470/929] remove var --- indent/javascript.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1fe371ff..105d4862 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -119,7 +119,6 @@ function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') let char = getline('.')[col('.')-1] - let pchar = getline('.')[col('.')-2] let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') if syn =~? '\%(xml\|jsx\)' return char != '{' @@ -129,7 +128,7 @@ function s:IsBlock(...) return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) elseif char == '>' - return pchar == '=' || syn =~? '^jsflow' + return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') From 918202964ff67c1d242573e0146ff35fcf468495 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 01:47:20 -0700 Subject: [PATCH 471/929] clearer char checking --- indent/javascript.vim | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 105d4862..4db372d4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -118,22 +118,22 @@ endfunction function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') - let char = getline('.')[col('.')-1] - let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') + let char = strpart(getline('.'),col('.')-2,2) + let syn = synIDattr(synID(line('.'),col('.')-(char[1] == '{'),0),'name') if syn =~? '\%(xml\|jsx\)' - return char != '{' + return char[1] != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char =~# '\l' + elseif char[1] =~# '\l' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) - elseif char == '>' - return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' - elseif char == ':' + elseif char[1] == '>' + return char[0] == '=' || syn =~? '^jsflow' + elseif char[1] == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') endif - return stridx('-=~!<*+,/?^%|&([',char) < 0 + return stridx('-=~!<*+,/?^%|&([',char[1]) < 0 endif return 1 endfunction From cdb44a869cfebec30d5933d1a3b66bc7f5b0b936 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 10:38:24 -0700 Subject: [PATCH 472/929] last index string --- indent/javascript.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4db372d4..7ccc3d6e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -119,17 +119,17 @@ function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') let char = strpart(getline('.'),col('.')-2,2) - let syn = synIDattr(synID(line('.'),col('.')-(char[1] == '{'),0),'name') + let syn = synIDattr(synID(line('.'),col('.')-(char[-1:] == '{'),0),'name') if syn =~? '\%(xml\|jsx\)' - return char[1] != '{' + return char[-1:] != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char[1] =~# '\l' + elseif char[-1:] =~# '\l' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) - elseif char[1] == '>' + elseif char[-1:] == '>' return char[0] == '=' || syn =~? '^jsflow' - elseif char[1] == ':' + elseif char[-1:] == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') endif From 01193be9e98f8a673adb6ed069b63b16303accdb Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 10:41:20 -0700 Subject: [PATCH 473/929] date, str char --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7ccc3d6e..625720e8 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 29, 2016 +" Last Change: Octember 31, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -133,7 +133,7 @@ function s:IsBlock(...) return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') endif - return stridx('-=~!<*+,/?^%|&([',char[1]) < 0 + return stridx('-=~!<*+,/?^%|&([',char[-1:]) < 0 endif return 1 endfunction From 65e68f563e154da2069b2aaa671560e4fef7a6a0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 14:31:49 -0700 Subject: [PATCH 474/929] revert char check --- indent/javascript.vim | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 625720e8..311ec08f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -118,22 +118,22 @@ endfunction function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') - let char = strpart(getline('.'),col('.')-2,2) - let syn = synIDattr(synID(line('.'),col('.')-(char[-1:] == '{'),0),'name') + let char = getline('.')[col('.')-1] + let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') if syn =~? '\%(xml\|jsx\)' - return char[-1:] != '{' + return char != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char[-1:] =~# '\l' + elseif char =~# '\l' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) - elseif char[-1:] == '>' - return char[0] == '=' || syn =~? '^jsflow' - elseif char[-1:] == ':' + elseif char == '>' + return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' + elseif char == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') endif - return stridx('-=~!<*+,/?^%|&([',char[-1:]) < 0 + return stridx('-=~!<*+,/?^%|&([',char) < 0 endif return 1 endfunction From 12a6f46c4bb323e970252c9d4b5fb9c7aadcfa3a Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 19:42:33 -0700 Subject: [PATCH 475/929] alpha short circuiting --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 311ec08f..42e13644 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -124,7 +124,7 @@ function s:IsBlock(...) return char != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char =~# '\l' + elseif char =~# '\a' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') \ , expand('')) < (0 + (line('.') != l:ln)) elseif char == '>' From b5a21109be91d35e1dccc53ba8046c3d5e329d15 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 31 Oct 2016 23:53:17 -0700 Subject: [PATCH 476/929] code minify --- indent/javascript.vim | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 42e13644..bd679ee7 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -156,13 +156,9 @@ 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 stridx('[({',l:line[pos]) + 1 - let l:open += 1 - else - let l:open -= 1 - if l:open < 0 - return 0 - endif + let l:open += match(' ' . l:line[pos],'[[({]') + if l:open < 0 + return 0 endif endif let pos = match(l:line, '[][(){}]', pos + 1) From 4d60216106f9c170e0e75325d8611931fc10e6c6 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 1 Nov 2016 15:18:28 -0700 Subject: [PATCH 477/929] prevline = 0 at html --- indent/javascript.vim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bd679ee7..a1283a37 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -142,7 +142,10 @@ 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 + let syn = synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"`]'),0),'name') + if syn =~? 'html' + return + elseif syn !~? s:syng_strcom return l:lnum endif let l:lnum = prevnonblank(l:lnum - 1) From 396829c383395178db37871b432c0768806919e4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 2 Nov 2016 00:48:35 -0700 Subject: [PATCH 478/929] comment handling --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a1283a37..875b7799 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -75,7 +75,7 @@ endfunction " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', - \ '\%([<>,?^%|*&]\|\/[/*]\@!\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)') + \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.?/*^%|&:]\|+\@\|\ Date: Thu, 3 Nov 2016 11:27:43 -0700 Subject: [PATCH 479/929] Refactoring (#693) --- indent/javascript.vim | 46 +++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 875b7799..54869dbc 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -63,6 +63,19 @@ else endfunction endif +function s:current_char() + return getline('.')[col('.')-1] +endfunction + +function s:token() + return s:current_char() =~ '\w' ? expand('') : s:current_char() +endfunction + +" NOTE: moves the cursor +function s:previous_token() + return search('\<\|[^[:alnum:]_$[:space:]]','bW') ? s:token() : '' +endfunction + function s:Trim(ln) let pline = substitute(getline(a:ln),'\s*$','','') let l:max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) @@ -80,10 +93,15 @@ let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.?/*^%|&:]\|+\@\|\\)$')) + 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') + if cursor(a:lnum, match(' ' . a:text, ')$')) + 1 && + \ s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 + let token = s:previous_token() + if index(split('await each'),token) + 1 + return s:previous_token() ==# 'for' + endif + return index(split('for if let while with'),token) + 1 + endif + return cursor(a:lnum, match(' ' . a:text, '\%(\\)$\C')) + 1 endfunction function s:iscontOne(i,num,cont) @@ -94,7 +112,7 @@ function s:iscontOne(i,num,cont) 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:Trim(l:i)) - if expand('') ==# 'while' && + if s:token() ==# 'while' && \ s:GetPair('\C\','\C\','bW','line2byte(line(".")) + col(".") <' \ . (line2byte(l:num) + b:js_cache[2]) . '||' \ . s:skip_expr . '|| !s:IsBlock()',100,l:num) > 0 @@ -105,10 +123,10 @@ function s:iscontOne(i,num,cont) elseif !l:cont break endif - let ind = indent(l:i) elseif !a:cont break endif + let ind = min([ind, indent(l:i)]) let l:i = s:PrevCodeLine(l:i - 1) endwhile return bL @@ -118,22 +136,20 @@ endfunction function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') - let char = getline('.')[col('.')-1] + let char = s:token() let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') if syn =~? '\%(xml\|jsx\)' return char != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char =~# '\a' - return index(split('return const let import export yield default delete var void typeof throw new in instanceof') - \ , expand('')) < (0 + (line('.') != l:ln)) elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && - \ (expand('') !=# 'default' || !search('\S','bW') || getline('.')[col('.')-1] !~ '[,{]') + \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif - return stridx('-=~!<*+,/?^%|&([',char) < 0 + return index(split('return const let import export yield default delete var void typeof throw new in instanceof' + \ . ' - = ~ ! < * + , / ? ^ % | & ( ['), char) < (0 + (line('.') != l:ln)) endif return 1 endfunction @@ -215,7 +231,7 @@ function GetJavascriptIndent() endif if idx + 1 - if idx == 2 && search('\S','bW',line('.')) && getline('.')[col('.')-1] == ')' + if idx == 2 && search('\S','bW',line('.')) && s:current_char() == ')' call s:GetPair('(',')','bW',s:skip_expr,200) endif return indent(line('.')) @@ -226,10 +242,10 @@ function GetJavascriptIndent() 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 s:current_char() == '{' if search(')\_s*\%#','bW') let stmt = 1 - if s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && search('\C\ 0 && s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) if l:line =~# '^' . s:expr_case From 01f7804267feb134f3b884b7a4612b126e6b6bb3 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 4 Nov 2016 15:04:53 -0700 Subject: [PATCH 480/929] keyword atom This is used by `\<` and `expand('')` --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 54869dbc..f4df091c 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -68,7 +68,7 @@ function s:current_char() endfunction function s:token() - return s:current_char() =~ '\w' ? expand('') : s:current_char() + return s:current_char() =~ '\k' ? expand('') : s:current_char() endfunction " NOTE: moves the cursor From 2ef9a9ca375f37c233000972f0c9e926db828417 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 5 Nov 2016 14:43:40 -0700 Subject: [PATCH 481/929] refactoring block conditions (#695) --- indent/javascript.vim | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f4df091c..c2e4af60 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: Octember 31, 2016 +" Last Change: November 5, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -137,7 +137,7 @@ function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) if search('\S','bW') let char = s:token() - let syn = synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') + let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' if syn =~? '\%(xml\|jsx\)' return char != '{' elseif syn =~? 'comment' @@ -241,20 +241,16 @@ function GetJavascriptIndent() let num = 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 s:current_char() == '{' - if search(')\_s*\%#','bW') - let stmt = 1 - if s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' - let switch_offset = &cino !~ ':' || !has('float') ? s:W : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) - if l:line =~# '^' . s:expr_case - return indent(num) + switch_offset - endif - let stmt = pline !~# s:expr_case . '$' + if num + if s:current_char() == '{' && s:IsBlock() + let stmt = 1 + if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' + let switch_offset = &cino !~ ':' || !has('float') ? s:W : + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) + if l:line =~# '^' . s:expr_case + return indent(num) + switch_offset endif - elseif s:IsBlock() - let stmt = 1 + let stmt = pline !~# s:expr_case . '$' endif endif else From 817215be5cdec9bee35ed1f1089bab32c46c4664 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 13:51:08 -0800 Subject: [PATCH 482/929] more code cleaning --- indent/javascript.vim | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c2e4af60..67c1df6b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -241,23 +241,19 @@ function GetJavascriptIndent() let num = 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 s:current_char() == '{' && s:IsBlock() - let stmt = 1 - if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' - let switch_offset = &cino !~ ':' || !has('float') ? s:W : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) - if l:line =~# '^' . s:expr_case - return indent(num) + switch_offset - endif - let stmt = pline !~# s:expr_case . '$' + if num && s:current_char() == '{' && s:IsBlock() + let stmt = 1 + if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' + let switch_offset = &cino !~ ':' || !has('float') ? s:W : + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) + if l:line =~# '^' . s:expr_case + return indent(num) + switch_offset endif + let stmt = pline !~# s:expr_case . '$' endif - else - let stmt = 1 endif - if stmt + if stmt || !num 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('.')) From d23050e3061ecd1836165c38027245d0d17cb8a9 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 14:08:08 -0800 Subject: [PATCH 483/929] return redundancies --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 67c1df6b..bf1e7fbb 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -177,7 +177,7 @@ function s:Balanced(lnum) if synIDattr(synID(a:lnum,pos + 1,0),'name') !~? s:syng_strcom let l:open += match(' ' . l:line[pos],'[[({]') if l:open < 0 - return 0 + return endif endif let pos = match(l:line, '[][(){}]', pos + 1) @@ -206,7 +206,7 @@ function GetJavascriptIndent() endif let l:lnum = s:PrevCodeLine(v:lnum - 1) if !l:lnum - return 0 + return endif let l:line = substitute(substitute(l:line,'^\s*\%(\/\*.\{-}\*\/\s*\)*','',''),'^\/[/*].*','','') From eac13000f5998dc90d10452718fda18ab8aa9133 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 14:11:20 -0800 Subject: [PATCH 484/929] another return --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bf1e7fbb..bdb1e159 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: November 5, 2016 +" Last Change: November 6, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -116,7 +116,7 @@ function s:iscontOne(i,num,cont) \ 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 + return endif let bL += s:W let [l:cont, l:i] = [0, line('.')] From 15905f20882b9ed2cddf6aeb9bdc1ebbaa3cabfa Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 14:28:13 -0800 Subject: [PATCH 485/929] refactor,cleaning isblock --- indent/javascript.vim | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index bdb1e159..a2a1645b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -135,23 +135,22 @@ endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) - if search('\S','bW') - let char = s:token() - let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' - if syn =~? '\%(xml\|jsx\)' - return char != '{' - elseif syn =~? 'comment' - return search('\/[/*]','bW') && s:IsBlock(l:ln) - elseif char == '>' - return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' - elseif char == ':' - return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && - \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') - endif - return index(split('return const let import export yield default delete var void typeof throw new in instanceof' - \ . ' - = ~ ! < * + , / ? ^ % | & ( ['), char) < (0 + (line('.') != l:ln)) + let char = s:previous_token() + let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' + if char is '' + return 1 + elseif syn =~? '\%(xml\|jsx\)' + return char != '{' + elseif syn =~? 'comment' + return search('\/[/*]','bW') && s:IsBlock(l:ln) + elseif char == '>' + return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' + elseif char == ':' + return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && + \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif - return 1 + return index(split('return const let import export yield default delete var void typeof throw new in instanceof' + \ . ' - = ~ ! < * + , / ? ^ % | & ( ['), char) < (0 + (line('.') != l:ln)) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. From 8a40889ba41741a07566d9320e6bd60bd73f9405 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 20:38:25 -0800 Subject: [PATCH 486/929] skip any html --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a2a1645b..af2244b1 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -45,12 +45,12 @@ let s:syng_strcom = '\%(s\%(tring\|pecial\)\|comment\|regex\|doc\|template\)' let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) if !s:free || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) - let s:free = !eval(s:skip_expr) + let s:free = !eval(s:skip_expr . '. "\\|html"') let s:looksyn = s:free ? line('.') : s:looksyn return !s:free endif let s:looksyn = line('.') - return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) + return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr . '. "\\|html"') endfunction if has('reltime') From 6f3e6e9748675a04efd01a7be93b775e8f051ea0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 20:44:11 -0800 Subject: [PATCH 487/929] keep string type --- indent/javascript.vim | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index af2244b1..8bfaeb98 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -40,17 +40,16 @@ endif let s:expr_case = '\<\%(\%(case\>\s*[^[:blank:]:].\{-}\)\|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\)' - " 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."'" function s:skip_func(lnum) if !s:free || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) - let s:free = !eval(s:skip_expr . '. "\\|html"') + let s:free = !eval(s:skip_expr . " . '\\|html'") let s:looksyn = s:free ? line('.') : s:looksyn return !s:free endif let s:looksyn = line('.') - return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr . '. "\\|html"') + return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr . " . '\\|html'") endfunction if has('reltime') From bedb8cb2e67f42c0dffb92a3f32d81f5faa9679e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 6 Nov 2016 22:15:22 -0800 Subject: [PATCH 488/929] cleaning --- indent/javascript.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8bfaeb98..be4203f0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,13 +37,14 @@ else endfunction endif -let s:expr_case = '\<\%(\%(case\>\s*[^[:blank:]:].\{-}\)\|default\)\s*:\C' +let s:case_stmt = '\<\%(\%(case\>\s*[^[:blank:]:].\{-}\)\|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\)' " 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."'" function s:skip_func(lnum) - if !s:free || search('`','nW',a:lnum) || search('\*\/','nW',a:lnum) + if !s:free || search('`\|\%(\*\/\)','nW',a:lnum) let s:free = !eval(s:skip_expr . " . '\\|html'") let s:looksyn = s:free ? line('.') : s:looksyn return !s:free @@ -145,7 +146,7 @@ function s:IsBlock(...) elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' - return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:expr_case . '$')) + 1 && + return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) + 1 && \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif return index(split('return const let import export yield default delete var void typeof throw new in instanceof' @@ -244,10 +245,10 @@ function GetJavascriptIndent() if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) - if l:line =~# '^' . s:expr_case + if l:line =~# '^' . s:case_stmt return indent(num) + switch_offset endif - let stmt = pline !~# s:expr_case . '$' + let stmt = pline !~# s:case_stmt . '$' endif endif From 8ac7badb3c8d38dd5b3a01b320cac2887a8e9902 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 7 Nov 2016 10:23:25 -0800 Subject: [PATCH 489/929] Remove all extra grouping (#697) --- indent/javascript.vim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index be4203f0..a5f8cf0f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,14 +37,14 @@ else endfunction endif -let s:case_stmt = '\<\%(\%(case\>\s*[^[:blank:]:].\{-}\)\|default\)\s*:\C' +let s:case_stmt = '\<\%(case\>\s*[^[:blank:]:].\{-}\|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\)' +let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' " 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."'" function s:skip_func(lnum) - if !s:free || search('`\|\%(\*\/\)','nW',a:lnum) + if !s:free || search('`\|\*\/','nW',a:lnum) let s:free = !eval(s:skip_expr . " . '\\|html'") let s:looksyn = s:free ? line('.') : s:looksyn return !s:free @@ -79,7 +79,7 @@ endfunction 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\)' + 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 @@ -139,7 +139,7 @@ function s:IsBlock(...) let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' if char is '' return 1 - elseif syn =~? '\%(xml\|jsx\)' + elseif syn =~? 'xml\|jsx' return char != '{' elseif syn =~? 'comment' return search('\/[/*]','bW') && s:IsBlock(l:ln) @@ -194,13 +194,13 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc. - if syns =~? '\%(comment\|doc\)' + if syns =~? 'comment\|doc' if l:line =~ '^\s*\*' return cindent(v:lnum) elseif l:line !~ '^\s*\/' return -1 endif - elseif syns =~? '\%(string\|template\)' && l:line !~ '^[''"]' + elseif syns =~? 'string\|template' && l:line !~ '^[''"]' return -1 endif let l:lnum = s:PrevCodeLine(v:lnum - 1) From 74f6d46f7bfa0613cf9bc5799781ac41289e856c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 7 Nov 2016 21:04:14 -0800 Subject: [PATCH 490/929] remove es6 semi-less do-while handling (#698) --- indent/javascript.vim | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a5f8cf0f..83bc204e 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -112,12 +112,6 @@ function s:iscontOne(i,num,cont) 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:Trim(l:i)) - if s:token() ==# 'while' && - \ 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 - endif let bL += s:W let [l:cont, l:i] = [0, line('.')] elseif !l:cont @@ -253,10 +247,6 @@ function GetJavascriptIndent() endif if stmt || !num - 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('.')) - 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 From d47868cad502ac31b681b29ae454f8815f76d9ce Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 7 Nov 2016 22:49:52 -0800 Subject: [PATCH 491/929] remove magic try anyone changing the magic setting will have a non-operable program anyway --- indent/javascript.vim | 7 ------- 1 file changed, 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 83bc204e..1ccc55fb 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -179,9 +179,6 @@ function s:Balanced(lnum) endfunction function GetJavascriptIndent() - try - let save_magic = &magic - set magic let b:js_cache = get(b:,'js_cache',[0,0,0]) " Get the current line. let l:line = getline(v:lnum) @@ -259,10 +256,6 @@ 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 From b0f562956984e70bfd09d30200da6a2340286bc5 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 8 Nov 2016 00:09:21 -0800 Subject: [PATCH 492/929] de-noising --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1ccc55fb..a71a9b0d 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -37,7 +37,7 @@ else endfunction endif -let s:case_stmt = '\<\%(case\>\s*[^[:blank:]:].\{-}\|default\s*\):\C' +let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' From 419f0d6a84fda49378257eb6464222ed7a9ea150 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 8 Nov 2016 09:26:33 -0800 Subject: [PATCH 493/929] accurate collection (#699) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a71a9b0d..f68bdd85 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,7 +73,7 @@ endfunction " NOTE: moves the cursor function s:previous_token() - return search('\<\|[^[:alnum:]_$[:space:]]','bW') ? s:token() : '' + return search('\<\|[][`^!"%-/:-?{-~]','bW') ? s:token() : '' endfunction function s:Trim(ln) From e9a59c87703d7d67d9933e68b80732326163a5c5 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 8 Nov 2016 10:05:43 -0800 Subject: [PATCH 494/929] hotfix: Improve switch This isn't worth starting dev branch again --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f68bdd85..b72ff920 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -235,7 +235,7 @@ function GetJavascriptIndent() let stmt = 1 if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '.*:[^,]*s' ? s:W : 1)) + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) if l:line =~# '^' . s:case_stmt return indent(num) + switch_offset endif From 22b9f0f8e4be167d153b501775b2476e2e7d0d95 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 9 Nov 2016 12:13:36 -0800 Subject: [PATCH 495/929] consider regex when matching '/' (#703) * consider regex when matching '/' ``` i = /o/ { i(). n() } ``` * match == col || match == -1 * regex is code * list concat instead of string --- indent/javascript.vim | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b72ff920..44231e99 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -131,7 +131,7 @@ function s:IsBlock(...) let l:ln = get(a:000,0,line('.')) let char = s:previous_token() let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' - if char is '' + if char is '' || syn =~? 'regex' return 1 elseif syn =~? 'xml\|jsx' return char != '{' @@ -143,8 +143,8 @@ function s:IsBlock(...) return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) + 1 && \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif - return index(split('return const let import export yield default delete var void typeof throw new in instanceof' - \ . ' - = ~ ! < * + , / ? ^ % | & ( ['), char) < (0 + (line('.') != l:ln)) + return index(split('return const let import export yield default delete var void typeof throw new in instanceof') + \ + split('-=~!<*+,/?^%|&([','\zs'), char) < (0 + (line('.') != l:ln)) endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. @@ -154,7 +154,7 @@ function s:PrevCodeLine(lnum) let syn = synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"`]'),0),'name') if syn =~? 'html' return - elseif syn !~? s:syng_strcom + elseif syn !~? 'comment\|doc\|string\|template' return l:lnum endif let l:lnum = prevnonblank(l:lnum - 1) @@ -244,7 +244,8 @@ function GetJavascriptIndent() endif if stmt || !num - let isOp = l:line =~# s:opfirst || pline =~# s:continuation + let isOp = l:line =~# s:opfirst || pline =~# s:continuation && + \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' let bL = s:iscontOne(l:lnum,num,isOp) let bL -= (bL && l:line[0] == '{') * s:W endif From c938b83e290f83ef4a1d692625c45b3ba09957a0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 9 Nov 2016 19:03:50 -0800 Subject: [PATCH 496/929] Update README.md (#702) --- CONTRIBUTING.md | 18 ------------------ README.md | 11 +++++------ 2 files changed, 5 insertions(+), 24 deletions(-) delete mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index c47cbc86..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,18 +0,0 @@ -## Contributing - -This project uses the [git -flow](http://nvie.com/posts/a-successful-git-branching-model/) model for -development. There's [a handy git module for git -flow](//github.com/nvie/gitflow). If you'd like to be added as a contributor, -the price of admission is 1 pull request. Please follow the general code style -guides (read the code) and in your pull request explain the reason for the -proposed change and how it is valuable. - -## Pull Requests - -Please make your pull requests against the `develop` branch; we stage changes -for testing there to avoid unexpected breakages for our users. :) - -## Bug report - -Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). diff --git a/README.md b/README.md index 1cd79f4c..a1137f79 100644 --- a/README.md +++ b/README.md @@ -103,13 +103,12 @@ variables: ## Contributing -This project uses the [git -flow](http://nvie.com/posts/a-successful-git-branching-model/) model for -development. There's [a handy git module for git -flow](//github.com/nvie/gitflow). If you'd like to be added as a contributor, -the price of admission is 1 pull request. Please follow the general code style +Please follow the general code style guides (read the code) and in your pull request explain the reason for the -proposed change and how it is valuable. +proposed change and how it is valuable. All p.r.'s will be reviewed by a +maintainer(s) then, hopefully, merged. + +Thank you! ## Bug Reports From bbabf9d67e0e45eee0e5e6c2fa377c457b96a08d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 12 Nov 2016 02:09:39 -0800 Subject: [PATCH 497/929] syntax aware previous token (#705) * syntax aware previous token Experimental at the moment * Replace logic from isBlock * remove asi special logic * no args * remove concat * remove lvl * clean reg * realign * strange regex 'haviour * date --- indent/javascript.vim | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 44231e99..25ce893d 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: November 6, 2016 +" Last Change: November 12, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -73,7 +73,13 @@ endfunction " NOTE: moves the cursor function s:previous_token() - return search('\<\|[][`^!"%-/:-?{-~]','bW') ? s:token() : '' + let l:ln = line('.') + return search('\<\|[][`^!"%-/:-?{-~]','bW') ? + \ (s:token() == '/' || line('.') != l:ln) && + \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? + \ search('\/[/*]\&','bW') ? s:previous_token() : '' + \ : s:token() + \ : '' endfunction function s:Trim(ln) @@ -127,16 +133,14 @@ function s:iscontOne(i,num,cont) endfunction " https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader -function s:IsBlock(...) - let l:ln = get(a:000,0,line('.')) +function s:IsBlock() + let l:ln = line('.') let char = s:previous_token() let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' if char is '' || syn =~? 'regex' return 1 elseif syn =~? 'xml\|jsx' return char != '{' - elseif syn =~? 'comment' - return search('\/[/*]','bW') && s:IsBlock(l:ln) elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' From f177220ebea04d777196f0478d484c58643e0ed4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 13 Nov 2016 10:04:17 -0800 Subject: [PATCH 498/929] regex prettify --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 25ce893d..c77734e5 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -84,10 +84,10 @@ endfunction function s:Trim(ln) let pline = substitute(getline(a:ln),'\s*$','','') - let l:max = max([strridx(pline,'//'),strridx(pline,'/*'),0]) + let l:max = max([match(pline,'.*\zs\/[/*]'),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]) + let l:max = max([match(pline,'.*\zs\/[/*]'),0]) endwhile return pline endfunction From b3b85e34b744cffab67104cf455530d18a55f203 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 13 Nov 2016 14:50:53 -0800 Subject: [PATCH 499/929] trim from start of comment sequence (#709) * trim from start of comment sequence --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c77734e5..a0048d4a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -84,10 +84,10 @@ endfunction function s:Trim(ln) let pline = substitute(getline(a:ln),'\s*$','','') - let l:max = max([match(pline,'.*\zs\/[/*]'),0]) + let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),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([match(pline,'.*\zs\/[/*]'),0]) + let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) endwhile return pline endfunction From 540d3a572d5ab922f0773a87044b044f0740d922 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 13 Nov 2016 21:30:48 -0800 Subject: [PATCH 500/929] improve regex for s:Trim (#710) --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a0048d4a..2d49c982 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -84,10 +84,10 @@ endfunction function s:Trim(ln) let pline = substitute(getline(a:ln),'\s*$','','') - let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) + let l:max = max([match(pline,'.*\zs\%([^/]\zs\/\/\|\/\*\)'),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([match(pline,'.*[^/]\zs\/[/*]'),0]) + let l:max = max([match(pline,'.*\zs\%([^/]\zs\/\/\|\/\*\)'),0]) endwhile return pline endfunction From b8c62023da422199beaa9377960ebd373e51351c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 15 Nov 2016 19:08:21 -0800 Subject: [PATCH 501/929] add operators, regex experiment (#711) just adds typeof --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 2d49c982..763b99ed 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -94,9 +94,9 @@ endfunction " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', - \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|=>\@!\|in\%(stanceof\)\=\>\)') + \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|=>\@!\|typeof\>\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', - \ '\%([<=,.?/*^%|&:]\|+\@\|\\|\ Date: Wed, 16 Nov 2016 16:07:24 -0800 Subject: [PATCH 502/929] faster prevline (#713) is just as fast as before and also far quicker with a file like: https://raw.githubusercontent.com/sanctuary-js/sanctuary-def/master/index.js --- indent/javascript.vim | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 763b99ed..32ba1e65 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -153,15 +153,15 @@ endfunction " Find line above 'lnum' that isn't empty, in a comment, or in a string. function s:PrevCodeLine(lnum) - let l:lnum = prevnonblank(a:lnum) - while l:lnum - let syn = synIDattr(synID(l:lnum,matchend(getline(l:lnum), '^\s*[^''"`]'),0),'name') + let curp = [line('.'),col('.')] + call cursor(a:lnum+1,1) + while search('^\s*\%(\/\/\)\@!\S','bW') + let syn = synIDattr(synID(line('.'),matchend(getline('.'), '^\s*[^''"`]'),0),'name') if syn =~? 'html' return elseif syn !~? 'comment\|doc\|string\|template' - return l:lnum + return line('.') + call('cursor',curp) endif - let l:lnum = prevnonblank(l:lnum - 1) endwhile endfunction From f4245c4f794de2a923dd8ee634adc87352ef7748 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 16 Nov 2016 22:55:03 -0800 Subject: [PATCH 503/929] more correct comment match (#714) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 32ba1e65..b1c1fc79 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -192,7 +192,7 @@ function GetJavascriptIndent() if syns =~? 'comment\|doc' if l:line =~ '^\s*\*' return cindent(v:lnum) - elseif l:line !~ '^\s*\/' + elseif l:line !~ '^\s*\/[/*]' return -1 endif elseif syns =~? 'string\|template' && l:line !~ '^[''"]' From b18c6b88a687f5c1eb06ff1f559695ca15cf2d3a Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 18 Nov 2016 14:38:09 -0800 Subject: [PATCH 504/929] Basic improvement to jsClassDefinition This improves things a bit to ensure that extends keyword can accept a jsExpression. I think this should work as everywhere as expected... Probably worth testing though. --- syntax/javascript.vim | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 22733c78..4d3341f8 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -175,10 +175,11 @@ exe 'syntax match jsFunction /\/ skipwhite skipempty nextgroup=jsGene exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') " Classes -syntax keyword jsClassKeywords contained extends class +syntax keyword jsClassKeyword contained class +syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression syntax match jsClassNoise contained /\./ syntax match jsClassMethodType contained /\%(get\|set\|static\|async\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsFuncName,jsClassProperty -syntax match jsClassDefinition /\\%( [a-zA-Z_$][0-9a-zA-Z_$ \n.]*\)*/ contains=jsClassKeywords,jsClassNoise skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup +syntax region jsClassDefinition start=/\/ end=/\(\\s\+\)\@\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend @@ -290,7 +291,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsOperator Operator HiLink jsOf Operator HiLink jsStorageClass StorageClass - HiLink jsClassKeywords Keyword + HiLink jsClassKeyword Keyword + HiLink jsExtendsKeyword Keyword HiLink jsThis Special HiLink jsSuper Constant HiLink jsNan Number From 3efcf3111231c5737648c3eb9d4cea9320b98c70 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 18 Nov 2016 17:38:52 -0800 Subject: [PATCH 505/929] Adds jsSpreadExpression to jsBracket We were incorrectly not matching a spread in arrays. Whoops. Fixes #707 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 4d3341f8..ddf34515 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -135,7 +135,7 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize " Code blocks -syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression extend fold +syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold From ae9324a61c5b5b82db38cefa0325a0b36b2d3dd6 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 18 Nov 2016 23:04:47 -0800 Subject: [PATCH 506/929] improve ptoken (#719) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index b1c1fc79..ce8fb089 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -77,7 +77,7 @@ function s:previous_token() return search('\<\|[][`^!"%-/:-?{-~]','bW') ? \ (s:token() == '/' || line('.') != l:ln) && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? - \ search('\/[/*]\&','bW') ? s:previous_token() : '' + \ search('\%(\/\@ Date: Sun, 20 Nov 2016 11:21:37 -0800 Subject: [PATCH 507/929] remove dead code, rename function, date (#721) --- indent/javascript.vim | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index ce8fb089..83aae3a2 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: November 12, 2016 +" Last Change: November 20, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -14,9 +14,8 @@ let b:did_indent = 1 setlocal indentexpr=GetJavascriptIndent() setlocal autoindent nolisp nosmartindent setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e -setlocal cinoptions+=j1,J1 -let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys< cinoptions<' +let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' " Only define the function once. if exists('*GetJavascriptIndent') @@ -45,12 +44,12 @@ let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'" function s:skip_func(lnum) if !s:free || search('`\|\*\/','nW',a:lnum) - let s:free = !eval(s:skip_expr . " . '\\|html'") + let s:free = !eval(s:skip_expr) let s:looksyn = s:free ? line('.') : s:looksyn return !s:free endif let s:looksyn = line('.') - return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr . " . '\\|html'") + return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) endfunction if has('reltime') @@ -63,12 +62,12 @@ else endfunction endif -function s:current_char() +function s:looking_at() return getline('.')[col('.')-1] endfunction function s:token() - return s:current_char() =~ '\k' ? expand('') : s:current_char() + return s:looking_at() =~ '\k' ? expand('') : s:looking_at() endfunction " NOTE: moves the cursor @@ -156,10 +155,8 @@ function s:PrevCodeLine(lnum) let curp = [line('.'),col('.')] call cursor(a:lnum+1,1) while search('^\s*\%(\/\/\)\@!\S','bW') - let syn = synIDattr(synID(line('.'),matchend(getline('.'), '^\s*[^''"`]'),0),'name') - if syn =~? 'html' - return - elseif syn !~? 'comment\|doc\|string\|template' + if synIDattr(synID(line('.'),matchend(getline('.'), '^\s*[^''"`]'),0),'name') !~? + \ 'comment\|doc\|string\|template' return line('.') + call('cursor',curp) endif endwhile @@ -225,7 +222,7 @@ function GetJavascriptIndent() endif if idx + 1 - if idx == 2 && search('\S','bW',line('.')) && s:current_char() == ')' + if idx == 2 && search('\S','bW',line('.')) && s:looking_at() == ')' call s:GetPair('(',')','bW',s:skip_expr,200) endif return indent(line('.')) @@ -235,9 +232,9 @@ function GetJavascriptIndent() let num = 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 && s:current_char() == '{' && s:IsBlock() + if num && s:looking_at() == '{' && s:IsBlock() let stmt = 1 - if s:current_char() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' + if s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 && s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) if l:line =~# '^' . s:case_stmt From a87c94438b038a060fa2920055a50a0c1cf08186 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 20 Nov 2016 12:24:31 -0800 Subject: [PATCH 508/929] unneeded token call (#722) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 83aae3a2..35f047a3 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ endfunction function s:previous_token() let l:ln = line('.') return search('\<\|[][`^!"%-/:-?{-~]','bW') ? - \ (s:token() == '/' || line('.') != l:ln) && + \ (s:looking_at() == '/' || line('.') != l:ln) && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\%(\/\@ Date: Thu, 24 Nov 2016 10:08:01 -0800 Subject: [PATCH 509/929] paren start line as baseline in blocks (#725) --- indent/javascript.vim | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 35f047a3..57972bc6 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: November 20, 2016 +" Last Change: November 24, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -93,7 +93,7 @@ endfunction " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', - \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|=>\@!\|typeof\>\|in\%(stanceof\)\=\>\)') + \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|=>\@!\|typeof\>\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.?/*^%|&:]\|+\@\|\ 0 && s:previous_token() ==# 'switch' - let switch_offset = &cino !~ ':' || !has('float') ? s:W : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) - if l:line =~# '^' . s:case_stmt - return indent(num) + switch_offset + if s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 + let num = line('.') + if s:previous_token() ==# 'switch' + let switch_offset = &cino !~ ':' || !has('float') ? s:W : + \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) + if l:line =~# '^' . s:case_stmt + return indent(num) + switch_offset + elseif pline =~# s:case_stmt . '$' + return indent(l:lnum) + s:W + endif endif - let stmt = pline !~# s:case_stmt . '$' endif + let stmt = 1 endif if stmt || !num From 91b0a0da0c2b1af1af168e5149cdc9a6eb99a190 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Thu, 24 Nov 2016 12:18:27 -0800 Subject: [PATCH 510/929] Fix end pattern for import region There was a bug where import regions required a semicolon, no longer. This fixes issue #726 --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index ddf34515..fad38627 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -44,7 +44,7 @@ syntax keyword jsModuleOperators contained as syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment syntax match jsModuleAsterisk contained /*/ syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression -syntax region jsImportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk +syntax region jsImportContainer start=/\/ end=/\%("\|'\s*\)\@<=\%(;\|\n\)/ contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk keepend syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression syntax region jsExportBlock contained matchgroup=jsExportBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment From 3873adbff5f1b626130bb7f1dad8b62b1aec1b7f Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 25 Nov 2016 11:17:38 -0800 Subject: [PATCH 511/929] Completely refactored how import/export work I've never liked how I originally built import/export. This refactors everything keeping the logic simpler and also share matches between them. Using regions I think was a mistake on my part, I've opted instead to use nextgroups which works much better. --- syntax/javascript.vim | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index fad38627..bbe6ff98 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -37,16 +37,14 @@ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false " Modules -syntax keyword jsModuleKeywords contained import -syntax keyword jsModuleKeywords contained export skipwhite skipempty nextgroup=jsExportBlock,jsModuleDefault -syntax keyword jsModuleOperators contained from -syntax keyword jsModuleOperators contained as -syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment -syntax match jsModuleAsterisk contained /*/ -syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup=@jsExpression -syntax region jsImportContainer start=/\/ end=/\%("\|'\s*\)\@<=\%(;\|\n\)/ contains=jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk keepend -syntax region jsExportContainer start=/\ / end="\%(;\|$\)" contains=jsModuleKeywords,jsModuleOperators,jsStorageClass,jsModuleDefault,@jsExpression -syntax region jsExportBlock contained matchgroup=jsExportBraces start=/{/ end=/}/ contains=jsModuleOperators,jsNoise,jsComment +syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup +syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword +syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma +syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression +syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom +syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword +syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString +syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend @@ -154,6 +152,7 @@ syntax region jsRepeatBlock contained matchgroup=jsRepeatBraces s syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression extend fold syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression extend fold syntax region jsObject matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator extend fold +syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/ @@ -229,7 +228,7 @@ if exists("javascript_plugin_flow") endif syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsBlock,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo -syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword +syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword " Define the default highlighting. " For version 5.7 and earlier: only when not done already @@ -319,7 +318,6 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsFinallyBraces jsBraces HiLink jsRepeatBraces jsBraces HiLink jsSwitchBraces jsBraces - HiLink jsExportBraces jsBraces HiLink jsSpecial Special HiLink jsTemplateVar Special HiLink jsTemplateBraces jsBraces @@ -327,14 +325,17 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsGlobalNodeObjects Constant HiLink jsExceptions Constant HiLink jsBuiltins Constant - HiLink jsModuleKeywords Include - HiLink jsModuleOperators Include - HiLink jsModuleDefault Include + HiLink jsImport Include + HiLink jsExport Include + HiLink jsExportDefault Include + HiLink jsModuleAs Include + HiLink jsModuleComma jsNoise + HiLink jsModuleAsterisk Noise + HiLink jsFrom Include HiLink jsDecorator Special HiLink jsDecoratorFunction Function HiLink jsParensDecorator jsParens HiLink jsFuncArgOperator jsFuncArgs - HiLink jsModuleAsterisk Noise HiLink jsClassProperty jsObjectKey HiLink jsSpreadOperator Operator HiLink jsRestOperator Operator From 66f120cb0cb87977e7275aa49b6e1a73405a3549 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Fri, 25 Nov 2016 11:30:17 -0800 Subject: [PATCH 512/929] Improve default handling `default` is more like a StorageClass, so I've opted to highlight it more appropriately. Also make it highlight properly within `jsModuleGroup` as well. --- syntax/javascript.vim | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index bbe6ff98..a526c4cf 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -37,14 +37,15 @@ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false " Modules -syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup -syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword -syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma -syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression -syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom -syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword -syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString -syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup +syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup +syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword +syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma +syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression +syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma +syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom +syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup +syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString +syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup " Strings, Templates, Numbers syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend @@ -327,7 +328,8 @@ if version >= 508 || !exists("did_javascript_syn_inits") HiLink jsBuiltins Constant HiLink jsImport Include HiLink jsExport Include - HiLink jsExportDefault Include + HiLink jsExportDefault StorageClass + HiLink jsExportDefaultGroup jsExportDefault HiLink jsModuleAs Include HiLink jsModuleComma jsNoise HiLink jsModuleAsterisk Noise From 1801887f2e39c984d861368f3e0ea51b8555b0d2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 25 Nov 2016 17:56:22 -0800 Subject: [PATCH 513/929] operator cleaning (#729) --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 57972bc6..a261169b 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -93,9 +93,9 @@ endfunction " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', - \ '\%([<>,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|=>\@!\|typeof\>\|in\%(stanceof\)\=\>\)') + \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', - \ '\%([<=,.?/*^%|&:]\|+\@\|\\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$' function s:OneScope(lnum,text) if cursor(a:lnum, match(' ' . a:text, ')$')) + 1 && From 8265877f70452d0a8c09255c52f4ac0d9fb145e0 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 25 Nov 2016 21:25:06 -0800 Subject: [PATCH 514/929] indentkeys (#732) add values to indentkeys rather than replace user's --- README.md | 1 + indent/javascript.vim | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a1137f79..23ec94af 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ variables: ## Indentation Specific * `:h cino-:` +* `:h 'indentkeys'` ## Contributing diff --git a/indent/javascript.vim b/indent/javascript.vim index a261169b..3da887e0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -13,7 +13,7 @@ let b:did_indent = 1 " Now, set up our indentation expression and keys that trigger it. setlocal indentexpr=GetJavascriptIndent() setlocal autoindent nolisp nosmartindent -setlocal indentkeys=0{,0},0),0],:,!^F,o,O,e +setlocal indentkeys+=0],0) let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<' From 18ff935c9c126e14fd62e0df8e688fc54598e867 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 26 Nov 2016 01:13:52 -0800 Subject: [PATCH 515/929] optimization: no continuation at block start (#733) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 3da887e0..86a814cf 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -248,7 +248,7 @@ function GetJavascriptIndent() let stmt = 1 endif - if stmt || !num + if stmt && pline[-1:] != '{' || !num let isOp = l:line =~# s:opfirst || pline =~# s:continuation && \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' let bL = s:iscontOne(l:lnum,num,isOp) From 3dd27d6316c6031c2a7e6ae0a69ace683e2b431b Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 26 Nov 2016 12:14:17 -0800 Subject: [PATCH 516/929] Adding support for Flow type imports --- extras/flow.vim | 1 + syntax/javascript.vim | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/extras/flow.vim b/extras/flow.vim index 028ea3fc..b181e0e1 100644 --- a/extras/flow.vim +++ b/extras/flow.vim @@ -13,6 +13,7 @@ syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster +syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp diff --git a/syntax/javascript.vim b/syntax/javascript.vim index a526c4cf..478b4b46 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -37,7 +37,7 @@ syntax keyword jsBooleanTrue true syntax keyword jsBooleanFalse false " Modules -syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup +syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression From 25ceb55782cab1c83089e399b8c683fbee1fdfd2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 27 Nov 2016 13:02:23 -0800 Subject: [PATCH 517/929] cleaning, Rework prevcodeline() (#736) --- indent/javascript.vim | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 86a814cf..62b9f453 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -150,16 +150,14 @@ function s:IsBlock() \ + split('-=~!<*+,/?^%|&([','\zs'), char) < (0 + (line('.') != l:ln)) endfunction -" Find line above 'lnum' that isn't empty, in a comment, or in a string. +" Find line above 'lnum' that isn't empty or in a comment function s:PrevCodeLine(lnum) - let curp = [line('.'),col('.')] - call cursor(a:lnum+1,1) - while search('^\s*\%(\/\/\)\@!\S','bW') - if synIDattr(synID(line('.'),matchend(getline('.'), '^\s*[^''"`]'),0),'name') !~? - \ 'comment\|doc\|string\|template' - return line('.') + call('cursor',curp) - endif + let l:n = prevnonblank(a:lnum) + while getline(l:n) =~ '^\s*\/[/*]' || synIDattr(synID(l:n,1,0),'name') =~? + \ 'comment\|doc' + let l:n = prevnonblank(l:n-1) endwhile + return l:n endfunction " Check if line 'lnum' has a balanced amount of parentheses. @@ -225,10 +223,10 @@ function GetJavascriptIndent() if idx == 2 && search('\S','bW',line('.')) && s:looking_at() == ')' call s:GetPair('(',')','bW',s:skip_expr,200) endif - return indent(line('.')) + return indent('.') endif - let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : [line('.'),col('.')]) + let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) let num = b:js_cache[1] let [s:W, pline, isOp, stmt, bL, switch_offset] = [s:sw(), s:Trim(l:lnum),0,0,0,0] From c1d4b3b0726164df803dc4c8a249ca3b4bee7e54 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 28 Nov 2016 22:01:53 -0800 Subject: [PATCH 518/929] keywords used as props (#737) --- indent/javascript.vim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 62b9f453..36cf7add 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -36,7 +36,7 @@ else endfunction endif -let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' +let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|\%(\.\s*\)\@=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', - \ '\%([<=,.~!?/*^%|&:]\|+\@\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$' + \ '\%([<=,.~!?/*^%|&:]\|+\@\|\%(\.\s*\)\@\)$\C')) + 1 + return cursor(a:lnum, match(' ' . a:text, '\%(\%(\.\s*\)\@\)$\C')) + 1 endfunction function s:iscontOne(i,num,cont) From 1bc94813713b782de5d020b6c947a931fe7faa63 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 29 Nov 2016 01:24:27 -0800 Subject: [PATCH 519/929] date, minor regex --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 36cf7add..754e5a79 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: November 24, 2016 +" Last Change: November 29, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -36,7 +36,7 @@ else endfunction endif -let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|\%(\.\s*\)\@\s*[^ \t:].*\|default\s*\):\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' From 982f699defd96d94566c4184d2f04c8d014bdcb9 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 30 Nov 2016 12:05:31 -0800 Subject: [PATCH 520/929] small optimization (#738) * small optimization removes a syntax check unless possible comment * refactor isBlock for keywords makes isBlock more accurate * cleaning * cursor() is 0 for success --- indent/javascript.vim | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 754e5a79..672158d6 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -74,7 +74,7 @@ endfunction function s:previous_token() let l:ln = line('.') return search('\<\|[][`^!"%-/:-?{-~]','bW') ? - \ (s:looking_at() == '/' || line('.') != l:ln) && + \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\%(\/\@\|\%(\.\s*\)\@ 0 let token = s:previous_token() if index(split('await each'),token) + 1 @@ -106,7 +106,7 @@ function s:OneScope(lnum,text) endif return index(split('for if let while with'),token) + 1 endif - return cursor(a:lnum, match(' ' . a:text, '\%(\%(\.\s*\)\@\)$\C')) + 1 + return !cursor(a:lnum, match(' ' . a:text, '\%(\%(\.\s*\)\@\)$\C')) endfunction function s:iscontOne(i,num,cont) @@ -140,14 +140,16 @@ function s:IsBlock() return 1 elseif syn =~? 'xml\|jsx' return char != '{' + elseif char =~ '\k' + return index(split('return const let import export yield default delete var void typeof throw new in instanceof') + \ ,char) < (0 + (line('.') != l:ln)) || s:previous_token() == '.' elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' - return cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) + 1 && + return !cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) && \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif - return index(split('return const let import export yield default delete var void typeof throw new in instanceof') - \ + split('-=~!<*+,/?^%|&([','\zs'), char) < (0 + (line('.') != l:ln)) + return char !~ '[-=~!<*+,/?^%|&([]' endfunction " Find line above 'lnum' that isn't empty or in a comment From 7ceb23304343759608ddfc5aca74f4f892cf4619 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 30 Nov 2016 23:53:54 -0800 Subject: [PATCH 521/929] misc indent changes (#739) * misc indent changes * more refactor (#740) --- indent/javascript.vim | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 672158d6..1bdd6ab4 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,7 +73,7 @@ endfunction " NOTE: moves the cursor function s:previous_token() let l:ln = line('.') - return search('\<\|[][`^!"%-/:-?{-~]','bW') ? + return search('.\>\|[][`^!"%-/:-?{-~]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\%(\/\@=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.~!?/*^%|&:]\|+\@\|\%(\.\s*\)\@ 0 +" get the line (or if empty, look further back) of code stripped of comments +function s:Trim(lnum,...) + let p = a:0 ? [0,0] : getpos('.')[1:2] + let r = !cursor(a:lnum+1,1) && s:previous_token() isnot '' ? strpart(getline('.'),0,col('.')) : '' + call call('cursor',p) + return r +endfunction + +function s:OneScope(lnum) + let pline = s:Trim(a:lnum,1) + if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 let token = s:previous_token() if index(split('await each'),token) + 1 return s:previous_token() ==# 'for' endif return index(split('for if let while with'),token) + 1 endif - return !cursor(a:lnum, match(' ' . a:text, '\%(\%(\.\s*\)\@\)$\C')) + return pline =~# '\%(\%(\.\s*\)\@\)$' endfunction function s:iscontOne(i,num,cont) @@ -116,7 +114,7 @@ function s:iscontOne(i,num,cont) let bL = 0 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:Trim(l:i)) + if s:OneScope(l:i) let bL += s:W let [l:cont, l:i] = [0, line('.')] elseif !l:cont @@ -136,9 +134,7 @@ function s:IsBlock() let l:ln = line('.') let char = s:previous_token() let syn = char =~ '[{>/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' - if char is '' || syn =~? 'regex' - return 1 - elseif syn =~? 'xml\|jsx' + if syn =~? 'xml\|jsx' return char != '{' elseif char =~ '\k' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') @@ -149,7 +145,7 @@ function s:IsBlock() return !cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) && \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') endif - return char !~ '[-=~!<*+,/?^%|&([]' + return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' endfunction " Find line above 'lnum' that isn't empty or in a comment From 14919946c45e52f99f3a81e896daa7c974f6488c Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 1 Dec 2016 12:01:27 -0800 Subject: [PATCH 522/929] date, code documenting --- indent/javascript.vim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1bdd6ab4..451e521b 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: November 29, 2016 +" Last Change: December 1, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -87,7 +87,8 @@ let s:opfirst = '^' . get(g:,'javascript_opfirst', let s:continuation = get(g:,'javascript_continuation', \ '\%([<=,.~!?/*^%|&:]\|+\@\|\%(\.\s*\)\@ Date: Thu, 1 Dec 2016 12:40:10 -0800 Subject: [PATCH 523/929] Indent: use previous Trim, with new interface (#741) --- indent/javascript.vim | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 451e521b..7739fc86 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -89,11 +89,14 @@ let s:continuation = get(g:,'javascript_continuation', " get the line of code stripped of comments. if called with two args, leave " cursor at the last non-comment char. -function s:Trim(lnum,...) - let p = a:0 ? [0,0] : getpos('.')[1:2] - let r = !cursor(a:lnum+1,1) && s:previous_token() isnot '' ? strpart(getline('.'),0,col('.')) : '' - call call('cursor',p) - return r +function s:Trim(ln,...) + let pline = substitute(getline(a:ln),'\s*$','','') + let l:max = max([match(pline,'.*\zs\%([^/]\zs\/\/\|\/\*\)'),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([match(pline,'.*\zs\%([^/]\zs\/\/\|\/\*\)'),0]) + endwhile + return !a:0 || cursor(a:ln,strlen(pline)) ? pline : pline endfunction function s:OneScope(lnum) From 6d81ec817a2ab7742d68d1b628a352abb50a4c9a Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 10:55:17 -0800 Subject: [PATCH 524/929] only Trim() if in a block (#743) --- indent/javascript.vim | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7739fc86..7267d014 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -231,9 +231,10 @@ function GetJavascriptIndent() let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2]) let num = 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 && s:looking_at() == '{' && s:IsBlock() - if s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 + let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0] + if !num || s:looking_at() == '{' && s:IsBlock() + let pline = s:Trim(l:lnum) + if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 let num = line('.') if s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : @@ -245,14 +246,12 @@ function GetJavascriptIndent() endif endif endif - let stmt = 1 - endif - - if stmt && pline[-1:] != '{' || !num - let isOp = l:line =~# s:opfirst || pline =~# s:continuation && - \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' - let bL = s:iscontOne(l:lnum,num,isOp) - let bL -= (bL && l:line[0] == '{') * s:W + if !num || pline[-1:] !~ '[{;]' + let isOp = l:line =~# s:opfirst || pline =~# s:continuation && + \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' + let bL = s:iscontOne(l:lnum,num,isOp) + let bL -= (bL && l:line[0] == '{') * s:W + endif endif " main return From 9f4772175444c1b8610f64a13909a93d9f1b8f66 Mon Sep 17 00:00:00 2001 From: Matt Carter Date: Sat, 3 Dec 2016 07:37:22 +1000 Subject: [PATCH 525/929] Added conceal for no-argument arrow functions - either `()=>` or `_=>` (#735) * Added conceal for no-argument arrow functions - either `()=>` or `_=>` * Split Arrow+no-arg and Arrow+underscore into two seperate config variables * Added README note about enabling conceal mode along with an example to toggle via key bindings --- README.md | 36 ++++++++++++++++++++++++------------ syntax/javascript.vim | 2 ++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 23ec94af..959b254f 100644 --- a/README.md +++ b/README.md @@ -84,18 +84,30 @@ global vim option, we do not set it ourselves. ## Concealing Characters You can customize concealing characters by defining one or more of the following -variables: - - let g:javascript_conceal_function = "ƒ" - let g:javascript_conceal_null = "ø" - let g:javascript_conceal_this = "@" - let g:javascript_conceal_return = "⇚" - let g:javascript_conceal_undefined = "¿" - let g:javascript_conceal_NaN = "ℕ" - let g:javascript_conceal_prototype = "¶" - let g:javascript_conceal_static = "•" - let g:javascript_conceal_super = "Ω" - let g:javascript_conceal_arrow_function = "⇒" +variables (these are all disabled by default): + + let g:javascript_conceal_function = "ƒ" + let g:javascript_conceal_null = "ø" + let g:javascript_conceal_this = "@" + let g:javascript_conceal_return = "⇚" + let g:javascript_conceal_undefined = "¿" + let g:javascript_conceal_NaN = "ℕ" + let g:javascript_conceal_prototype = "¶" + let g:javascript_conceal_static = "•" + let g:javascript_conceal_super = "Ω" + let g:javascript_conceal_arrow_function = "⇒" + let g:javascript_conceal_noarg_arrow_function = "🞅" + let g:javascript_conceal_underscore_arrow_function = "🞅" + + +You can enable concealing within VIM with: + + set conceallevel=1 + +OR if you wish to toggle concealing you may wish to bind a command such as the following which will map LEADER+L (leader is usually the comma key) to toggling conceal mode: + + map l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1" + ## Indentation Specific diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 478b4b46..3685646c 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -173,6 +173,8 @@ syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipe exe 'syntax match jsFunction /\/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '') exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '') +exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '') +exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '') " Classes syntax keyword jsClassKeyword contained class From df14847ad3a1a7a24c1d98e28fa8f9a8564ebf42 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 13:41:54 -0800 Subject: [PATCH 526/929] fix readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 959b254f..dedd48f5 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ global vim option, we do not set it ourselves. ## Concealing Characters -You can customize concealing characters by defining one or more of the following +You can customize concealing characters, if your font provides the character you want, by defining one or more of the following variables (these are all disabled by default): let g:javascript_conceal_function = "ƒ" @@ -104,7 +104,7 @@ You can enable concealing within VIM with: set conceallevel=1 -OR if you wish to toggle concealing you may wish to bind a command such as the following which will map LEADER+L (leader is usually the comma key) to toggling conceal mode: +OR if you wish to toggle concealing you may wish to bind a command such as the following which will map LEADER+L (leader is usually the `\` key) to toggling conceal mode: map l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1" From 41a3bceb433947340e651de8e111eea436e71fd2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 13:44:04 -0800 Subject: [PATCH 527/929] more readme fixes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dedd48f5..c2dd3475 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ You can enable concealing within VIM with: set conceallevel=1 -OR if you wish to toggle concealing you may wish to bind a command such as the following which will map LEADER+L (leader is usually the `\` key) to toggling conceal mode: +OR if you wish to toggle concealing you may wish to bind a command such as the following which will map l (leader is usually the `\` key) to toggling conceal mode: map l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1" From ba9501bfc763a9d648c2bf8ba90dde34bfda6301 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 13:44:46 -0800 Subject: [PATCH 528/929] markdown fixes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c2dd3475..8e8bf434 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ You can enable concealing within VIM with: set conceallevel=1 -OR if you wish to toggle concealing you may wish to bind a command such as the following which will map l (leader is usually the `\` key) to toggling conceal mode: +OR if you wish to toggle concealing you may wish to bind a command such as the following which will map `l` (leader is usually the `\` key) to toggling conceal mode: map l :exec &conceallevel ? "set conceallevel=0" : "set conceallevel=1" From 9e0aa00b618cc2b5c78375322a9d1f91e50a5495 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 13:49:05 -0800 Subject: [PATCH 529/929] clarify readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e8bf434..ba921744 100644 --- a/README.md +++ b/README.md @@ -84,7 +84,7 @@ global vim option, we do not set it ourselves. ## Concealing Characters You can customize concealing characters, if your font provides the character you want, by defining one or more of the following -variables (these are all disabled by default): +variables: let g:javascript_conceal_function = "ƒ" let g:javascript_conceal_null = "ø" From d2bc5d49e3306caca3dc81665b93112c239b1d0e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 2 Dec 2016 15:38:56 -0800 Subject: [PATCH 530/929] remove conditional --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7267d014..a7513ff2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -246,7 +246,7 @@ function GetJavascriptIndent() endif endif endif - if !num || pline[-1:] !~ '[{;]' + if pline[-1:] !~ '[{;]' let isOp = l:line =~# s:opfirst || pline =~# s:continuation && \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' let bL = s:iscontOne(l:lnum,num,isOp) From d377f45bd8697e544efc4e9ce933bcc05f54c2f4 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Dec 2016 11:52:47 -0800 Subject: [PATCH 531/929] regex simplified in trim() (#745) --- indent/javascript.vim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index a7513ff2..fdf8c9ac 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -76,7 +76,7 @@ function s:previous_token() return search('.\>\|[][`^!"%-/:-?{-~]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? - \ search('\%(\/\@/]' || l:ln != line('.') ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' + let syn = char =~ '[{>/]' ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' if syn =~? 'xml\|jsx' return char != '{' elseif char =~ '\k' From 554ae9b24e7fb5bf7a6bd4ba8502758a9e18a744 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Dec 2016 20:06:47 -0800 Subject: [PATCH 532/929] package-manager info (#744) --- README.md | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index ba921744..2c51c0ad 100644 --- a/README.md +++ b/README.md @@ -6,32 +6,12 @@ improved indentation. ## Installation -### Install with [Vundle](https://github.com/gmarik/vundle) - -Add to vimrc: - - Plugin 'pangloss/vim-javascript' - -And install it: - - :so ~/.vimrc - :PluginInstall - -### Install with [vim-plug](https://github.com/junegunn/vim-plug) - -Add to vimrc: - - Plug 'pangloss/vim-javascript' - -And install it: - - :so ~/.vimrc - :PlugInstall - ### Install with [pathogen](https://github.com/tpope/vim-pathogen) git clone https://github.com/pangloss/vim-javascript.git ~/.vim/bundle/vim-javascript +alternatively, use a package manager like [vim-plug](https://github.com/junegunn/vim-plug) + ## Configuration Variables @@ -124,11 +104,6 @@ maintainer(s) then, hopefully, merged. Thank you! -## Bug Reports - -Report a bug on [GitHub Issues](https://github.com/pangloss/vim-javascript/issues). - - ## License Distributed under the same terms as Vim itself. See `:help license`. From a210f3916ed7d1615d8ae86549935a8dc1a64066 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 3 Dec 2016 22:29:01 -0800 Subject: [PATCH 533/929] fix code comment --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index fdf8c9ac..0ede1ece 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -202,7 +202,7 @@ function GetJavascriptIndent() let l:line = substitute(substitute(l:line,'^\s*\%(\/\*.\{-}\*\/\s*\)*','',''),'^\/[/*].*','','') - " the containing paren, bracket, curly. Many hacks for performance + " the containing paren, bracket, or curly. Many hacks for performance call cursor(v:lnum,1) let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1 if indent(l:lnum) From d81b076b594284b3d234dd924dc73f4436bd5a77 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 4 Dec 2016 09:57:50 -0800 Subject: [PATCH 534/929] make regex for token() more intuitive (#746) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 0ede1ece..c08764ec 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,7 +73,7 @@ endfunction " NOTE: moves the cursor function s:previous_token() let l:ln = line('.') - return search('.\>\|[][`^!"%-/:-?{-~]','bW') ? + return search('.\>\|[^[:alnum:][:space:]_$]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' From 039c611e1a6af83e3ce34283630a9d811fc97981 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 5 Dec 2016 12:28:20 -0800 Subject: [PATCH 535/929] refactor v:lnum cleaning (#748) faster, more readable --- indent/javascript.vim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c08764ec..4922b541 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -199,11 +199,17 @@ function GetJavascriptIndent() if !l:lnum return endif + call cursor(v:lnum,1) - let l:line = substitute(substitute(l:line,'^\s*\%(\/\*.\{-}\*\/\s*\)*','',''),'^\/[/*].*','','') + let l:line = l:line[indent('.'):] + if l:line[:1] == '/*' + let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','') + endif + if l:line =~ '^\/[/*]' + let l:line = '' + endif " the containing paren, bracket, or curly. Many hacks for performance - call cursor(v:lnum,1) let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1 if indent(l:lnum) let [s:looksyn,s:free] = [v:lnum - 1,1] From 82f064a12a2c50fbaa2716756613a56010ce5402 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 5 Dec 2016 12:36:50 -0800 Subject: [PATCH 536/929] match isk in token regex (#749) the @ is a vim/vi default part of iskeyword. also decorators --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4922b541..d48faf2f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,7 +73,7 @@ endfunction " NOTE: moves the cursor function s:previous_token() let l:ln = line('.') - return search('.\>\|[^[:alnum:][:space:]_$]','bW') ? + return search('.\>\|[^[:alnum:][:space:]_$@]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' From e807258688e5355dada2d1cf963f614f15468284 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Mon, 5 Dec 2016 12:50:53 -0800 Subject: [PATCH 537/929] Revert "match isk in token regex" (#750) --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d48faf2f..4922b541 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -73,7 +73,7 @@ endfunction " NOTE: moves the cursor function s:previous_token() let l:ln = line('.') - return search('.\>\|[^[:alnum:][:space:]_$@]','bW') ? + return search('.\>\|[^[:alnum:][:space:]_$]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' From 3cc3ef7c112b4a5fa465239712aba56111850900 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 6 Dec 2016 11:03:39 -0800 Subject: [PATCH 538/929] cleaning (#751) * cleaning * update cache inside of string * switch case accuracy * case * Update javascript.vim * edge cases * cleaning * ws * extract to var --- indent/javascript.vim | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 4922b541..7794a59f 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -36,10 +36,12 @@ else endfunction endif -let s:case_stmt = '\%(\.\s*\)\@\s*[^ \t:].*\|default\s*\):\C' +let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' +let s:syng_str = 'string\|template' +let s:syng_com = '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."'" function s:skip_func(lnum) @@ -75,7 +77,7 @@ function s:previous_token() let l:ln = line('.') return search('.\>\|[^[:alnum:][:space:]_$]','bW') ? \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && - \ synIDattr(synID(line('.'),col('.'),0),'name') =~? 'comment' ? + \ synIDattr(synID(line('.'),col('.'),0),'name') =~? s:syng_com ? \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' \ : s:token() \ : '' @@ -92,7 +94,7 @@ let s:continuation = get(g:,'javascript_continuation', function s:Trim(ln,...) let pline = substitute(getline(a:ln),'\s*$','','') let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) - while l:max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? 'comment\|doc' + while l:max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? s:syng_com let pline = substitute(strpart(pline, 0, l:max),'\s*$','','') let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) endwhile @@ -147,7 +149,7 @@ function s:IsBlock() return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' return !cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) && - \ (expand('') !=# 'default' || s:previous_token() !~ '[,{]') + \ (expand('') !=# 'default' || s:previous_token() !~ '[{,.]') endif return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' endfunction @@ -156,7 +158,7 @@ endfunction function s:PrevCodeLine(lnum) let l:n = prevnonblank(a:lnum) while getline(l:n) =~ '^\s*\/[/*]' || synIDattr(synID(l:n,1,0),'name') =~? - \ 'comment\|doc' + \ s:syng_com let l:n = prevnonblank(l:n-1) endwhile return l:n @@ -186,13 +188,16 @@ function GetJavascriptIndent() let syns = synIDattr(synID(v:lnum, 1, 0), 'name') " start with strings,comments,etc. - if syns =~? 'comment\|doc' + if syns =~? s:syng_com if l:line =~ '^\s*\*' return cindent(v:lnum) elseif l:line !~ '^\s*\/[/*]' return -1 endif - elseif syns =~? 'string\|template' && l:line !~ '^[''"]' + elseif syns =~? s:syng_str && l:line !~ '^[''"]' + if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1) + let b:js_cache[0] = v:lnum + endif return -1 endif let l:lnum = s:PrevCodeLine(v:lnum - 1) @@ -211,20 +216,19 @@ function GetJavascriptIndent() " the containing paren, bracket, or curly. Many hacks for performance 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 || 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) + if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum && + \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum)) + call call('cursor',b:js_cache[1:]) + else + let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) && + \ synIDattr(synID(l:lnum,1,0),'name') !~? s:syng_str) * l:lnum] + if idx + 1 + call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000,top) elseif indent(v:lnum) && syns =~? 'block' - call s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000) + call s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000,top) else - call s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000) + call s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000,top) endif - else - call s:GetPair('[({[]','[])}]','bW',s:skip_expr,200,l:lnum) endif if idx + 1 @@ -245,7 +249,7 @@ function GetJavascriptIndent() if s:previous_token() ==# 'switch' let switch_offset = &cino !~ ':' || !has('float') ? s:W : \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) - if l:line =~# '^' . s:case_stmt + if pline[-1:] != '.' && l:line =~# '^' . s:case_stmt return indent(num) + switch_offset elseif pline =~# s:case_stmt . '$' return indent(l:lnum) + s:W From afecff2b544a9c479debba6520b5678d8ea7d25e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Dec 2016 11:05:45 -0800 Subject: [PATCH 539/929] v:lnum cleaning --- indent/javascript.vim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 7794a59f..c9a7b7d0 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -204,9 +204,8 @@ function GetJavascriptIndent() if !l:lnum return endif - call cursor(v:lnum,1) - let l:line = l:line[indent('.'):] + let l:line = substitute(l:line,'^\s*','','') if l:line[:1] == '/*' let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','') endif @@ -215,6 +214,7 @@ function GetJavascriptIndent() endif " the containing paren, bracket, or curly. Many hacks for performance + call cursor(v:lnum,1) let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -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 0bf390d9c795724196379496ebb465b3a15183d8 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 7 Dec 2016 15:04:57 -0800 Subject: [PATCH 540/929] optimize indent with basic syntax file (#753) --- indent/javascript.vim | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c9a7b7d0..687d8a13 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: December 1, 2016 +" Last Change: December 7, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -44,8 +44,9 @@ let s:syng_str = 'string\|template' let s:syng_com = '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."'" -function s:skip_func(lnum) - if !s:free || search('`\|\*\/','nW',a:lnum) + +function s:skip_func() + if !s:free || search('`\|\*\/','nW',s:looksyn) let s:free = !eval(s:skip_expr) let s:looksyn = s:free ? line('.') : s:looksyn return !s:free @@ -54,6 +55,22 @@ function s:skip_func(lnum) return (search('\/','nbW',s:looksyn) || search('[''"\\]','nW',s:looksyn)) && eval(s:skip_expr) endfunction +function s:alternatePair(stop) + while search('[][(){}]','bW',a:stop) + if !s:skip_func() + let idx = stridx('])}',s:looking_at()) + if idx + 1 + if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop) + break + endif + else + return + endif + endif + endwhile + call cursor(v:lnum,1) +endfunction + if has('reltime') 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:000),a:time) @@ -223,11 +240,11 @@ function GetJavascriptIndent() let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) && \ synIDattr(synID(l:lnum,1,0),'name') !~? s:syng_str) * l:lnum] if idx + 1 - call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func(s:looksyn)',2000,top) + call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top) elseif indent(v:lnum) && syns =~? 'block' - call s:GetPair('{','}','bW','s:skip_func(s:looksyn)',2000,top) + call s:GetPair('{','}','bW','s:skip_func()',2000,top) else - call s:GetPair('[({[]','[])}]','bW','s:skip_func(s:looksyn)',2000,top) + call s:alternatePair(top) endif endif From 0dd9ad3b43a2626014bc33b1de5f4f75c63f2acc Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Wed, 7 Dec 2016 19:29:31 -0800 Subject: [PATCH 541/929] Fix array destructuring as func arg definitions Had object destructuring, forgot to include array destructuring. All should be well in the world now. --- syntax/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syntax/javascript.vim b/syntax/javascript.vim index 3685646c..52bafbac 100644 --- a/syntax/javascript.vim +++ b/syntax/javascript.vim @@ -141,7 +141,7 @@ syntax region jsParenIfElse contained matchgroup=jsParensIfElse s syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold -syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold +syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold syntax region jsIfElseBlock contained matchgroup=jsIfElseBraces start=/{/ end=/}/ contains=@jsAll extend fold From 9db487d00381050ac6eae095706716284beed501 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Fri, 9 Dec 2016 23:43:20 -0800 Subject: [PATCH 542/929] add option in s:prev_token() (#757) --- indent/javascript.vim | 116 +++++++++++++++++++++++------------------- 1 file changed, 64 insertions(+), 52 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 687d8a13..39629765 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: December 7, 2016 +" Last Change: December 9, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -36,7 +36,16 @@ else endfunction endif -let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' +" searchpair() wrapper +if has('reltime') + 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:000),a:time) + endfunction +else + 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 " Regex of syntax group names that are or delimit string or are comments. let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template' @@ -71,15 +80,9 @@ function s:alternatePair(stop) call cursor(v:lnum,1) endfunction -if has('reltime') - 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:000),a:time) - endfunction -else - 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 +function s:syn_at(l,c) + return synIDattr(synID(a:l,a:c,0),'name') +endfunction function s:looking_at() return getline('.')[col('.')-1] @@ -89,17 +92,20 @@ function s:token() return s:looking_at() =~ '\k' ? expand('') : s:looking_at() endfunction -" NOTE: moves the cursor -function s:previous_token() - let l:ln = line('.') - return search('.\>\|[^[:alnum:][:space:]_$]','bW') ? - \ (s:looking_at() == '/' || line('.') != l:ln && getline('.') =~ '\/\/') && - \ synIDattr(synID(line('.'),col('.'),0),'name') =~? s:syng_com ? +" NOTE: Moves the cursor, unless a arg is supplied. +function s:previous_token(...) + let l:pos = getpos('.')[1:2] + return [search('.\>\|[^[:alnum:][:space:]_$]','bW') ? + \ (s:looking_at() == '/' || line('.') != l:pos[0] && getline('.') =~ '\/\/') && + \ s:syn_at(line('.'),col('.')) =~? s:syng_com ? \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' \ : s:token() - \ : '' + \ : ''][a:0 && call('cursor',l:pos)] endfunction +" switch case label pattern +let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' + " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') @@ -111,13 +117,40 @@ let s:continuation = get(g:,'javascript_continuation', function s:Trim(ln,...) let pline = substitute(getline(a:ln),'\s*$','','') let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) - while l:max && synIDattr(synID(a:ln, strlen(pline), 0), 'name') =~? s:syng_com + while l:max && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com let pline = substitute(strpart(pline, 0, l:max),'\s*$','','') let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0]) endwhile return !a:0 || cursor(a:ln,strlen(pline)) ? pline : pline endfunction +" Find line above 'lnum' that isn't empty or in a comment +function s:PrevCodeLine(lnum) + let l:n = prevnonblank(a:lnum) + while getline(l:n) =~ '^\s*\/[/*]' || s:syn_at(l:n,1) =~? s:syng_com + let l:n = prevnonblank(l:n-1) + endwhile + return l:n +endfunction + +" Check if line 'lnum' has a balanced amount of parentheses. +function s:Balanced(lnum) + let l:open = 0 + let l:line = getline(a:lnum) + let pos = match(l:line, '[][(){}]', 0) + while pos != -1 + if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom + let l:open += match(' ' . l:line[pos],'[[({]') + if l:open < 0 + return + endif + endif + let pos = match(l:line, '[][(){}]', pos + 1) + endwhile + return !l:open +endfunction + +" start of a braceless scope? function s:OneScope(lnum) let pline = s:Trim(a:lnum,1) if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 @@ -127,16 +160,22 @@ function s:OneScope(lnum) endif return index(split('for if let while with'),token) + 1 endif - return pline =~# '\%(\%(\.\s*\)\@\)$' + return eval((['getline(".")[col(".")-2] == "="'] + + \ repeat(['s:previous_token(1) != "."'],2) + [0])[ + \ index(split('> else do'),s:token())]) endfunction +" returns braceless levels started by 'i' and above lines * &sw. +" 'num' is the lineNr which encloses the entire context, 'cont' if whether +" line 'i' + 1 is a continued expression, which could have started in a +" braceless context created above 'i' 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 : 0 let ind = indent(l:i) + (a:cont ? 0 : s:W) let bL = 0 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 indent(l:i) < ind " first line depends on a:cont if s:OneScope(l:i) let bL += s:W let [l:cont, l:i] = [0, line('.')] @@ -156,7 +195,7 @@ endfunction function s:IsBlock() let l:ln = line('.') let char = s:previous_token() - let syn = char =~ '[{>/]' ? synIDattr(synID(line('.'),col('.')-(char == '{'),0),'name') : '' + let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : '' if syn =~? 'xml\|jsx' return char != '{' elseif char =~ '\k' @@ -171,38 +210,11 @@ function s:IsBlock() return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' endfunction -" Find line above 'lnum' that isn't empty or in a comment -function s:PrevCodeLine(lnum) - let l:n = prevnonblank(a:lnum) - while getline(l:n) =~ '^\s*\/[/*]' || synIDattr(synID(l:n,1,0),'name') =~? - \ s:syng_com - let l:n = prevnonblank(l:n-1) - endwhile - return l:n -endfunction - -" Check if line 'lnum' has a balanced amount of parentheses. -function s:Balanced(lnum) - 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 l:open += match(' ' . l:line[pos],'[[({]') - if l:open < 0 - return - endif - endif - let pos = match(l:line, '[][(){}]', pos + 1) - endwhile - return !l:open -endfunction - function GetJavascriptIndent() 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') + let syns = s:syn_at(v:lnum, 1) " start with strings,comments,etc. if syns =~? s:syng_com @@ -238,7 +250,7 @@ function GetJavascriptIndent() call call('cursor',b:js_cache[1:]) else let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) && - \ synIDattr(synID(l:lnum,1,0),'name') !~? s:syng_str) * l:lnum] + \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum] if idx + 1 call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top) elseif indent(v:lnum) && syns =~? 'block' @@ -275,7 +287,7 @@ function GetJavascriptIndent() endif if pline[-1:] !~ '[{;]' let isOp = l:line =~# s:opfirst || pline =~# s:continuation && - \ synIDattr(synID(l:lnum,match(' ' . pline,'\/$'),0),'name') !~? 'regex' + \ s:syn_at(l:lnum,match(' ' . pline,'\/$')) !~? 'regex' let bL = s:iscontOne(l:lnum,num,isOp) let bL -= (bL && l:line[0] == '{') * s:W endif From 4149f1d30448cb5f2841b12d95c46146b2d39fe9 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Dec 2016 15:31:00 -0800 Subject: [PATCH 543/929] cleaning continued braceless statement (#758) --- indent/javascript.vim | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 39629765..aab3678a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -150,7 +150,6 @@ function s:Balanced(lnum) return !l:open endfunction -" start of a braceless scope? function s:OneScope(lnum) let pline = s:Trim(a:lnum,1) if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 @@ -168,21 +167,16 @@ endfunction " returns braceless levels started by 'i' and above lines * &sw. " 'num' is the lineNr which encloses the entire context, 'cont' if whether " line 'i' + 1 is a continued expression, which could have started in a -" braceless context created above 'i' +" braceless context function s:iscontOne(i,num,cont) - let [l:i, l:cont, l:num] = [a:i, a:cont, a:num + !a:num] + let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0] 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) - if indent(l:i) < ind " first line depends on a:cont - if s:OneScope(l:i) - let bL += s:W - let [l:cont, l:i] = [0, line('.')] - elseif !l:cont - break - endif - elseif !a:cont + while l:i >= l:num && (ind > pind || l:i == l:num) + if indent(l:i) < ind && s:OneScope(l:i) + let bL += s:W + let l:i = line('.') + elseif !a:cont || bL || ind < indent(a:i) break endif let ind = min([ind, indent(l:i)]) From 3583822dab4be5b11c285233535ebf56b986524e Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Dec 2016 18:05:58 -0800 Subject: [PATCH 544/929] reflow comment --- indent/javascript.vim | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index aab3678a..8059e0b0 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: December 9, 2016 +" Last Change: December 10, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -164,10 +164,9 @@ function s:OneScope(lnum) \ index(split('> else do'),s:token())]) endfunction -" returns braceless levels started by 'i' and above lines * &sw. -" 'num' is the lineNr which encloses the entire context, 'cont' if whether -" line 'i' + 1 is a continued expression, which could have started in a -" braceless context +" returns braceless levels started by 'i' and above lines * &sw. 'num' is the +" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is +" a continued expression, which could have started in a braceless context function s:iscontOne(i,num,cont) let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0] let pind = a:num ? indent(l:num) + s:W : 0 From 25cff858e5f5f1fdc65f35d75fd52fdbc091e0bc Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sat, 10 Dec 2016 19:07:58 -0800 Subject: [PATCH 545/929] don't move cursor at default label --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 8059e0b0..d8de150a 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -198,7 +198,7 @@ function s:IsBlock() return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' return !cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) && - \ (expand('') !=# 'default' || s:previous_token() !~ '[{,.]') + \ (expand('') !=# 'default' || s:previous_token(1) !~ '[{,.]') endif return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' endfunction From 8e17e2330c4bb252d9657f1cea34159367f7cdad Mon Sep 17 00:00:00 2001 From: Ryan Bright Date: Sun, 11 Dec 2016 03:44:26 -0500 Subject: [PATCH 546/929] Detect .es6 files as JavaScript (#199) --- ftdetect/javascript.vim | 1 + 1 file changed, 1 insertion(+) diff --git a/ftdetect/javascript.vim b/ftdetect/javascript.vim index d6aa6d01..f42e06f8 100644 --- a/ftdetect/javascript.vim +++ b/ftdetect/javascript.vim @@ -1,6 +1,7 @@ au BufNewFile,BufRead *.js setf javascript au BufNewFile,BufRead *.jsm setf javascript au BufNewFile,BufRead Jakefile setf javascript +au BufNewFile,BufRead *.es6 setf javascript fun! s:SelectJavascript() if getline(1) =~# '^#!.*/bin/\%(env\s\+\)\?node\>' From 63daab731daf93e1503667f2f24ff619f504186f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Dec 2016 18:36:15 -0800 Subject: [PATCH 547/929] better &cino parsing (#759) --- indent/javascript.vim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d8de150a..c8142778 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -269,8 +269,12 @@ function GetJavascriptIndent() if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 let num = line('.') if s:previous_token() ==# 'switch' - let switch_offset = &cino !~ ':' || !has('float') ? s:W : - \ float2nr(str2float(matchstr(&cino,'.*:\zs[-0-9.]*')) * (&cino =~# '\%(.*:\)\@>[^,]*s' ? s:W : 1)) + if &cino !~ ':' || !has('float') + let switch_offset = s:W + else + let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C') + let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : 1)) * (strlen(cinc[3]) ? s:W : 1)) + endif if pline[-1:] != '.' && l:line =~# '^' . s:case_stmt return indent(num) + switch_offset elseif pline =~# s:case_stmt . '$' From 294563c6181215270fa645a685264ecb724471d2 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Sun, 11 Dec 2016 18:54:14 -0800 Subject: [PATCH 548/929] &cino format --- indent/javascript.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index c8142778..e072ad16 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -273,7 +273,8 @@ function GetJavascriptIndent() let switch_offset = s:W else let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C') - let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : 1)) * (strlen(cinc[3]) ? s:W : 1)) + let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : strlen(cinc[3]))) + \ * (strlen(cinc[3]) ? s:W : 1)) endif if pline[-1:] != '.' && l:line =~# '^' . s:case_stmt return indent(num) + switch_offset From 117c7272188bbd2417a4d1addb8f90a0de52e91d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 15 Dec 2016 10:02:15 -0800 Subject: [PATCH 549/929] more edge case accuracy,refactoring (#761) * more edge case accuracy,refactoring * missing paren * label func * remove if * ws --- indent/javascript.vim | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index e072ad16..1bb59433 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: December 10, 2016 +" Last Change: December 14, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -106,11 +106,23 @@ endfunction " switch case label pattern let s:case_stmt = '\<\%(case\>\s*[^ \t:].*\|default\s*\):\C' +function s:label_end(ln,con) + return !cursor(a:ln,match(' '.a:con, '.*\zs' . s:case_stmt . '$')) && + \ (expand('') !=# 'default' || s:previous_token(1) !~ '[{,.]') +endfunction + " configurable regexes that define continuation lines, not including (, {, or [. let s:opfirst = '^' . get(g:,'javascript_opfirst', \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)') let s:continuation = get(g:,'javascript_continuation', - \ '\%([<=,.~!?/*^%|&:]\|+\@\|\%(\.\s*\)\@\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$' + +function s:continues(ln,con) + return !cursor(a:ln, match(' '.a:con,s:continuation)) && + \ eval((['s:syn_at(line("."),col(".")) !~? "regex"'] + + \ repeat(['s:previous_token() != "."'],5) + [1])[ + \ index(split('/ typeof in instanceof void delete'),s:token())]) +endfunction " get the line of code stripped of comments. if called with two args, leave " cursor at the last non-comment char. @@ -197,8 +209,7 @@ function s:IsBlock() elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' - return !cursor(0,match(' ' . strpart(getline('.'),0,col('.')),'.*\zs' . s:case_stmt . '$')) && - \ (expand('') !=# 'default' || s:previous_token(1) !~ '[{,.]') + return s:label_end(0,strpart(getline('.'),0,col('.'))) endif return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]' endfunction @@ -278,14 +289,13 @@ function GetJavascriptIndent() endif if pline[-1:] != '.' && l:line =~# '^' . s:case_stmt return indent(num) + switch_offset - elseif pline =~# s:case_stmt . '$' + elseif s:label_end(l:lnum,pline) return indent(l:lnum) + s:W endif endif endif if pline[-1:] !~ '[{;]' - let isOp = l:line =~# s:opfirst || pline =~# s:continuation && - \ s:syn_at(l:lnum,match(' ' . pline,'\/$')) !~? 'regex' + let isOp = l:line =~# s:opfirst || s:continues(l:lnum,pline) let bL = s:iscontOne(l:lnum,num,isOp) let bL -= (bL && l:line[0] == '{') * s:W endif From f33b9ed81b5a07de1be786e9574454e0bddc62b7 Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Tue, 20 Dec 2016 21:41:26 -0800 Subject: [PATCH 550/929] cleaning, edge case with keyword (#764) --- indent/javascript.vim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 1bb59433..f5ddcbc4 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: December 14, 2016 +" Last Change: December 20, 2016 " Only load this indent file when no other was loaded. if exists('b:did_indent') @@ -171,9 +171,9 @@ function s:OneScope(lnum) endif return index(split('for if let while with'),token) + 1 endif - return eval((['getline(".")[col(".")-2] == "="'] + - \ repeat(['s:previous_token(1) != "."'],2) + [0])[ - \ index(split('> else do'),s:token())]) + let token = s:token() + return token == '>' ? getline('.')[col('.')-2] == '=' : + \ token =~# '^\%(else\|do\)$' && s:previous_token(1) != '.' endfunction " returns braceless levels started by 'i' and above lines * &sw. 'num' is the @@ -205,7 +205,7 @@ function s:IsBlock() return char != '{' elseif char =~ '\k' return index(split('return const let import export yield default delete var void typeof throw new in instanceof') - \ ,char) < (0 + (line('.') != l:ln)) || s:previous_token() == '.' + \ ,char) < (line('.') != l:ln) || s:previous_token() == '.' elseif char == '>' return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow' elseif char == ':' @@ -279,7 +279,7 @@ function GetJavascriptIndent() let pline = s:Trim(l:lnum) if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 let num = line('.') - if s:previous_token() ==# 'switch' + if s:previous_token() ==# 'switch' && s:previous_token() != '.' if &cino !~ ':' || !has('float') let switch_offset = s:W else From 1cb6f109418f4e18f569ee8953fc96c1e23b456f Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 21 Dec 2016 10:55:06 -0800 Subject: [PATCH 551/929] cleaner loop (#765) --- indent/javascript.vim | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index f5ddcbc4..d4e90d96 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -95,12 +95,18 @@ endfunction " NOTE: Moves the cursor, unless a arg is supplied. function s:previous_token(...) let l:pos = getpos('.')[1:2] - return [search('.\>\|[^[:alnum:][:space:]_$]','bW') ? - \ (s:looking_at() == '/' || line('.') != l:pos[0] && getline('.') =~ '\/\/') && - \ s:syn_at(line('.'),col('.')) =~? s:syng_com ? - \ search('\_[^/]\zs\/[/*]','bW') ? s:previous_token() : '' - \ : s:token() - \ : ''][a:0 && call('cursor',l:pos)] + let token = '' + while search('.\>\|[^[:alnum:][:space:]_$]','bW') + if (s:looking_at() == '/' || line('.') != l:pos[0] && search('\/\/','nbW', + \ line('.'))) && s:syn_at(line('.'),col('.')) =~? s:syng_com + call search('\_[^/]\zs\/[/*]','bW') + else + let token = s:token() + break + endif + endwhile + call call('cursor', a:0 ? l:pos : [0,0]) + return token endfunction " switch case label pattern From ce0f529bbb938b42f757aeedbe8f5d95f095b51d Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Wed, 21 Dec 2016 15:12:52 -0800 Subject: [PATCH 552/929] refactor s:OneScope() (#766) --- indent/javascript.vim | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index d4e90d96..53e0bd02 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -170,16 +170,16 @@ endfunction function s:OneScope(lnum) let pline = s:Trim(a:lnum,1) + let kw = 'else do' if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0 - let token = s:previous_token() - if index(split('await each'),token) + 1 - return s:previous_token() ==# 'for' + call s:previous_token() + let kw = 'for if let while with' + if index(split('await each'),s:token()) + 1 + call s:previous_token() + let kw = 'for' endif - return index(split('for if let while with'),token) + 1 endif - let token = s:token() - return token == '>' ? getline('.')[col('.')-2] == '=' : - \ token =~# '^\%(else\|do\)$' && s:previous_token(1) != '.' + return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 && s:previous_token(1) != '.' endfunction " returns braceless levels started by 'i' and above lines * &sw. 'num' is the From da1eee4452cb7acdfc4b495c46d51fe0507b68ff Mon Sep 17 00:00:00 2001 From: Chris Paul Date: Thu, 22 Dec 2016 16:29:44 -0800 Subject: [PATCH 553/929] odd comments, shebang (#768) basic support, other area's depend on syntax supporting this stuff --- indent/javascript.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indent/javascript.vim b/indent/javascript.vim index 53e0bd02..a7d3fdf2 100644 --- a/indent/javascript.vim +++ b/indent/javascript.vim @@ -145,7 +145,7 @@ endfunction " Find line above 'lnum' that isn't empty or in a comment function s:PrevCodeLine(lnum) let l:n = prevnonblank(a:lnum) - while getline(l:n) =~ '^\s*\/[/*]' || s:syn_at(l:n,1) =~? s:syng_com + while getline(l:n) =~ '^\s*\%(\/[/*]\|-->\|\|\|\|\|\|\|