Skip to content

Commit 69d78f0

Browse files
committed
Include export declare pattern in declaration matching
Fixes #642
1 parent 4a62029 commit 69d78f0

13 files changed

+298
-127
lines changed

TypeScript.YAML-tmLanguage

Lines changed: 58 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ variables:
5252
matchingBraces: (\{([^\{\}]|(\{[^\{\}]*\}))*\})
5353
matchingBrackets: (\[([^\[\]]|(\[[^\[\]]*\]))*\])
5454
inlineComment: \/\*([^\*]|(\*[^\/]))*\*\/
55+
startOfDeclaration: '{{startOfIdentifier}}(?:(\bexport)\s+)?(?:(\bdeclare)\s+)?'
5556
lookBehindOfPossiblyMultilineArrowWithDestructuring: (?<=[(=,])
5657
lookBehindOfPossiblyMultilineArrow: (?<=[(=,]|=>)
5758
lookBehindOfObjectMemberPossiblyMultilineArrow: (?<=:)
@@ -144,17 +145,19 @@ repository:
144145

145146
declaration:
146147
patterns:
147-
- include: '#decorator'
148-
- include: '#var-expr'
149-
- include: '#function-declaration'
150-
- include: '#class-declaration'
151-
- include: '#interface-declaration'
152-
- include: '#enum-declaration'
153-
- include: '#namespace-declaration'
154-
- include: '#type-alias-declaration'
155-
- include: '#import-equals-declaration'
156-
- include: '#import-declaration'
157-
- include: '#export-declaration'
148+
- include: '#decorator'
149+
- include: '#var-expr'
150+
- include: '#function-declaration'
151+
- include: '#class-declaration'
152+
- include: '#interface-declaration'
153+
- include: '#enum-declaration'
154+
- include: '#namespace-declaration'
155+
- include: '#type-alias-declaration'
156+
- include: '#import-equals-declaration'
157+
- include: '#import-declaration'
158+
- include: '#export-declaration'
159+
- name: storage.modifier.ts
160+
match: '{{startOfIdentifier}}(declare){{endOfIdentifier}}'
158161

159162
control-statement:
160163
patterns:
@@ -180,8 +183,6 @@ repository:
180183
match: '{{startOfIdentifier}}(package){{endOfIdentifier}}'
181184
- name: keyword.other.debugger.ts
182185
match: '{{startOfIdentifier}}(debugger){{endOfIdentifier}}'
183-
- name: storage.modifier.ts
184-
match: '{{startOfIdentifier}}(declare){{endOfIdentifier}}'
185186

186187
label:
187188
patterns:
@@ -244,10 +245,11 @@ repository:
244245
patterns:
245246
# let/var
246247
- name: meta.var.expr.ts
247-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(var|let){{endOfIdentifier}}'
248+
begin: '{{startOfDeclaration}}\b(var|let){{endOfIdentifier}}'
248249
beginCaptures:
249250
'1': { name: keyword.control.export.ts }
250-
'2': { name: storage.type.ts }
251+
'2': { name: storage.modifier.ts }
252+
'3': { name: storage.type.ts }
251253
end: ((?=;|}|(\s+(of|in)\s+)|^\s*$|{{endOfStatement}})|((?<=\S)(?<!{{lookBehindLet}}|{{lookBehindVar}})(?=\s*$)))
252254
patterns:
253255
- include: '#destructuring-variable'
@@ -266,10 +268,11 @@ repository:
266268
- include: '#punctuation-comma'
267269
# const
268270
- name: meta.var.expr.ts
269-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(const(?!\s+enum\b)){{endOfIdentifier}}'
271+
begin: '{{startOfDeclaration}}\b(const(?!\s+enum\b)){{endOfIdentifier}}'
270272
beginCaptures:
271273
'1': { name: keyword.control.export.ts }
272-
'2': { name: storage.type.ts }
274+
'2': { name: storage.modifier.ts }
275+
'3': { name: storage.type.ts }
273276
end: ((?=;|}|(\s+(of|in)\s+)|^\s*$|{{endOfStatement}})|((?<=\S)(?<!{{lookBehindConst}})(?=\s*$)))
274277
patterns:
275278
- include: '#destructuring-const'
@@ -629,13 +632,14 @@ repository:
629632
#functions, methods, function expressions, arrows, indexers
630633
function-declaration:
631634
name: meta.function.ts
632-
begin: '{{startOfIdentifier}}(?:(export)\s+)?(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))({{identifier}}))?\s*'
635+
begin: '{{startOfDeclaration}}(?:(async)\s+)?(function\b)(?:\s*(\*))?(?:(?:\s+|(?<=\*))({{identifier}}))?\s*'
633636
beginCaptures:
634637
'1': { name: keyword.control.export.ts }
635-
'2': { name: storage.modifier.async.ts }
636-
'3': { name: storage.type.function.ts }
637-
'4': { name: keyword.generator.asterisk.ts }
638-
'5': { name: meta.definition.function.ts entity.name.function.ts }
638+
'2': { name: storage.modifier.ts }
639+
'3': { name: storage.modifier.async.ts }
640+
'4': { name: storage.type.function.ts }
641+
'5': { name: keyword.generator.asterisk.ts }
642+
'6': { name: meta.definition.function.ts entity.name.function.ts }
639643
end: (?=$|^|;)|(?<=\})
640644
patterns:
641645
- include: '#function-name'
@@ -836,11 +840,12 @@ repository:
836840
#class declaration and expression, interface
837841
class-declaration:
838842
name: meta.class.ts
839-
begin: '{{startOfIdentifier}}(?:(export)\s+)?\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])'
843+
begin: '{{startOfDeclaration}}\b(?:(abstract)\s+)?\b(class)\b(?=\s+|/[/*])'
840844
beginCaptures:
841845
'1': { name: keyword.control.export.ts }
842846
'2': { name: storage.modifier.ts }
843-
'3': { name: storage.type.class.ts }
847+
'3': { name: storage.modifier.ts }
848+
'4': { name: storage.type.class.ts }
844849
end: (?<=\})
845850
patterns:
846851
- include: '#class-declaration-or-expression-patterns'
@@ -867,11 +872,12 @@ repository:
867872

