Skip to content

Commit 71e2960

Browse files
RyanCavanaughbillti
authored andcommitted
Apply the 20 MB non-TS source limit across all projects
(cherry picked from commit cc8ce59) (cherry picked from commit de8fb9e)
1 parent 25d8367 commit 71e2960

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

src/server/editorServices.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ namespace ts.server {
254254

255255
private compilerOptionsForInferredProjects: CompilerOptions;
256256
private compileOnSaveForInferredProjects: boolean;
257+
private readonly projectToSizeMap: Map<number> = createMap<number>();
257258
private readonly directoryWatchers: DirectoryWatchers;
258259
private readonly throttledOperations: ThrottledOperations;
259260

@@ -563,9 +564,11 @@ namespace ts.server {
563564
switch (project.projectKind) {
564565
case ProjectKind.External:
565566
removeItemFromSet(this.externalProjects, <ExternalProject>project);
567+
this.projectToSizeMap.delete((project as ExternalProject).externalProjectName);
566568
break;
567569
case ProjectKind.Configured:
568570
removeItemFromSet(this.configuredProjects, <ConfiguredProject>project);
571+
this.projectToSizeMap.delete((project as ConfiguredProject).canonicalConfigFilePath);
569572
break;
570573
case ProjectKind.Inferred:
571574
removeItemFromSet(this.inferredProjects, <InferredProject>project);
@@ -852,21 +855,31 @@ namespace ts.server {
852855
return { success: true, projectOptions, configFileErrors: errors };
853856
}
854857

855-
private exceededTotalSizeLimitForNonTsFiles<T>(options: CompilerOptions, fileNames: T[], propertyReader: FilePropertyReader<T>) {
858+
private exceededTotalSizeLimitForNonTsFiles<T>(name: string, options: CompilerOptions, fileNames: T[], propertyReader: FilePropertyReader<T>) {
856859
if (options && options.disableSizeLimit || !this.host.getFileSize) {
857860
return false;
858861
}
862+
863+
let availableSpace = maxProgramSizeForNonTsFiles;
864+
this.projectToSizeMap.set(name, 0);
865+
this.projectToSizeMap.forEach(size => {
866+
availableSpace -= size;
867+
});
868+
859869
let totalNonTsFileSize = 0;
860870
for (const f of fileNames) {
861871
const fileName = propertyReader.getFileName(f);
862872
if (hasTypeScriptFileExtension(fileName)) {
863873
continue;
864874
}
865875
totalNonTsFileSize += this.host.getFileSize(fileName);
866-
if (totalNonTsFileSize > maxProgramSizeForNonTsFiles) {
876+
if (totalNonTsFileSize > availableSpace) {
877+
this.projectToSizeMap.set(name, totalNonTsFileSize);
867878
return true;
868879
}
869880
}
881+
882+
this.projectToSizeMap.set(name, totalNonTsFileSize);
870883
return false;
871884
}
872885

@@ -877,7 +890,7 @@ namespace ts.server {
877890
this,
878891
this.documentRegistry,
879892
compilerOptions,
880-
/*languageServiceEnabled*/ !this.exceededTotalSizeLimitForNonTsFiles(compilerOptions, files, externalFilePropertyReader),
893+
/*languageServiceEnabled*/ !this.exceededTotalSizeLimitForNonTsFiles(projectFileName, compilerOptions, files, externalFilePropertyReader),
881894
options.compileOnSave === undefined ? true : options.compileOnSave);
882895

883896
this.addFilesToProjectAndUpdateGraph(project, files, externalFilePropertyReader, /*clientFileName*/ undefined, typeAcquisition, /*configFileErrors*/ undefined);
@@ -897,7 +910,7 @@ namespace ts.server {
897910
}
898911

899912
private createAndAddConfiguredProject(configFileName: NormalizedPath, projectOptions: ProjectOptions, configFileErrors: Diagnostic[], clientFileName?: string) {
900-
const sizeLimitExceeded = this.exceededTotalSizeLimitForNonTsFiles(projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader);
913+
const sizeLimitExceeded = this.exceededTotalSizeLimitForNonTsFiles(configFileName, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader);
901914
const project = new ConfiguredProject(
902915
configFileName,
903916
this,
@@ -1050,7 +1063,7 @@ namespace ts.server {
10501063
return configFileErrors;
10511064
}
10521065

1053-
if (this.exceededTotalSizeLimitForNonTsFiles(projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader)) {
1066+
if (this.exceededTotalSizeLimitForNonTsFiles(project.canonicalConfigFilePath, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader)) {
10541067
project.setCompilerOptions(projectOptions.compilerOptions);
10551068
if (!project.languageServiceEnabled) {
10561069
// language service is already disabled
@@ -1414,7 +1427,7 @@ namespace ts.server {
14141427
if (externalProject) {
14151428
if (!tsConfigFiles) {
14161429
const compilerOptions = convertCompilerOptions(proj.options);
1417-
if (this.exceededTotalSizeLimitForNonTsFiles(compilerOptions, proj.rootFiles, externalFilePropertyReader)) {
1430+
if (this.exceededTotalSizeLimitForNonTsFiles(proj.projectFileName, compilerOptions, proj.rootFiles, externalFilePropertyReader)) {
14181431
externalProject.disableLanguageService();
14191432
}
14201433
else {

src/server/project.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1031,7 +1031,7 @@ namespace ts.server {
10311031

10321032
export class ExternalProject extends Project {
10331033
private typeAcquisition: TypeAcquisition;
1034-
constructor(externalProjectName: string,
1034+
constructor(public externalProjectName: string,
10351035
projectService: ProjectService,
10361036
documentRegistry: ts.DocumentRegistry,
10371037
compilerOptions: CompilerOptions,

0 commit comments

Comments
 (0)