@@ -24,12 +24,12 @@ syntax sync fromstart
2424" syntax case ignore
2525syntax case match
2626
27- syntax match jsNoise / [:,\;\. ]\{ 1}/
28- syntax match jsFuncCall / \k\+\% (\s *(\)\@ =/
29- syntax match jsParensError / \% () \| } \|\]\) /
27+ syntax match jsNoise / [:,\;\. ]\{ 1}/
28+ syntax match jsFuncCall / \k\+\% (\s *(\)\@ =/
29+ syntax match jsParensError / [)} \] ] /
3030
3131" Program Keywords
32- syntax keyword jsStorageClass const var let
32+ syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup = jsDestructuringBlock
3333syntax keyword jsOperator delete instanceof typeof void new in of
3434syntax match jsOperator / [\!\|\&\+\-\<\>\=\%\/\*\~\^ ]\{ 1}/
3535syntax match jsSpreadOperator / \.\.\. / skipwhite skipempty nextgroup =@jsExpression
@@ -45,7 +45,7 @@ syntax region jsModuleGroup contained matchgroup=jsBraces start=/{/ end=/}/
4545syntax match jsModuleAsterisk contained / */
4646syntax keyword jsModuleDefault contained default skipwhite skipempty nextgroup =@jsExpression
4747syntax region jsImportContainer start =/ \< import\> / end =" \% (;\| $\) " contains =jsModuleKeywords,jsModuleOperators,jsComment,jsString,jsTemplateString,jsNoise,jsModuleGroup,jsModuleAsterisk
48- syntax match jsExportContainer / \< export\> / contains =jsModuleKeywords skipwhite skipempty nextgroup =jsExportBlock,jsModuleDefault
48+ syntax match jsExportContainer / \< export\> / contains =jsModuleKeywords skipwhite skipempty nextgroup =jsExportBlock,jsModuleDefault
4949syntax region jsExportBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =jsModuleOperators,jsNoise
5050
5151" Strings, Templates, Numbers
@@ -129,24 +129,25 @@ syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECT
129129syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize
130130
131131" " Code blocks
132- syntax region jsBracket matchgroup =jsBrackets start =" \[ " end =" \] " contains =@jsExpression extend fold
133- syntax region jsParen matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll extend fold
134- syntax region jsParenIfElse contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsBlock extend fold
135- syntax region jsParenRepeat contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsBlock extend fold
136- syntax region jsParenSwitch contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsSwitchBlock extend fold
137- syntax region jsParenCatch contained matchgroup =jsParens start =/ (/ end =/ )/ skipwhite skipempty nextgroup =jsTryCatchBlock 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
139- syntax region jsFuncBlock contained matchgroup =jsFuncBraces start =/ {/ end =/ }/ contains =@jsAll extend fold
140- syntax region jsBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll extend fold
141- syntax region jsTryCatchBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll skipwhite skipempty nextgroup =jsCatch,jsFinally extend fold
142- syntax region jsSwitchBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll,jsLabel extend fold
143- syntax region jsObject matchgroup =jsObjectBraces start =/ {/ end =/ }/ contains =jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold
144- syntax region jsTernaryIf matchgroup =jsTernaryIfOperator start =/ ?/ end =/ \% (:\| [\} ]\@ =\) / contains =@jsExpression
132+ syntax region jsBracket matchgroup =jsBrackets start =" \[ " end =" \] " contains =@jsExpression extend fold
133+ syntax region jsParen matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll extend fold
134+ syntax region jsParenIfElse contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsBlock extend fold
135+ syntax region jsParenRepeat contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsBlock extend fold
136+ syntax region jsParenSwitch contained matchgroup =jsParens start =/ (/ end =/ )/ contains =@jsAll skipwhite skipempty nextgroup =jsSwitchBlock extend fold
137+ syntax region jsParenCatch contained matchgroup =jsParens start =/ (/ end =/ )/ skipwhite skipempty nextgroup =jsTryCatchBlock extend fold
138+ syntax region jsFuncArgs contained matchgroup =jsFuncParens start =' (' end =' )' contains =jsFuncArgCommas,jsFuncArgRest,jsComment,jsFuncArgExpression,jsDestructuringBlock skipwhite skipempty nextgroup =jsFuncBlock extend fold
139+ syntax region jsClassBlock contained matchgroup =jsClassBraces start =/ {/ end =/ }/ contains =jsClassFuncName,jsClassMethodDefinitions,jsOperator,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsNoise extend fold
140+ syntax region jsFuncBlock contained matchgroup =jsFuncBraces start =/ {/ end =/ }/ contains =@jsAll extend fold
141+ syntax region jsBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll extend fold
142+ syntax region jsTryCatchBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll skipwhite skipempty nextgroup =jsCatch,jsFinally extend fold
143+ syntax region jsSwitchBlock contained matchgroup =jsBraces start =/ {/ end =/ }/ contains =@jsAll,jsLabel extend fold
144+ syntax region jsDestructuringBlock contained matchgroup =jsDestructuringBraces start =/ {/ end =/ }/ contains =jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed extend fold
145+ syntax region jsObject matchgroup =jsObjectBraces start =/ {/ end =/ }/ contains =jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectGetSet,jsGenerator,jsComment,jsSpreadOperator,jsObjectStringKey extend fold
146+ syntax region jsTernaryIf matchgroup =jsTernaryIfOperator start =/ ?/ end =/ \% (:\| [\} ]\@ =\) / contains =@jsExpression
145147
146148syntax match jsGenerator contained / \* / skipwhite skipempty nextgroup =jsFuncName,jsFuncArgs
147149syntax match jsFuncName contained / \< [a-zA-Z_$][0-9a-zA-Z_$]*\> / skipwhite skipempty nextgroup =jsFuncArgs
148- syntax match jsFuncArgDestructuring contained / \( {\| }\| =\| :\|\[\|\]\) / extend
149- syntax region jsFuncArgs contained matchgroup =jsFuncParens start =' (' end =' )' contains =jsFuncArgCommas,jsFuncArgRest,jsComment,jsString,jsNumber,jsFuncArgDestructuring,jsArrowFunction,jsParen,jsArrowFuncArgs skipwhite skipempty nextgroup =jsFuncBlock extend
150+ syntax region jsFuncArgExpression contained matchgroup =jsFuncArgOperator start =/ =/ end =/ [,)]\@ =/ contains =@jsExpression extend
150151syntax match jsFuncArgCommas contained ' ,'
151152syntax match jsFuncArgRest contained / \% (\.\.\. [a-zA-Z_$][0-9a-zA-Z_$]*\) )/ contains =jsFuncArgRestDots
152153syntax match jsFuncArgRestDots contained / \.\.\. /
@@ -173,6 +174,13 @@ syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\
173174syntax region jsClassStringKey contained start =+ "+ skip =+ \\\( "\| $\) + end =+ "\| $+ contains =jsSpecial,@Spell extend skipwhite skipempty nextgroup =jsFuncArgs
174175syntax region jsClassStringKey contained start =+ '+ skip =+ \\\( '\| $\) + end =+ '\| $+ contains =jsSpecial,@Spell extend skipwhite skipempty nextgroup =jsFuncArgs
175176
177+ " Destructuring
178+ syntax match jsDestructuringProperty contained / \< [0-9a-zA-Z_$]*\>\(\s *=\)\@ =/ skipwhite skipempty nextgroup =jsDestructuringValue
179+ syntax match jsDestructuringAssignment contained / \< [0-9a-zA-Z_$]*\>\(\s *:\)\@ =/ skipwhite skipempty nextgroup =jsDestructuringValue
180+ syntax region jsDestructuringValue contained start =/ =/ start =/ :/ end =/ \% (,\| }\)\@ =/ contains =@jsExpression extend
181+ syntax match jsDestructuringNoise contained / [,]/
182+ syntax region jsDestructuringPropertyComputed contained matchgroup =jsBrackets start =/ \[ / end =/ ]/ contains =@jsExpresslon skipwhite skipempty nextgroup =jsDestructuringValue,jsDestructuringNoise extend fold
183+
176184" Comments
177185syntax keyword jsCommentTodo contained TODO FIXME XXX TBD
178186syntax region jsComment start =+ \/\/ + end =+ $+ contains =jsCommentTodo,@Spell extend keepend
@@ -305,11 +313,16 @@ if version >= 508 || !exists("did_javascript_syn_inits")
305313 HiLink jsDecorator Special
306314 HiLink jsDecoratorFunction Special
307315 HiLink jsFuncArgRestDots Noise
308- HiLink jsFuncArgDestructuring Noise
316+ HiLink jsFuncArgOperator jsFuncArgs
309317 HiLink jsModuleAsterisk Noise
310318 HiLink jsClassProperty jsObjectKey
311319 HiLink jsSpreadOperator Operator
312320
321+ HiLink jsDestructuringBraces Noise
322+ HiLink jsDestructuringProperty jsObjectKey
323+ HiLink jsDestructuringAssignment jsObjectKey
324+ HiLink jsDestructuringNoise Noise
325+
313326 HiLink jsDomErrNo Constant
314327 HiLink jsDomNodeConsts Constant
315328 HiLink jsDomElemAttrs Label
0 commit comments