Skip to content

Commit 8deb698

Browse files
authored
Merge pull request #470 from pangloss/js-flow-support
JS Flow Annotation Support and A Proper Plugin System
2 parents 0115077 + 5cefcff commit 8deb698

File tree

5 files changed

+109
-41
lines changed

5 files changed

+109
-41
lines changed

README.md

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,37 @@ And install it:
3535

3636
## Configuration Variables
3737

38-
The following variables control certain syntax highlighting features. You can
39-
add them to your `.vimrc` to enable/disable their features.
38+
The following variables control certain syntax highlighting plugins. You can
39+
add them to your `.vimrc` to enable their features.
40+
41+
-----------------
42+
43+
```
44+
let g:javascript_plugin_jsdoc = 1
45+
```
46+
47+
Enables syntax highlighting for [JSDocs](http://usejsdoc.org/).
48+
49+
Default Value: 0
50+
51+
-----------------
4052

4153
```
42-
let g:javascript_enable_domhtmlcss = 1
54+
let g:javascript_plugin_ngdoc = 1
4355
```
4456

45-
Enables HTML/CSS syntax highlighting in your JavaScript file.
57+
Enables some additional syntax highlighting for NGDocs. Requires JSDoc plugin
58+
to be enabled as well.
4659

4760
Default Value: 0
4861

4962
-----------------
5063

5164
```
52-
let g:javascript_ignore_javaScriptdoc = 1
65+
let g:javascript_plugin_flow = 1
5366
```
5467

55-
Disables JSDoc syntax highlighting
68+
Enables syntax highlighting for [Flow](https://flowtype.org/).
5669

5770
Default Value: 0
5871

extras/flow.vim

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
syntax region jsFlowTypeStatement start=/type/ end=/=/ oneline skipwhite skipempty nextgroup=jsFlowTypeObject
2+
syntax region jsFlowDeclareBlock start=/declare/ end=/[;\n]/ oneline contains=jsFlow,jsFlowDeclareKeyword,jsFlowStorageClass
3+
syntax region jsFlow start=/:/ end=/\%(\%([),=;\n]\|{\%(.*}\)\@!\|\%({.*}\)\@<=\s*{\)\@=\|void\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock
4+
syntax region jsFlowReturn contained start=/:/ end=/\%(\S\s*\%({\)\@=\|\n\)/ contains=@jsFlowCluster oneline skipwhite skipempty nextgroup=jsFuncBlock keepend
5+
syntax region jsFlowTypeObject contained start=/{/ end=/}/ skipwhite skipempty nextgroup=jsFunctionBlock extend
6+
syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ oneline contains=@jsFlowCluster
7+
syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ oneline contains=@jsFlowCluster
8+
syntax keyword jsFlowDeclareKeyword contained declare
9+
syntax keyword jsFlowType contained boolean number string null void any mixed JSON array function object Array
10+
syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlow
11+
syntax match jsFlowNoise contained /[:;,<>]/
12+
syntax cluster jsFlowCluster contains=jsFlowType,jsFlowArray,jsFlowObject,jsFlowNoise
13+
syntax keyword jsFlowStorageClass contained const var let
14+
syntax region jsFlowParenRegion contained start=/:\s*(/ end=/)\%(\s*:\)\@=/ oneline contains=@jsFlowCluster skipwhite skipempty nextgroup=jsObjectValue
15+
16+
if version >= 508 || !exists("did_javascript_syn_inits")
17+
if version < 508
18+
let did_javascript_syn_inits = 1
19+
command -nargs=+ HiLink hi link <args>
20+
else
21+
command -nargs=+ HiLink hi def link <args>
22+
endif
23+
HiLink jsFlow PreProc
24+
HiLink jsFlowReturn PreProc
25+
HiLink jsFlowArray PreProc
26+
HiLink jsFlowDeclareBlock PreProc
27+
HiLink jsFlowObject PreProc
28+
HiLink jsFlowParenRegion PreProc
29+
HiLink jsFlowType Type
30+
HiLink jsFlowDeclareKeyword Type
31+
HiLink jsFlowNoise Noise
32+
delcommand HiLink
33+
endif

extras/jsdoc.vim

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
"" syntax coloring for javadoc comments (HTML)
2+
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
3+
4+
" tags containing a param
5+
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
6+
" tags containing type and param
7+
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
8+
" tags containing type but no param
9+
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
10+
" tags containing references
11+
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
12+
" other tags (no extra syntax)
13+
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\)\>"
14+
15+
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
16+
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
17+
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
18+
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
19+
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
20+
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
21+
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
22+
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
23+
24+
if version >= 508 || !exists("did_javascript_syn_inits")
25+
if version < 508
26+
let did_javascript_syn_inits = 1
27+
command -nargs=+ HiLink hi link <args>
28+
else
29+
command -nargs=+ HiLink hi def link <args>
30+
endif
31+
HiLink jsDocTags Special
32+
HiLink jsDocSeeTag Function
33+
HiLink jsDocType Type
34+
HiLink jsDocTypeBrackets jsDocType
35+
HiLink jsDocTypeRecord jsDocType
36+
HiLink jsDocTypeNoParam Type
37+
HiLink jsDocParam Label
38+
delcommand HiLink
39+
endif

extras/ngdoc.vim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite
2+
syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite
3+
syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"

syntax/javascript.vim

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ else
7373
endif
7474
syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
7575

76-
syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue
76+
syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue,jsFlowParenRegion
7777
syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue
7878
syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue
7979
syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend
@@ -134,8 +134,8 @@ syntax region jsParenIfElse contained matchgroup=jsParens s
134134
syntax region jsParenRepeat contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsBlock extend fold
135135
syntax region jsParenSwitch contained matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold
136136
syntax region jsParenCatch contained matchgroup=jsParens start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold
137-
syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression skipwhite skipempty nextgroup=jsFuncBlock extend fold
138-
syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold
137+
syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsRestExpression,jsFlow skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend fold
138+
syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise,jsFlowClassProperty extend fold
139139
syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll extend fold
140140
syntax region jsBlock contained matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll extend fold
141141
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
146146
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression
147147
syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression
148148
syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/
149+
syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression
149150

150151
syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs
151152
syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs
@@ -191,31 +192,17 @@ syntax region jsComment start="/\*" end="\*/" contains=jsCommentTodo,js
191192
syntax region jsEnvComment start="\%^#!" end="$" display
192193
syntax region jsCvsTag contained start="\$\cid:" end="\$" oneline
193194

194-
"" JSDoc / JSDoc Toolkit
195-
if !exists("javascript_ignore_javaScriptdoc")
196-
"" syntax coloring for javadoc comments (HTML)
197-
syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
198-
199-
" tags containing a param
200-
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
201-
" tags containing type and param
202-
syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\)\>" skipwhite nextgroup=jsDocType
203-
" tags containing type but no param
204-
syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|typedef\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam
205-
" tags containing references
206-
syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag
207-
" other tags (no extra syntax)
208-
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\)\>"
209-
210-
syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam
211-
syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam
212-
syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend
213-
syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend
214-
syntax region jsDocTypeNoParam contained start="{" end="}" oneline
215-
syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"
216-
syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.{-}]\|=\)\+"
217-
syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags
218-
endif "" JSDoc end
195+
if exists("javascript_plugin_jsdoc")
196+
runtime extras/jsdoc.vim
197+
" NGDoc requires JSDoc
198+
if exists("javascript_plugin_ngdoc")
199+
runtime extras/ngdoc.vim
200+
endif
201+
endif
202+
203+
if exists("javascript_plugin_flow")
204+
runtime extras/flow.vim
205+
endif
219206

220207
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
221208
syntax cluster jsAll contains=@jsExpression,jsExportContainer,jsImportContainer,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword
@@ -234,13 +221,6 @@ if version >= 508 || !exists("did_javascript_syn_inits")
234221
HiLink jsEnvComment PreProc
235222
HiLink jsCommentTodo Todo
236223
HiLink jsCvsTag Function
237-
HiLink jsDocTags Special
238-
HiLink jsDocSeeTag Function
239-
HiLink jsDocType Type
240-
HiLink jsDocTypeBrackets jsDocType
241-
HiLink jsDocTypeRecord jsDocType
242-
HiLink jsDocTypeNoParam Type
243-
HiLink jsDocParam Label
244224
HiLink jsString String
245225
HiLink jsObjectKeyString String
246226
HiLink jsTemplateString String

0 commit comments

Comments
 (0)