Fix incorrectly logging ts files instead of .js files as top files (#42463)

Fixes #41071
This commit is contained in:
Sheetal Nandi 2021-01-25 10:04:39 -08:00 committed by GitHub
parent ca380af99b
commit 1b57a0395e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 20 deletions

View file

@ -1981,28 +1981,17 @@ namespace ts.server {
totalNonTsFileSize += this.host.getFileSize(fileName);
if (totalNonTsFileSize > maxProgramSizeForNonTsFiles || totalNonTsFileSize > availableSpace) {
this.logger.info(getExceedLimitMessage({ propertyReader, hasTSFileExtension: ts.hasTSFileExtension, host: this.host }, totalNonTsFileSize)); // eslint-disable-line @typescript-eslint/no-unnecessary-qualifier
const top5LargestFiles = fileNames.map(f => propertyReader.getFileName(f))
.filter(name => !hasTSFileExtension(name))
.map(name => ({ name, size: this.host.getFileSize!(name) }))
.sort((a, b) => b.size - a.size)
.slice(0, 5);
this.logger.info(`Non TS file size exceeded limit (${totalNonTsFileSize}). Largest files: ${top5LargestFiles.map(file => `${file.name}:${file.size}`).join(", ")}`);
// Keep the size as zero since it's disabled
return fileName;
}
}
this.projectToSizeMap.set(name, totalNonTsFileSize);
return;
function getExceedLimitMessage(context: { propertyReader: FilePropertyReader<any>, hasTSFileExtension: (filename: string) => boolean, host: ServerHost }, totalNonTsFileSize: number) {
const files = getTop5LargestFiles(context);
return `Non TS file size exceeded limit (${totalNonTsFileSize}). Largest files: ${files.map(file => `${file.name}:${file.size}`).join(", ")}`;
}
function getTop5LargestFiles({ propertyReader, hasTSFileExtension, host }: { propertyReader: FilePropertyReader<any>, hasTSFileExtension: (filename: string) => boolean, host: ServerHost }) {
return fileNames.map(f => propertyReader.getFileName(f))
.filter(name => hasTSFileExtension(name))
.map(name => ({ name, size: host.getFileSize!(name) })) // TODO: GH#18217
.sort((a, b) => b.size - a.size)
.slice(0, 5);
}
}
private createExternalProject(projectFileName: string, files: protocol.ExternalFile[], options: protocol.ExternalProjectCompilerOptions, typeAcquisition: TypeAcquisition, excludedFiles: NormalizedPath[]) {

View file

@ -147,7 +147,8 @@ namespace ts.server {
/*@internal*/
private hasAddedorRemovedFiles = false;
private lastFileExceededProgramSize: string | undefined;
/*@internal*/
lastFileExceededProgramSize: string | undefined;
// wrapper over the real language service that will suppress all semantic operations
protected languageService: LanguageService;

View file

@ -7,7 +7,7 @@ namespace ts.projectSystem {
};
const f2 = {
path: "/a/largefile.js",
content: ""
content: "",
};
const config = {
path: "/a/jsconfig.json",
@ -47,5 +47,39 @@ namespace ts.projectSystem {
assert.equal(events[1].data.project.getProjectName(), config.path, "config path");
assert.isTrue(events[1].data.languageServiceEnabled, "Language service state");
});
it("Large file size is determined correctly", () => {
const f1: File = {
path: "/a/app.js",
content: "let x = 1;"
};
const f2: File = {
path: "/a/largefile.js",
content: "",
fileSize: server.maxProgramSizeForNonTsFiles + 1
};
const f3: File = {
path: "/a/extremlylarge.d.ts",
content: "",
fileSize: server.maxProgramSizeForNonTsFiles + 100
};
const config = {
path: "/a/jsconfig.json",
content: "{}"
};
const host = createServerHost([f1, f2, f3, libFile, config]);
const logs: string[] = [];
const logger: server.Logger = {
...nullLogger,
info: s => logs.push(s)
};
const service = createProjectService(host, { logger });
service.openClientFile(f1.path);
checkNumberOfProjects(service, { configuredProjects: 1 });
const project = service.configuredProjects.get(config.path)!;
assert.isFalse(project.languageServiceEnabled, "Language service enabled");
assert.equal(project.lastFileExceededProgramSize, f2.path);
assert.isTrue(contains(logs, `Non TS file size exceeded limit (${f1.content.length + f2.fileSize!}). Largest files: ${f2.path}:${f2.fileSize}, ${f1.path}:${f1.content.length}`));
});
});
}

View file

@ -9267,7 +9267,6 @@ declare namespace ts.server {
private missingFilesMap;
private generatedFilesMap;
private plugins;
private lastFileExceededProgramSize;
protected languageService: LanguageService;
languageServiceEnabled: boolean;
readonly trace?: (s: string) => void;