868873
interface-declaration:
869874
name: meta.interface.ts
870-
begin: '{{startOfIdentifier}}(?:(export)\s+)?\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])'
875+
begin: '{{startOfDeclaration}}\b(?:(abstract)\s+)?\b(interface)\b(?=\s+|/[/*])'
871876
beginCaptures:
872877
'1': { name: keyword.control.export.ts }
873878
'2': { name: storage.modifier.ts }
874-
'3': { name: storage.type.interface.ts }
879+
'3': { name: storage.modifier.ts }
880+
'4': { name: storage.type.interface.ts }
875881
end: (?<=\})
876882
patterns:
877883
- include: '#comment'
@@ -945,12 +951,13 @@ repository:
945951
#enum
946952
enum-declaration:
947953
name: meta.enum.declaration.ts
948-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?(?:\b(const)\s+)?\b(enum)\s+({{identifier}})'
954+
begin: '{{startOfDeclaration}}(?:\b(const)\s+)?\b(enum)\s+({{identifier}})'
949955
beginCaptures:
950956
'1': { name: keyword.control.export.ts }
951957
'2': { name: storage.modifier.ts}
952-
'3': { name: storage.type.enum.ts }
953-
'4': { name: entity.name.type.enum.ts }
958+
'3': { name: storage.modifier.ts}
959+
'4': { name: storage.type.enum.ts }
960+
'5': { name: entity.name.type.enum.ts }
954961
end: (?<=\})
955962
patterns:
956963
- include: '#comment'
@@ -981,10 +988,11 @@ repository:
981988
#namespace
982989
namespace-declaration:
983990
name: meta.namespace.declaration.ts
984-
begin: (?:{{startOfIdentifier}}(?:(\bexport)\s+)?\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))
991+
begin: (?:{{startOfDeclaration}}\b(namespace|module)\s+(?=[_$[:alpha:]"'`]))
985992
beginCaptures:
986993
'1': { name: keyword.control.export.ts }
987-
'2': { name: storage.type.namespace.ts }
994+
'2': { name: storage.modifier.ts }
995+
'3': { name: storage.type.namespace.ts }
988996
end: (?<=\})|(?={{endOfStatement}})
989997
patterns:
990998
- include: '#comment'
@@ -997,11 +1005,12 @@ repository:
9971005
#type alias
9981006
type-alias-declaration:
9991007
name: meta.type.declaration.ts
1000-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(type)\b\s+({{identifier}})\s*'
1008+
begin: '{{startOfDeclaration}}\b(type)\b\s+({{identifier}})\s*'
10011009
beginCaptures:
10021010
'1': { name: keyword.control.export.ts }
1003-
'2': { name: storage.type.type.ts }
1004-
'3': { name: entity.name.type.alias.ts }
1011+
'2': { name: storage.modifier.ts }
1012+
'3': { name: storage.type.type.ts }
1013+
'4': { name: entity.name.type.alias.ts }
10051014
end: (?=\}|{{endOfStatement}})
10061015
patterns:
10071016
- include: '#comment'
@@ -1017,27 +1026,29 @@ repository:
10171026
import-equals-declaration:
10181027
patterns:
10191028
- name: meta.import-equals.external.ts
1020-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(import)\s+({{identifier}})\s*(=)\s*(require)\s*(\()'
1029+
begin: '{{startOfDeclaration}}\b(import)\s+({{identifier}})\s*(=)\s*(require)\s*(\()'
10211030
beginCaptures:
10221031
'1': { name: keyword.control.export.ts }
1023-
'2': { name: keyword.control.import.ts }
1024-
'3': { name: variable.other.readwrite.alias.ts }
1025-
'4': { name: keyword.operator.assignment.ts }
1026-
'5': { name: keyword.control.require.ts }
1027-
'6': { name: meta.brace.round.ts }
1032+
'2': { name: storage.modifier.ts }
1033+
'3': { name: keyword.control.import.ts }
1034+
'4': { name: variable.other.readwrite.alias.ts }
1035+
'5': { name: keyword.operator.assignment.ts }
1036+
'6': { name: keyword.control.require.ts }
1037+
'7': { name: meta.brace.round.ts }
10281038
end: \)
10291039
endCaptures:
10301040
'0': { name: meta.brace.round.ts }
10311041
patterns:
10321042
- include: '#comment'
10331043
- include: '#string'
10341044
- name: meta.import-equals.internal.ts
1035-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(import)\s+({{identifier}})\s*(=)\s*(?!require\b)'
1045+
begin: '{{startOfDeclaration}}\b(import)\s+({{identifier}})\s*(=)\s*(?!require\b)'
10361046
beginCaptures:
10371047
'1': { name: keyword.control.export.ts }
1038-
'2': { name: keyword.control.import.ts }
1039-
'3': { name: variable.other.readwrite.alias.ts }
1040-
'4': { name: keyword.operator.assignment.ts }
1048+
'2': { name: storage.modifier.ts }
1049+
'3': { name: keyword.control.import.ts }
1050+
'4': { name: variable.other.readwrite.alias.ts }
1051+
'5': { name: keyword.operator.assignment.ts }
10411052
end: (?=;|$|^)
10421053
patterns:
10431054
- include: '#comment'
@@ -1051,10 +1062,11 @@ repository:
10511062

10521063
import-declaration:
10531064
name: meta.import.ts
1054-
begin: '{{startOfIdentifier}}(?:(\bexport)\s+)?\b(import)(?!\s*[:\(]){{endOfIdentifier}}'
1065+
begin: '{{startOfDeclaration}}\b(import)(?!\s*[:\(]){{endOfIdentifier}}'
10551066
beginCaptures:
10561067
'1': { name: keyword.control.export.ts }
1057-
'2': { name: keyword.control.import.ts }
1068+
'2': { name: storage.modifier.ts }
1069+
'3': { name: keyword.control.import.ts }
10581070
end: (?<!{{lookBehindImport}})(?=;|$|^)
10591071
patterns:
10601072
- include: '#comment'

0 commit comments

Comments
 (0)