@@ -35,7 +35,13 @@ syntax keyword jsOperator delete instanceof typeof void new in
3535syntax match jsOperator / \( !\| |\| &\| +\| -\| <\| >\| =\| %\|\/\| *\|\~\|\^\) /
3636syntax keyword jsBooleanTrue true
3737syntax keyword jsBooleanFalse false
38- syntax keyword jsCommonJS require module exports
38+ syntax keyword jsModules import export contained
39+ syntax keyword jsModuleWords default from as contained
40+ syntax keyword jsOf of contained
41+
42+ syntax region jsImportContainer start =" ^\s\? import \? " end =" $" contains =jsModules,jsModuleWords,jsComment,jsStringS,jsStringD,jsTemplateString
43+
44+ syntax region jsExportContainer start =" ^\s\? export \? " end =" $" contains =jsModules,jsModuleWords,jsComment,jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsClass,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsAssignmentExpr
3945
4046" " JavaScript comments
4147syntax keyword jsCommentTodo TODO FIXME XXX TBD contained
@@ -53,7 +59,7 @@ if !exists("javascript_ignore_javaScriptdoc")
5359 " syntax include @javaHtml <sfile>:p:h/html.vim
5460 " unlet b:current_syntax
5561
56- syntax region jsDocComment matchgroup =jsComment start =" /\* \*\s *" end =" \* /" contains =jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
62+ syntax region jsBlockComment matchgroup =jsComment start =" /\*\s *" end =" \* /" contains =jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold
5763
5864 " tags containing a param
5965 syntax match jsDocTags contained " @\( alias\| api\| augments\| borrows\| class\| constructs\| default\| defaultvalue\| emits\| exception\| exports\| extends\| file\| fires\| kind\| listens\| member\| member[oO]f\| mixes\| module\| name\| namespace\| requires\| template\| throws\| var\| variation\| version\)\> " nextgroup =jsDocParam skipwhite
@@ -79,26 +85,27 @@ endif "" JSDoc end
7985syntax case match
8086
8187" " Syntax in the JavaScript code
82- syntax match jsFuncCall / \k\+\% (\s *(\)\@ =/
83- syntax match jsSpecial " \v\\ %(0|\\ x\x\{ 2\}\|\\ u\x\{ 4\}\|\c [A-Z]|.)" contained
84- syntax match jsTemplateVar " \$ {.\{ -}}" contained
85- syntax region jsStringD start =+ "+ skip =+ \\\( "\| $\) + end =+ "\| $+ contains =jsSpecial,@htmlPreproc,@Spell
86- syntax region jsStringS start =+ '+ skip =+ \\\( '\| $\) + end =+ '\| $+ contains =jsSpecial,@htmlPreproc,@Spell
87- syntax region jsTemplateString start =+ `+ skip =+ \\\( `\| $\) + end =+ `\| $+ contains =jsTemplateVar,jsSpecial,@htmlPreproc
88- syntax region jsRegexpCharClass start =+ \[ + skip =+ \\ .+ end =+ \] + contained
88+ syntax match jsFuncCall / \k\+\% (\s *(\)\@ =/
89+ syntax match jsSpecial " \v\\ %(0|\\ x\x\{ 2\}\|\\ u\x\{ 4\}\|\c [A-Z]|.)" contained
90+ syntax match jsTemplateVar " \$ {.\{ -}}" contained
91+ syntax region jsStringD start =+ "+ skip =+ \\\( "\| $\) + end =+ "\| $+ contains =jsSpecial,@htmlPreproc,@Spell
92+ syntax region jsStringS start =+ '+ skip =+ \\\( '\| $\) + end =+ '\| $+ contains =jsSpecial,@htmlPreproc,@Spell
93+ syntax region jsTemplateString start =+ `+ skip =+ \\\( `\| $\) + end =+ `+ contains =jsTemplateVar,jsSpecial,@htmlPreproc
94+ syntax region jsTaggedTemplate start =/ \k\+\(\(\n\|\s\)\+\)\? `/ end =+ `\| $+ contains =jsTemplateString
95+ syntax region jsRegexpCharClass start =+ \[ + skip =+ \\ .+ end =+ \] + contained
8996syntax match jsRegexpBoundary " \v %(\< @![\^ $]|\\ [bB])" contained
90- syntax match jsRegexpBackRef " \v\\ [1-9][0-9]*" contained
97+ syntax match jsRegexpBackRef " \v\\ [1-9][0-9]*" contained
9198syntax match jsRegexpQuantifier " \v\\ @<!%([?*+]|\{\d +%(,|,\d +)?})\? ?" contained
92- syntax match jsRegexpOr " \v\< @!\| " contained
93- syntax match jsRegexpMod " \v\( @<=\? [:=!>]" contained
94- syntax cluster jsRegexpSpecial contains =jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
95- syntax region jsRegexpGroup start =" \\\@ <!(" skip =" \\ .\|\[\(\\ .\| [^]]\) *\] " end =" \\\@ <!)" contained contains =jsRegexpCharClass,@jsRegexpSpecial keepend
96- syntax region jsRegexpString start =+ \(\(\( return\| case\)\s\+\)\@ <=\|\(\( [)\] "']\|\d\|\w\)\s *\)\@ <!\) /\(\*\| /\)\@ !+ skip =+ \\ .\|\[\(\\ .\| [^]]\) *\] + end =+ /[gimy]\{ ,4}+ contains =jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial,@htmlPreproc oneline keepend
97- syntax match jsNumber / \< -\=\d\+\( L\| [eE][+-]\=\d\+\)\=\>\|\< 0[xX]\x\+\> /
98- syntax keyword jsNumber Infinity
99- syntax match jsFloat / \< -\=\% (\d\+\.\d\+\|\d\+\.\|\.\d\+\)\% ([eE][+-]\=\d\+\)\=\> /
100- syntax match jsObjectKey / \< [a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s *:\)\@ =/ contains =jsFunctionKey contained
101- syntax match jsFunctionKey / \< [a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s *:\s *function\s *\)\@ =/ contained
99+ syntax match jsRegexpOr " \v\< @!\| " contained
100+ syntax match jsRegexpMod " \v\( @<=\? [:=!>]" contained
101+ syntax cluster jsRegexpSpecial contains =jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod
102+ syntax region jsRegexpGroup start =" \\\@ <!(" skip =" \\ .\|\[\(\\ .\| [^]]\) *\] " end =" \\\@ <!)" contained contains =jsRegexpCharClass,@jsRegexpSpecial keepend
103+ syntax region jsRegexpString start =+ \(\(\( return\| case\)\s\+\)\@ <=\|\(\( [)\] "']\|\d\|\w\)\s *\)\@ <!\) /\(\*\| /\)\@ !+ skip =+ \\ .\|\[\(\\ .\| [^]]\) *\] + end =+ /[gimy]\{ ,4}+ contains =jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial,@htmlPreproc oneline keepend
104+ syntax match jsNumber / \< -\=\d\+\( L\| [eE][+-]\=\d\+\)\=\>\|\< 0[xX]\x\+\> /
105+ syntax keyword jsNumber Infinity
106+ syntax match jsFloat / \< -\=\% (\d\+\.\d\+\|\d\+\.\|\.\d\+\)\% ([eE][+-]\=\d\+\)\=\> /
107+ syntax match jsObjectKey / \< [a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s *:\)\@ =/ contains =jsFunctionKey contained
108+ syntax match jsFunctionKey / \< [a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s *:\s *function\s *\)\@ =/ contained
102109
103110syntax match jsAssignmentExpr / \v %([a-zA-Z_$]\k *\. )*[a-zA-Z_$]\k *\s *\= / contains =jsFuncAssignExpr,jsAssignExpIdent,jsPrototype,jsOperator,jsThis,jsNoise
104111syntax match jsAssignExpIdent / \v [a-zA-Z_$]\k *\z e%(\s *\= )/ contained
@@ -112,23 +119,26 @@ exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefi
112119exe ' syntax keyword jsNan NaN ' .(exists (' g:javascript_conceal_NaN' ) ? ' conceal cchar=' .g: javascript_conceal_NaN : ' ' )
113120exe ' syntax keyword jsPrototype prototype ' .(exists (' g:javascript_conceal_prototype' ) ? ' conceal cchar=' .g: javascript_conceal_prototype : ' ' )
114121exe ' syntax keyword jsThis this ' .(exists (' g:javascript_conceal_this' ) ? ' conceal cchar=' .g: javascript_conceal_this : ' ' )
122+ exe ' syntax keyword jsStatic static ' .(exists (' g:javascript_conceal_static' ) ? ' conceal cchar=' .g: javascript_conceal_static : ' ' )
123+ exe ' syntax keyword jsSuper super ' .(exists (' g:javascript_conceal_super' ) ? ' conceal cchar=' .g: javascript_conceal_super : ' ' )
115124
116125" " Statement Keywords
117126syntax keyword jsStatement break continue with
118127syntax keyword jsConditional if else switch
119128syntax keyword jsRepeat do while for
120129syntax keyword jsLabel case default
121- syntax keyword jsKeyword yield import export default extends class
130+ syntax keyword jsKeyword yield
131+ syntax keyword jsClass extends class
122132syntax keyword jsException try catch throw finally
123133
124- syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object RegExp String Proxy ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window
134+ syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray Intl JSON Math console document window
125135syntax match jsGlobalObjects / \% (Intl\.\)\@ <=\( Collator\| DateTimeFormat\| NumberFormat\) /
126136
127137syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError
128138
129139syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval
130140
131- syntax keyword jsFutureKeys abstract enum int short boolean interface static byte long super char final native synchronized float package throws goto private transient debugger implements protected volatile double public
141+ syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient debugger implements protected volatile double public
132142
133143" " DOM/HTML/CSS specified things
134144
@@ -178,12 +188,11 @@ endif "DOM/HTML/CSS
178188
179189" " end DOM/HTML/CSS specified things
180190
181-
182191" " Code blocks
183- syntax cluster jsExpression contains =jsComment,jsLineComment,jsDocComment, jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr
192+ syntax cluster jsExpression contains =jsComment,jsLineComment,jsBlockComment,jsTaggedTemplate, jsTemplateString,jsStringD,jsStringS,jsRegexpString,jsNumber,jsFloat,jsThis,jsStatic,jsSuper, jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsDotNotation,jsBracket,jsParen,jsBlock,jsFuncCall,jsUndefined,jsNan,jsKeyword,jsStorageClass,jsPrototype,jsBuiltins,jsNoise,jsCommonJS,jsAssignmentExpr,jsImportContainer,jsExportContainer,jsClass
184193syntax cluster jsAll contains =@jsExpression,jsLabel,jsConditional,jsRepeat,jsReturn,jsStatement,jsTernaryIf,jsException
185194syntax region jsBracket matchgroup =jsBrackets start =" \[ " end =" \] " contains =@jsAll,jsParensErrB,jsParensErrC,jsBracket,jsParen,jsBlock,@htmlPreproc fold
186- syntax region jsParen matchgroup =jsParens start =" (" end =" )" contains =@jsAll,jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold
195+ syntax region jsParen matchgroup =jsParens start =" (" end =" )" contains =@jsAll,jsOf, jsParensErrA,jsParensErrC,jsParen,jsBracket,jsBlock,@htmlPreproc fold
187196syntax region jsBlock matchgroup =jsBraces start =" {" end =" }" contains =@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,jsObjectKey,@htmlPreproc fold
188197syntax region jsFuncBlock matchgroup =jsFuncBraces start =" {" end =" }" contains =@jsAll,jsParensErrA,jsParensErrB,jsParen,jsBracket,jsBlock,@htmlPreproc contained fold
189198syntax region jsTernaryIf matchgroup =jsTernaryIfOperator start =+ ?+ end =+ :+ contains =@jsExpression,jsTernaryIf
@@ -204,7 +213,7 @@ exe 'syntax match jsFunction /\<function\>/ nextgroup=jsGenerator,jsFuncName,jsF
204213
205214syntax match jsGenerator contained ' \* ' nextgroup =jsFuncName skipwhite
206215syntax match jsFuncName contained / \< [a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup =jsFuncArgs skipwhite
207- syntax region jsFuncArgs contained matchgroup =jsFuncParens start =' (' end =' )' contains =jsFuncArgCommas,jsFuncArgRest nextgroup =jsFuncBlock keepend skipwhite skipempty
216+ syntax region jsFuncArgs contained matchgroup =jsFuncParens start =' (' end =' )' contains =jsFuncArgCommas,jsFuncArgRest,jsAssignmentExpr nextgroup =jsFuncBlock keepend skipwhite skipempty
208217syntax match jsFuncArgCommas contained ' ,'
209218syntax match jsFuncArgRest contained / \% (\.\.\. [a-zA-Z_$][0-9a-zA-Z_$]*\) )/
210219syntax keyword jsArgsObj arguments contained containedin =jsFuncBlock
@@ -225,7 +234,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
225234 HiLink jsComment Comment
226235 HiLink jsLineComment Comment
227236 HiLink jsEnvComment PreProc
228- HiLink jsDocComment Comment
237+ HiLink jsBlockComment Comment
229238 HiLink jsCommentTodo Todo
230239 HiLink jsCvsTag Function
231240 HiLink jsDocTags Special
@@ -236,6 +245,7 @@ if version >= 508 || !exists("did_javascript_syn_inits")
236245 HiLink jsStringS String
237246 HiLink jsStringD String
238247 HiLink jsTemplateString String
248+ HiLink jsTaggedTemplate StorageClass
239249 HiLink jsTernaryIfOperator Conditional
240250 HiLink jsRegexpString String
241251 HiLink jsRegexpBoundary SpecialChar
@@ -266,8 +276,12 @@ if version >= 508 || !exists("did_javascript_syn_inits")
266276 HiLink jsParensErrB Error
267277 HiLink jsParensErrC Error
268278 HiLink jsOperator Operator
279+ HiLink jsOf Operator
269280 HiLink jsStorageClass StorageClass
281+ HiLink jsClass Structure
270282 HiLink jsThis Special
283+ HiLink jsStatic Special
284+ HiLink jsSuper Special
271285 HiLink jsNan Number
272286 HiLink jsNull Type
273287 HiLink jsUndefined Type
@@ -287,7 +301,8 @@ if version >= 508 || !exists("did_javascript_syn_inits")
287301 HiLink jsExceptions Special
288302 HiLink jsFutureKeys Special
289303 HiLink jsBuiltins Special
290- HiLink jsCommonJS Include
304+ HiLink jsModules Include
305+ HiLink jsModuleWords Include
291306
292307 HiLink jsDomErrNo Constant
293308 HiLink jsDomNodeConsts Constant
@@ -304,10 +319,9 @@ if version >= 508 || !exists("did_javascript_syn_inits")
304319endif
305320
306321" Define the htmlJavaScript for HTML syntax html.vim
307- " syntax clear htmlJavaScript
308- " syntax clear jsExpression
309322syntax cluster htmlJavaScript contains =@jsAll,jsBracket,jsParen,jsBlock
310323syntax cluster javaScriptExpression contains =@jsAll,jsBracket,jsParen,jsBlock,@htmlPreproc
324+
311325" Vim's default html.vim highlights all javascript as 'Special'
312326hi ! def link javaScript NONE
313327
0 commit comments