diff --git a/TypeScript.YAML-tmLanguage b/TypeScript.YAML-tmLanguage
index 7a61c3df..e93fd2d8 100644
--- a/TypeScript.YAML-tmLanguage
+++ b/TypeScript.YAML-tmLanguage
@@ -1257,24 +1257,27 @@ repository:
patterns:
- include: '#comment'
#(default|*|name) as alias
- - match: '{{startOfIdentifier}}(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b{{identifier}})))\s+(as)\s+(?:(default{{endOfIdentifier}})|({{identifier}}))'
+ - match: '{{startOfIdentifier}}(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b{{identifier}})|({{quotedStrings}})))\s+(as)\s+(?:(default{{endOfIdentifier}})|({{identifier}})|({{quotedStrings}}))'
captures:
'1': { name: keyword.control.type.ts }
'2': { name: keyword.control.default.ts }
'3': { name: constant.language.import-export-all.ts }
'4': { name: variable.other.readwrite.ts }
- '5': { name: keyword.control.as.ts }
- '6': { name: keyword.control.default.ts }
- '7': { name: variable.other.readwrite.alias.ts }
+ '5': { name: string.quoted.alias.ts }
+ '12': { name: keyword.control.as.ts }
+ '13': { name: keyword.control.default.ts }
+ '14': { name: variable.other.readwrite.alias.ts }
+ '15': { name: string.quoted.alias.ts }
- include: '#punctuation-comma'
- name: constant.language.import-export-all.ts
match: \*
- name: keyword.control.default.ts
match: \b(default)\b
- - match: '(?:(\btype)\s+)?({{identifier}})'
+ - match: '(?:(\btype)\s+)?(?:({{identifier}})|({{quotedStrings}}))'
captures:
'1': { name: keyword.control.type.ts }
'2': { name: variable.other.readwrite.alias.ts }
+ '3': { name: string.quoted.alias.ts }
#control statements and loops
diff --git a/TypeScript.tmLanguage b/TypeScript.tmLanguage
index 1a3f668b..90915f58 100644
--- a/TypeScript.tmLanguage
+++ b/TypeScript.tmLanguage
@@ -4018,7 +4018,7 @@
match
- (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*))
+ (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))
captures
1
@@ -4042,20 +4042,30 @@
variable.other.readwrite.ts
5
+
+ name
+ string.quoted.alias.ts
+
+ 12
name
keyword.control.as.ts
- 6
+ 13
name
keyword.control.default.ts
- 7
+ 14
name
variable.other.readwrite.alias.ts
+ 15
+
+ name
+ string.quoted.alias.ts
+
@@ -4076,7 +4086,7 @@
match
- (?:(\btype)\s+)?([_$[:alpha:]][_$[:alnum:]]*)
+ (?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))
captures
1
@@ -4089,6 +4099,11 @@
name
variable.other.readwrite.alias.ts
+ 3
+
+ name
+ string.quoted.alias.ts
+
diff --git a/TypeScriptReact.tmLanguage b/TypeScriptReact.tmLanguage
index dcdd118b..20598e4f 100644
--- a/TypeScriptReact.tmLanguage
+++ b/TypeScriptReact.tmLanguage
@@ -4040,7 +4040,7 @@
match
- (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*))
+ (?<![_$[:alnum:]])(?:(?<=\.\.\.)|(?<!\.))(?:(?:(\btype)\s+)?(?:(\bdefault)|(\*)|(\b[_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`))))\s+(as)\s+(?:(default(?![_$[:alnum:]])(?:(?=\.\.\.)|(?!\.)))|([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))
captures
1
@@ -4064,20 +4064,30 @@
variable.other.readwrite.tsx
5
+
+ name
+ string.quoted.alias.tsx
+
+ 12
name
keyword.control.as.tsx
- 6
+ 13
name
keyword.control.default.tsx
- 7
+ 14
name
variable.other.readwrite.alias.tsx
+ 15
+
+ name
+ string.quoted.alias.tsx
+
@@ -4098,7 +4108,7 @@
match
- (?:(\btype)\s+)?([_$[:alpha:]][_$[:alnum:]]*)
+ (?:(\btype)\s+)?(?:([_$[:alpha:]][_$[:alnum:]]*)|((\'([^\'\\]|\\.)*\')|(\"([^\"\\]|\\.)*\")|(\`([^\`\\]|\\.)*\`)))
captures
1
@@ -4111,6 +4121,11 @@
name
variable.other.readwrite.alias.tsx
+ 3
+
+ name
+ string.quoted.alias.tsx
+
diff --git a/tests/baselines/arbitraryModuleNamespaceIdentifiers.baseline.txt b/tests/baselines/arbitraryModuleNamespaceIdentifiers.baseline.txt
new file mode 100644
index 00000000..dd196afc
--- /dev/null
+++ b/tests/baselines/arbitraryModuleNamespaceIdentifiers.baseline.txt
@@ -0,0 +1,412 @@
+original file
+-----------------------------------
+import { "a..." as a } from "./foo";
+import { type "b..." as b } from "./foo";
+
+export { a as "a..." };
+export { "b..." } from "./foo";
+export { "c..." as c } from "./foo";
+export { "d..." as "d..." } from "./foo";
+
+export { type a as "a..." };
+export { type "b..." } from "./foo";
+export { type "c..." as c } from "./foo";
+export { type "d..." as "d..." } from "./foo";
+
+export * as "a..." from "./foo";
+
+-----------------------------------
+
+Grammar: TypeScript.tmLanguage
+-----------------------------------
+>import { "a..." as a } from "./foo";
+ ^^^^^^
+ source.ts meta.import.ts keyword.control.import.ts
+ ^
+ source.ts meta.import.ts
+ ^
+ source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.import.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^^
+ source.ts meta.import.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.import.ts
+ ^^^^
+ source.ts meta.import.ts keyword.control.from.ts
+ ^
+ source.ts meta.import.ts
+ ^
+ source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.import.ts string.quoted.double.ts
+ ^
+ source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>import { type "b..." as b } from "./foo";
+ ^^^^^^
+ source.ts meta.import.ts keyword.control.import.ts
+ ^
+ source.ts meta.import.ts
+ ^
+ source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^^^^
+ source.ts meta.import.ts meta.block.ts keyword.control.type.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.import.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^^
+ source.ts meta.import.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts variable.other.readwrite.alias.ts
+ ^
+ source.ts meta.import.ts meta.block.ts
+ ^
+ source.ts meta.import.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.import.ts
+ ^^^^
+ source.ts meta.import.ts keyword.control.from.ts
+ ^
+ source.ts meta.import.ts
+ ^
+ source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.import.ts string.quoted.double.ts
+ ^
+ source.ts meta.import.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>
+ ^
+ source.ts
+>export { a as "a..." };
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { "b..." } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { "c..." as c } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts variable.other.readwrite.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { "d..." as "d..." } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>
+ ^
+ source.ts
+>export { type a as "a..." };
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^
+ source.ts meta.export.ts meta.block.ts keyword.control.type.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts variable.other.readwrite.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { type "b..." } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^
+ source.ts meta.export.ts meta.block.ts keyword.control.type.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { type "c..." as c } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^
+ source.ts meta.export.ts meta.block.ts keyword.control.type.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts variable.other.readwrite.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>export { type "d..." as "d..." } from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^
+ source.ts meta.export.ts meta.block.ts keyword.control.type.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^
+ source.ts meta.export.ts meta.block.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^^^^^^
+ source.ts meta.export.ts meta.block.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts meta.block.ts
+ ^
+ source.ts meta.export.ts meta.block.ts punctuation.definition.block.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>
+ ^
+ source.ts
+>export * as "a..." from "./foo";
+ ^^^^^^
+ source.ts meta.export.ts keyword.control.export.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts constant.language.import-export-all.ts
+ ^
+ source.ts meta.export.ts
+ ^^
+ source.ts meta.export.ts keyword.control.as.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^^^
+ source.ts meta.export.ts string.quoted.alias.ts
+ ^
+ source.ts meta.export.ts
+ ^^^^
+ source.ts meta.export.ts keyword.control.from.ts
+ ^
+ source.ts meta.export.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.begin.ts
+ ^^^^^
+ source.ts meta.export.ts string.quoted.double.ts
+ ^
+ source.ts meta.export.ts string.quoted.double.ts punctuation.definition.string.end.ts
+ ^
+ source.ts punctuation.terminator.statement.ts
+>
+ ^
+ source.ts
\ No newline at end of file
diff --git a/tests/cases/arbitraryModuleNamespaceIdentifiers.ts b/tests/cases/arbitraryModuleNamespaceIdentifiers.ts
new file mode 100644
index 00000000..d928097d
--- /dev/null
+++ b/tests/cases/arbitraryModuleNamespaceIdentifiers.ts
@@ -0,0 +1,14 @@
+import { "a..." as a } from "./foo";
+import { type "b..." as b } from "./foo";
+
+export { a as "a..." };
+export { "b..." } from "./foo";
+export { "c..." as c } from "./foo";
+export { "d..." as "d..." } from "./foo";
+
+export { type a as "a..." };
+export { type "b..." } from "./foo";
+export { type "c..." as c } from "./foo";
+export { type "d..." as "d..." } from "./foo";
+
+export * as "a..." from "./foo";