Skip to content

Commit 1b57a03

Browse files
authored
Fix incorrectly logging ts files instead of .js files as top files (microsoft#42463)
Fixes microsoft#41071
1 parent ca380af commit 1b57a03

File tree

4 files changed

+43
-20
lines changed

4 files changed

+43
-20
lines changed

src/server/editorServices.ts

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1981,28 +1981,17 @@ namespace ts.server {
19811981
totalNonTsFileSize += this.host.getFileSize(fileName);
19821982

19831983
if (totalNonTsFileSize > maxProgramSizeForNonTsFiles || totalNonTsFileSize > availableSpace) {
1984-
this.logger.info(getExceedLimitMessage({ propertyReader, hasTSFileExtension: ts.hasTSFileExtension, host: this.host }, totalNonTsFileSize)); // eslint-disable-line @typescript-eslint/no-unnecessary-qualifier
1984+
const top5LargestFiles = fileNames.map(f => propertyReader.getFileName(f))
1985+
.filter(name => !hasTSFileExtension(name))
1986+
.map(name => ({ name, size: this.host.getFileSize!(name) }))
1987+
.sort((a, b) => b.size - a.size)
1988+
.slice(0, 5);
1989+
this.logger.info(`Non TS file size exceeded limit (${totalNonTsFileSize}). Largest files: ${top5LargestFiles.map(file => `${file.name}:${file.size}`).join(", ")}`);
19851990
// Keep the size as zero since it's disabled
19861991
return fileName;
19871992
}
19881993
}
1989-
19901994
this.projectToSizeMap.set(name, totalNonTsFileSize);
1991-
1992-
return;
1993-
1994-
function getExceedLimitMessage(context: { propertyReader: FilePropertyReader<any>, hasTSFileExtension: (filename: string) => boolean, host: ServerHost }, totalNonTsFileSize: number) {
1995-
const files = getTop5LargestFiles(context);
1996-
1997-
return `Non TS file size exceeded limit (${totalNonTsFileSize}). Largest files: ${files.map(file => `${file.name}:${file.size}`).join(", ")}`;
1998-
}
1999-
function getTop5LargestFiles({ propertyReader, hasTSFileExtension, host }: { propertyReader: FilePropertyReader<any>, hasTSFileExtension: (filename: string) => boolean, host: ServerHost }) {
2000-
return fileNames.map(f => propertyReader.getFileName(f))
2001-
.filter(name => hasTSFileExtension(name))
2002-
.map(name => ({ name, size: host.getFileSize!(name) })) // TODO: GH#18217
2003-
.sort((a, b) => b.size - a.size)
2004-
.slice(0, 5);
2005-
}
20061995
}
20071996

20081997
private createExternalProject(projectFileName: string, files: protocol.ExternalFile[], options: protocol.ExternalProjectCompilerOptions, typeAcquisition: TypeAcquisition, excludedFiles: NormalizedPath[]) {

src/server/project.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,8 @@ namespace ts.server {
147147
/*@internal*/
148148
private hasAddedorRemovedFiles = false;
149149

150-
private lastFileExceededProgramSize: string | undefined;
150+
/*@internal*/
151+
lastFileExceededProgramSize: string | undefined;
151152

152153
// wrapper over the real language service that will suppress all semantic operations
153154
protected languageService: LanguageService;

src/testRunner/unittests/tsserver/events/projectLanguageServiceState.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace ts.projectSystem {
77
};
88
const f2 = {
99
path: "/a/largefile.js",
10-
content: ""
10+
content: "",
1111
};
1212
const config = {
1313
path: "/a/jsconfig.json",
@@ -47,5 +47,39 @@ namespace ts.projectSystem {
4747
assert.equal(events[1].data.project.getProjectName(), config.path, "config path");
4848
assert.isTrue(events[1].data.languageServiceEnabled, "Language service state");
4949
});
50+
51+
it("Large file size is determined correctly", () => {
52+
const f1: File = {
53+
path: "/a/app.js",
54+
content: "let x = 1;"
55+
};
56+
const f2: File = {
57+
path: "/a/largefile.js",
58+
content: "",
59+
fileSize: server.maxProgramSizeForNonTsFiles + 1
60+
};
61+
const f3: File = {
62+
path: "/a/extremlylarge.d.ts",
63+
content: "",
64+
fileSize: server.maxProgramSizeForNonTsFiles + 100
65+
};
66+
const config = {
67+
path: "/a/jsconfig.json",
68+
content: "{}"
69+
};
70+
const host = createServerHost([f1, f2, f3, libFile, config]);
71+
const logs: string[] = [];
72+
const logger: server.Logger = {
73+
...nullLogger,
74+
info: s => logs.push(s)
75+
};
76+
const service = createProjectService(host, { logger });
77+
service.openClientFile(f1.path);
78+
checkNumberOfProjects(service, { configuredProjects: 1 });
79+
const project = service.configuredProjects.get(config.path)!;
80+
assert.isFalse(project.languageServiceEnabled, "Language service enabled");
81+
assert.equal(project.lastFileExceededProgramSize, f2.path);
82+
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}`));
83+
});
5084
});
5185
}

tests/baselines/reference/api/tsserverlibrary.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9267,7 +9267,6 @@ declare namespace ts.server {
92679267
private missingFilesMap;
92689268
private generatedFilesMap;
92699269
private plugins;
9270-
private lastFileExceededProgramSize;
92719270
protected languageService: LanguageService;
92729271
languageServiceEnabled: boolean;
92739272
readonly trace?: (s: string) => void;

0 commit comments

Comments
 (0)