From ea5803348e3ec88a1762b4f044b585d216d1974f Mon Sep 17 00:00:00 2001 From: bounceme Date: Thu, 16 Jun 2016 21:00:35 -0700 Subject: [PATCH 01/26] 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 02/26] 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 03/26] 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 04/26] 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 05/26] 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 06/26] 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 07/26] 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 08/26] 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 09/26] 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 10/26] 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 11/26] 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 12/26] 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 13/26] 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 14/26] 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 15/26] 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 16/26] 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 17/26] 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 18/26] 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 19/26] 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 20/26] 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 21/26] 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 22/26] 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 23/26] 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 24/26] 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 25/26] 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 26/26] 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