Skip to content

Commit b448a96

Browse files
author
Roy Tinker
committed
Implement microsoft#35656
1 parent 1952ccc commit b448a96

File tree

3 files changed

+32
-12
lines changed

3 files changed

+32
-12
lines changed

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -273,18 +273,7 @@ namespace ts {
273273
{
274274
name: "target",
275275
shortName: "t",
276-
type: createMapFromTemplate({
277-
es3: ScriptTarget.ES3,
278-
es5: ScriptTarget.ES5,
279-
es6: ScriptTarget.ES2015,
280-
es2015: ScriptTarget.ES2015,
281-
es2016: ScriptTarget.ES2016,
282-
es2017: ScriptTarget.ES2017,
283-
es2018: ScriptTarget.ES2018,
284-
es2019: ScriptTarget.ES2019,
285-
es2020: ScriptTarget.ES2020,
286-
esnext: ScriptTarget.ESNext,
287-
}),
276+
type: ScriptTargetMap,
288277
affectsSourceFile: true,
289278
affectsModuleResolution: true,
290279
affectsEmit: true,

src/compiler/parser.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8186,6 +8186,19 @@ namespace ts {
81868186
});
81878187
break;
81888188
}
8189+
case "compilerOptions": {
8190+
forEach(toArray(entryOrList), entry => {
8191+
// _last_ compilerOptions target value in a file is the "winner"
8192+
const targetKey = (entry as PragmaPseudoMap["compilerOptions"]).arguments.target;
8193+
if (ScriptTargetMap.has(targetKey)) {
8194+
context.languageVersion = ScriptTargetMap.get(targetKey) as ScriptTarget;
8195+
}
8196+
else {
8197+
Debug.fail(`Unrecognized compilerOptions target in XML pragma: ${targetKey}`);
8198+
}
8199+
});
8200+
break;
8201+
}
81898202
case "jsx": return; // Accessed directly
81908203
default: Debug.fail("Unhandled pragma kind"); // Can this be made into an assertNever in the future?
81918204
}

src/compiler/types.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5163,6 +5163,20 @@ namespace ts {
51635163
Latest = ESNext,
51645164
}
51655165

5166+
export const ScriptTargetMap = createMapFromTemplate({
5167+
es3: ScriptTarget.ES3,
5168+
es5: ScriptTarget.ES5,
5169+
es6: ScriptTarget.ES2015,
5170+
es2015: ScriptTarget.ES2015,
5171+
es2016: ScriptTarget.ES2016,
5172+
es2017: ScriptTarget.ES2017,
5173+
es2018: ScriptTarget.ES2018,
5174+
es2019: ScriptTarget.ES2019,
5175+
es2020: ScriptTarget.ES2020,
5176+
esnext: ScriptTarget.ESNext,
5177+
});
5178+
Object.freeze(ScriptTargetMap);
5179+
51665180
export const enum LanguageVariant {
51675181
Standard,
51685182
JSX
@@ -6454,6 +6468,10 @@ namespace ts {
64546468
args: [{ name: "name" }],
64556469
kind: PragmaKindFlags.TripleSlashXML
64566470
},
6471+
"compilerOptions": {
6472+
args: [{ name: "target" }],
6473+
kind: PragmaKindFlags.TripleSlashXML
6474+
},
64576475
"ts-check": {
64586476
kind: PragmaKindFlags.SingleLine
64596477
},

0 commit comments

Comments
 (0)