@@ -195,7 +195,7 @@ repository:
195195 - include : ' #template'
196196 - include : ' #comment'
197197 - include : ' #function-expression'
198- - include : ' #class-or-interface-declaration '
198+ - include : ' #class-expression '
199199 - include : ' #arrow-function'
200200 - include : ' #cast'
201201 - include : ' #ternary-expression'
@@ -235,7 +235,8 @@ repository:
235235 - include : ' #decorator'
236236 - include : ' #var-expr'
237237 - include : ' #function-declaration'
238- - include : ' #class-or-interface-declaration'
238+ - include : ' #class-declaration'
239+ - include : ' #interface-declaration'
239240 - include : ' #type-declaration'
240241 - include : ' #enum-declaration'
241242 - include : ' #namespace-declaration'
@@ -429,42 +430,53 @@ repository:
429430 - name : variable.other.readwrite.alias.ts
430431 match : ([_$[:alpha:]][_$[:alnum:]]*)
431432
432- class-or-interface-declaration :
433+ class-declaration :
434+ name : meta.class.ts
435+ begin : (?<!\.|\$)\b(?:(export)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])
436+ beginCaptures :
437+ ' 1 ' : { name: keyword.control.export.ts }
438+ ' 2 ' : { name: storage.modifier.ts }
439+ ' 3 ' : { name: storage.type.class.ts }
440+ end : (?<=\})
433441 patterns :
434- - name : meta.class.ts
435- begin : (?<!\.|\$)\b(?:(export)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])
436- beginCaptures :
437- ' 1 ' : { name: keyword.control.export.ts }
438- ' 2 ' : { name: storage.modifier.ts }
439- ' 3 ' : { name: storage.type.class.ts }
440- end : (?<=\})
441- endCaptures :
442- ' 1 ' : { name: punctuation.definition.block.ts }
443- patterns :
444- - include : ' #comment'
445- - include : ' #class-or-interface-heritage' # Must be before object-name to consume the "extends" keyword.
446- - match : ' [_$[:alpha:]][_$[:alnum:]]*'
447- captures :
448- ' 0 ' : { name: 'entity.name.type.class.ts' }
449- - include : ' #type-parameters' # Must be applied after object-name e.g. interface KeyValuePair<K, V>
450- - include : ' #class-or-interface-body'
451- - name : meta.interface.ts
452- begin : (?<!\.|\$)\b(?:(export)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])
453- beginCaptures :
454- ' 1 ' : { name: keyword.control.export.ts }
455- ' 2 ' : { name: storage.modifier.ts }
456- ' 3 ' : { name: storage.type.interface.ts }
457- end : (?<=\})
458- endCaptures :
459- ' 1 ' : { name: punctuation.definition.block.ts }
460- patterns :
461- - include : ' #comment'
462- - include : ' #class-or-interface-heritage' # Must be before object-name to consume the "extends" keyword.
463- - match : ' [_$[:alpha:]][_$[:alnum:]]*'
464- captures :
465- ' 0 ' : { name: 'entity.name.type.interface.ts' }
466- - include : ' #type-parameters' # Must be applied after object-name e.g. interface KeyValuePair<K, V>
467- - include : ' #class-or-interface-body'
442+ - include : ' #class-declaration-or-expression-patterns'
443+
444+ class-declaration-or-expression-patterns :
445+ patterns :
446+ - include : ' #comment'
447+ - include : ' #class-or-interface-heritage' # Must be before object-name to consume the "extends" keyword.
448+ - match : ' [_$[:alpha:]][_$[:alnum:]]*'
449+ captures :
450+ ' 0 ' : { name: 'entity.name.type.class.ts' }
451+ - include : ' #type-parameters' # Must be applied after object-name e.g. interface KeyValuePair<K, V>
452+ - include : ' #class-or-interface-body'
453+
454+ interface-declaration :
455+ name : meta.interface.ts
456+ begin : (?<!\.|\$)\b(?:(export)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])
457+ beginCaptures :
458+ ' 1 ' : { name: keyword.control.export.ts }
459+ ' 2 ' : { name: storage.modifier.ts }
460+ ' 3 ' : { name: storage.type.interface.ts }
461+ end : (?<=\})
462+ patterns :
463+ - include : ' #comment'
464+ - include : ' #class-or-interface-heritage' # Must be before object-name to consume the "extends" keyword.
465+ - match : ' [_$[:alpha:]][_$[:alnum:]]*'
466+ captures :
467+ ' 0 ' : { name: 'entity.name.type.interface.ts' }
468+ - include : ' #type-parameters' # Must be applied after object-name e.g. interface KeyValuePair<K, V>
469+ - include : ' #class-or-interface-body'
470+
471+ class-expression :
472+ name : meta.class.ts
473+ # allows anonymous class
474+ begin : (?<!\.|\$)\b(class)\b(?=\s+|[<{]|/[/*])
475+ beginCaptures :
476+ ' 1 ' : { name: storage.type.class.ts }
477+ end : (?<=\})
478+ patterns :
479+ - include : ' #class-declaration-or-expression-patterns'
468480
469481 class-or-interface-heritage :
470482 begin : (?<!\.|\$)(?:\b(extends|implements)\b)(?!\$|\.)
@@ -1572,7 +1584,7 @@ repository:
15721584 end : (?<=\))|(?=[;),}\]]|$|((?<!\.|\$)\bnew\b(?!\$|\.))|((?<!\.|\$)\bfunction((\s+[_$[:alpha:]][_$[:alnum:]]*)|(\s*[\(]))))
15731585 patterns :
15741586 - include : ' #paren-expression'
1575- - include : ' #class-or-interface- declaration'
1587+ - include : ' #class-declaration'
15761588 - include : ' #type'
15771589
15781590 object-member :
0 commit comments