Skip to content

Commit 6d19326

Browse files
authored
Merge pull request microsoft#19228 from Microsoft/dev/billti/fixScriptKindsTypeChecked
Stop error checking script blocks
2 parents 94b4f8b + 7566760 commit 6d19326

File tree

4 files changed

+33
-5
lines changed

4 files changed

+33
-5
lines changed

src/compiler/core.ts

+10
Original file line numberDiff line numberDiff line change
@@ -2593,6 +2593,16 @@ namespace ts {
25932593
return find<Extension>(supportedTypescriptExtensionsForExtractExtension, e => fileExtensionIs(path, e)) || find(supportedJavascriptExtensions, e => fileExtensionIs(path, e));
25942594
}
25952595

2596+
// Retrieves any string from the final "." onwards from a base file name.
2597+
// Unlike extensionFromPath, which throws an exception on unrecognized extensions.
2598+
export function getAnyExtensionFromPath(path: string): string | undefined {
2599+
const baseFileName = getBaseFileName(path);
2600+
const extensionIndex = baseFileName.lastIndexOf(".");
2601+
if (extensionIndex >= 0) {
2602+
return baseFileName.substring(extensionIndex);
2603+
}
2604+
}
2605+
25962606
export function isCheckJsEnabledForFile(sourceFile: SourceFile, compilerOptions: CompilerOptions) {
25972607
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
25982608
}

src/compiler/program.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1146,8 +1146,10 @@ namespace ts {
11461146
const typeChecker = getDiagnosticsProducingTypeChecker();
11471147

11481148
Debug.assert(!!sourceFile.bindDiagnostics);
1149-
// For JavaScript files, we don't want to report semantic errors unless explicitly requested.
1150-
const includeBindAndCheckDiagnostics = !isSourceFileJavaScript(sourceFile) || isCheckJsEnabledForFile(sourceFile, options);
1149+
1150+
// By default, only type-check .ts, .tsx, and 'External' files (external files are added by plugins)
1151+
const includeBindAndCheckDiagnostics = sourceFile.scriptKind === ScriptKind.TS || sourceFile.scriptKind === ScriptKind.TSX ||
1152+
sourceFile.scriptKind === ScriptKind.External || isCheckJsEnabledForFile(sourceFile, options);
11511153
const bindDiagnostics = includeBindAndCheckDiagnostics ? sourceFile.bindDiagnostics : emptyArray;
11521154
const checkDiagnostics = includeBindAndCheckDiagnostics ? typeChecker.getDiagnostics(sourceFile, cancellationToken) : emptyArray;
11531155
const fileProcessingDiagnosticsInFile = fileProcessingDiagnostics.getDiagnostics(sourceFile.fileName);

src/compiler/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3499,6 +3499,7 @@ namespace ts {
34993499
export interface JsFileExtensionInfo {
35003500
extension: string;
35013501
isMixedContent: boolean;
3502+
scriptKind?: ScriptKind;
35023503
}
35033504

35043505
export interface DiagnosticMessage {

src/server/editorServices.ts

+18-3
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,28 @@ namespace ts.server {
232232

233233
interface FilePropertyReader<T> {
234234
getFileName(f: T): string;
235-
getScriptKind(f: T): ScriptKind;
235+
getScriptKind(f: T, extraFileExtensions?: JsFileExtensionInfo[]): ScriptKind;
236236
hasMixedContent(f: T, extraFileExtensions: JsFileExtensionInfo[]): boolean;
237237
}
238238

239239
const fileNamePropertyReader: FilePropertyReader<string> = {
240240
getFileName: x => x,
241-
getScriptKind: _ => undefined,
241+
getScriptKind: (fileName, extraFileExtensions) => {
242+
let result: ScriptKind;
243+
if (extraFileExtensions) {
244+
const fileExtension = getAnyExtensionFromPath(fileName);
245+
if (fileExtension) {
246+
some(extraFileExtensions, info => {
247+
if (info.extension === fileExtension) {
248+
result = info.scriptKind;
249+
return true;
250+
}
251+
return false;
252+
});
253+
}
254+
}
255+
return result;
256+
},
242257
hasMixedContent: (fileName, extraFileExtensions) => some(extraFileExtensions, ext => ext.isMixedContent && fileExtensionIs(fileName, ext.extension)),
243258
};
244259

@@ -1178,7 +1193,7 @@ namespace ts.server {
11781193
let errors: Diagnostic[];
11791194
for (const f of files) {
11801195
const rootFilename = propertyReader.getFileName(f);
1181-
const scriptKind = propertyReader.getScriptKind(f);
1196+
const scriptKind = propertyReader.getScriptKind(f, this.hostConfiguration.extraFileExtensions);
11821197
const hasMixedContent = propertyReader.hasMixedContent(f, this.hostConfiguration.extraFileExtensions);
11831198
if (this.host.fileExists(rootFilename)) {
11841199
const info = this.getOrCreateScriptInfoForNormalizedPath(toNormalizedPath(rootFilename), /*openedByClient*/ clientFileName === rootFilename, /*fileContent*/ undefined, scriptKind, hasMixedContent);

0 commit comments

Comments
 (0)