From da6059871faac02df3a0520bcaf96598b68ac906 Mon Sep 17 00:00:00 2001 From: Jason Ramsay Date: Thu, 18 Feb 2016 16:33:01 -0800 Subject: [PATCH] Applying getScriptKindFRomFileName to HostFileInformation before we set the ScriptKind. If the host returns ScriptKind 'Unknown' or 'undefined' we attempt to get the correct ScriptKind based on the file name. If this cannot be determined we return the default ScriptKind 'TS' --- src/compiler/parser.ts | 32 ++++++++++++++++---------------- src/services/services.ts | 4 ++-- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index e0bf1f4c2e9..5f9ea09fd6c 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -407,6 +407,22 @@ namespace ts { return result; } + /* @internal */ + export function getScriptKindFromFileName(fileName: string): ScriptKind { + const ext = fileName.split(".").pop(); + switch (ext.toLowerCase()) { + case "js": + return ScriptKind.JS; + case "jsx": + return ScriptKind.JSX; + case "ts": + return ScriptKind.TS; + case "tsx": + return ScriptKind.TSX; + default: + return ScriptKind.TS; + } + } // Produces a new SourceFile for the 'newText' provided. The 'textChangeRange' parameter // indicates what changed between the 'text' that this SourceFile has and the 'newText'. @@ -551,22 +567,6 @@ namespace ts { return result; } - function getScriptKindFromFileName(fileName: string): ScriptKind { - const ext = fileName.split(".").pop(); - switch (ext.toLowerCase()) { - case "js": - return ScriptKind.JS; - case "jsx": - return ScriptKind.JSX; - case "ts": - return ScriptKind.TS; - case "tsx": - return ScriptKind.TSX; - default: - return ScriptKind.TS; - } - } - function getLanguageVariant(scriptKind: ScriptKind) { // .tsx and .jsx files are treated as jsx language variant. return scriptKind === ScriptKind.TSX || scriptKind === ScriptKind.JSX || scriptKind === ScriptKind.JS ? LanguageVariant.JSX : LanguageVariant.Standard; diff --git a/src/services/services.ts b/src/services/services.ts index 23db7b98a27..3dbd34cbedd 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1757,7 +1757,7 @@ namespace ts { hostFileName: fileName, version: this.host.getScriptVersion(fileName), scriptSnapshot: scriptSnapshot, - scriptKind: scriptKind + scriptKind: scriptKind ? scriptKind : getScriptKindFromFileName(fileName) }; } @@ -2857,7 +2857,7 @@ namespace ts { // We do not support the scenario where a host can modify a registered // file's script kind, i.e. in one project some file is treated as ".ts" // and in another as ".js" - Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind +") for file: " + fileName); + Debug.assert(hostFileInformation.scriptKind === oldSourceFile.scriptKind, "Registered script kind (" + oldSourceFile.scriptKind + ") should match new script kind (" + hostFileInformation.scriptKind + ") for file: " + fileName); return documentRegistry.updateDocument(fileName, newSettings, hostFileInformation.scriptSnapshot, hostFileInformation.version, hostFileInformation.scriptKind); }