Fix incorrectly logging ts files instead of .js files as top files (#42463)
Fixes #41071
This commit is contained in:
parent
ca380af99b
commit
1b57a0395e
|
@ -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[]) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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}`));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue