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); }