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'
This commit is contained in:
Jason Ramsay
2016-02-18 16:33:01 -08:00
parent 1c990bd242
commit da6059871f
2 changed files with 18 additions and 18 deletions
+16 -16
View File
@@ -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;
+2 -2
View File
@@ -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);
}