Skip to content

Commit 5ef9065

Browse files
committed
Update class expression to accept anonymous declaration
Fixes #486
1 parent e57ddfb commit 5ef9065

File tree

5 files changed

+387
-276
lines changed

5 files changed

+387
-276
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)