From 82fb8b9742e896146496e951a0538fcd23f4ea76 Mon Sep 17 00:00:00 2001 From: Amadeus Demarzi Date: Sat, 11 Jun 2016 14:25:04 -0700 Subject: [PATCH 01/11] 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 02/11] 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 03/11] 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 04/11] 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 05/11] 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 06/11] 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 07/11] 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 08/11] 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 09/11] 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 10/11] 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 11/11] 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