Skip to content

Commit cdff95f

Browse files
author
Armando Aguirre
committed
Refactored exceededTotalSizeLimitForNonTsFiles to return the last filename analyzed if the service language is going to be disabled
1 parent c33a14d commit cdff95f

3 files changed

Lines changed: 32 additions & 31 deletions

File tree

src/server/editorServices.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,9 +1377,10 @@ namespace ts.server {
13771377
return { projectOptions, configFileErrors: errors, configFileSpecs: parsedCommandLine.configFileSpecs };
13781378
}
13791379

1380-
private exceededTotalSizeLimitForNonTsFiles<T>(name: string, options: CompilerOptions, fileNames: T[], propertyReader: FilePropertyReader<T>) {
1380+
/** Get a filename if the language service exceeds the maximum allowed program size; otherwise returns undefined. */
1381+
private getFilenameForExceededTotalSizeLimitForNonTsFiles<T>(name: string, options: CompilerOptions, fileNames: T[], propertyReader: FilePropertyReader<T>): string | undefined {
13811382
if (options && options.disableSizeLimit || !this.host.getFileSize) {
1382-
return false;
1383+
return;
13831384
}
13841385

13851386
let availableSpace = maxProgramSizeForNonTsFiles;
@@ -1396,20 +1397,16 @@ namespace ts.server {
13961397

13971398
totalNonTsFileSize += this.host.getFileSize(fileName);
13981399

1399-
if (totalNonTsFileSize > maxProgramSizeForNonTsFiles) {
1400+
if (totalNonTsFileSize > maxProgramSizeForNonTsFiles || totalNonTsFileSize > availableSpace) {
14001401
this.logger.info(getExceedLimitMessage({ propertyReader, hasTypeScriptFileExtension, host: this.host }, totalNonTsFileSize));
14011402
// Keep the size as zero since it's disabled
1402-
return true;
1403+
return fileName;
14031404
}
14041405
}
14051406

1406-
if (totalNonTsFileSize > availableSpace) {
1407-
this.logger.info(getExceedLimitMessage({ propertyReader, hasTypeScriptFileExtension, host: this.host }, totalNonTsFileSize));
1408-
return true;
1409-
}
1410-
14111407
this.projectToSizeMap.set(name, totalNonTsFileSize);
1412-
return false;
1408+
1409+
return;
14131410

14141411
function getExceedLimitMessage(context: { propertyReader: FilePropertyReader<any>, hasTypeScriptFileExtension: (filename: string) => boolean, host: ServerHost }, totalNonTsFileSize: number) {
14151412
const files = getTop5LargestFiles(context);
@@ -1432,7 +1429,7 @@ namespace ts.server {
14321429
this,
14331430
this.documentRegistry,
14341431
compilerOptions,
1435-
/*languageServiceEnabled*/ !this.exceededTotalSizeLimitForNonTsFiles(projectFileName, compilerOptions, files, externalFilePropertyReader),
1432+
/*exceededFilename*/ this.getFilenameForExceededTotalSizeLimitForNonTsFiles(projectFileName, compilerOptions, files, externalFilePropertyReader),
14361433
options.compileOnSave === undefined ? true : options.compileOnSave);
14371434
project.excludedFiles = excludedFiles;
14381435

@@ -1498,14 +1495,14 @@ namespace ts.server {
14981495
const cachedDirectoryStructureHost = createCachedDirectoryStructureHost(this.host, this.host.getCurrentDirectory(), this.host.useCaseSensitiveFileNames);
14991496
const { projectOptions, configFileErrors, configFileSpecs } = this.convertConfigFileContentToProjectOptions(configFileName, cachedDirectoryStructureHost);
15001497
this.logger.info(`Opened configuration file ${configFileName}`);
1501-
const languageServiceEnabled = !this.exceededTotalSizeLimitForNonTsFiles(configFileName, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader);
1498+
const exceededFilename = this.getFilenameForExceededTotalSizeLimitForNonTsFiles(configFileName, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader);
15021499
const project = new ConfiguredProject(
15031500
configFileName,
15041501
this,
15051502
this.documentRegistry,
15061503
projectOptions.configHasFilesProperty,
15071504
projectOptions.compilerOptions,
1508-
languageServiceEnabled,
1505+
exceededFilename,
15091506
projectOptions.compileOnSave === undefined ? false : projectOptions.compileOnSave,
15101507
cachedDirectoryStructureHost);
15111508

@@ -1518,7 +1515,7 @@ namespace ts.server {
15181515
WatchType.ConfigFilePath,
15191516
project
15201517
);
1521-
if (languageServiceEnabled) {
1518+
if (!exceededFilename) {
15221519
project.watchWildcards(projectOptions.wildcardDirectories);
15231520
}
15241521

@@ -1631,8 +1628,9 @@ namespace ts.server {
16311628
// Update the project
16321629
project.configFileSpecs = configFileSpecs;
16331630
project.setProjectErrors(configFileErrors);
1634-
if (this.exceededTotalSizeLimitForNonTsFiles(project.canonicalConfigFilePath, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader)) {
1635-
project.disableLanguageService();
1631+
const exceededFilename = this.getFilenameForExceededTotalSizeLimitForNonTsFiles(project.canonicalConfigFilePath, projectOptions.compilerOptions, projectOptions.files, fileNamePropertyReader);
1632+
if (exceededFilename) {
1633+
project.disableLanguageService(exceededFilename);
16361634
project.stopWatchingWildCards();
16371635
}
16381636
else {
@@ -2396,8 +2394,9 @@ namespace ts.server {
23962394
externalProject.excludedFiles = excludedFiles;
23972395
if (!tsConfigFiles) {
23982396
const compilerOptions = convertCompilerOptions(proj.options);
2399-
if (this.exceededTotalSizeLimitForNonTsFiles(proj.projectFileName, compilerOptions, proj.rootFiles, externalFilePropertyReader)) {
2400-
externalProject.disableLanguageService();
2397+
const exceededFilename = this.getFilenameForExceededTotalSizeLimitForNonTsFiles(proj.projectFileName, compilerOptions, proj.rootFiles, externalFilePropertyReader);
2398+
if (exceededFilename) {
2399+
externalProject.disableLanguageService(exceededFilename);
24012400
}
24022401
else {
24032402
externalProject.enableLanguageService();

src/server/project.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ namespace ts.server {
130130
protected languageService: LanguageService;
131131

132132
public languageServiceEnabled = true;
133+
public exceededFilename: string | undefined;
133134

134135
readonly trace?: (s: string) => void;
135136
readonly realpath?: (path: string) => string;
@@ -212,7 +213,7 @@ namespace ts.server {
212213
readonly projectService: ProjectService,
213214
private documentRegistry: DocumentRegistry,
214215
hasExplicitListOfFiles: boolean,
215-
languageServiceEnabled: boolean,
216+
exceededFilename: string | undefined,
216217
private compilerOptions: CompilerOptions,
217218
public compileOnSaveEnabled: boolean,
218219
directoryStructureHost: DirectoryStructureHost,
@@ -244,8 +245,8 @@ namespace ts.server {
244245
// Use the current directory as resolution root only if the project created using current directory string
245246
this.resolutionCache = createResolutionCache(this, currentDirectory && this.currentDirectory, /*logChangesWhenResolvingModule*/ true);
246247
this.languageService = createLanguageService(this, this.documentRegistry);
247-
if (!languageServiceEnabled) {
248-
this.disableLanguageService();
248+
if (exceededFilename) {
249+
this.disableLanguageService(exceededFilename);
249250
}
250251
this.markAsDirty();
251252
}
@@ -500,12 +501,13 @@ namespace ts.server {
500501
this.projectService.onUpdateLanguageServiceStateForProject(this, /*languageServiceEnabled*/ true);
501502
}
502503

503-
disableLanguageService() {
504+
disableLanguageService(exceededFilename: string) {
504505
if (!this.languageServiceEnabled) {
505506
return;
506507
}
507508
this.languageService.cleanupSemanticCache();
508509
this.languageServiceEnabled = false;
510+
this.exceededFilename = exceededFilename;
509511
this.builderState = undefined;
510512
this.resolutionCache.closeTypeRootsWatch();
511513
this.projectService.onUpdateLanguageServiceStateForProject(this, /*languageServiceEnabled*/ false);
@@ -993,12 +995,12 @@ namespace ts.server {
993995
getChangesSinceVersion(lastKnownVersion?: number): ProjectFilesWithTSDiagnostics {
994996
this.updateGraph();
995997

996-
const info = {
998+
const info: protocol.ProjectVersionInfo = {
997999
projectName: this.getProjectName(),
9981000
version: this.projectStructureVersion,
9991001
isInferred: this.projectKind === ProjectKind.Inferred,
10001002
options: this.getCompilationSettings(),
1001-
languageServiceDisabled: !this.languageServiceEnabled
1003+
exceededFilename: this.exceededFilename
10021004
};
10031005
const updatedFileNames = this.updatedFileNames;
10041006
this.updatedFileNames = undefined;
@@ -1182,7 +1184,7 @@ namespace ts.server {
11821184
projectService,
11831185
documentRegistry,
11841186
/*files*/ undefined,
1185-
/*languageServiceEnabled*/ true,
1187+
/*exceededFileName*/ undefined,
11861188
compilerOptions,
11871189
/*compileOnSaveEnabled*/ false,
11881190
projectService.host,
@@ -1261,15 +1263,15 @@ namespace ts.server {
12611263
documentRegistry: DocumentRegistry,
12621264
hasExplicitListOfFiles: boolean,
12631265
compilerOptions: CompilerOptions,
1264-
languageServiceEnabled: boolean,
1266+
exceededFilename: string | undefined,
12651267
public compileOnSaveEnabled: boolean,
12661268
cachedDirectoryStructureHost: CachedDirectoryStructureHost) {
12671269
super(configFileName,
12681270
ProjectKind.Configured,
12691271
projectService,
12701272
documentRegistry,
12711273
hasExplicitListOfFiles,
1272-
languageServiceEnabled,
1274+
exceededFilename,
12731275
compilerOptions,
12741276
compileOnSaveEnabled,
12751277
cachedDirectoryStructureHost,
@@ -1456,15 +1458,15 @@ namespace ts.server {
14561458
projectService: ProjectService,
14571459
documentRegistry: DocumentRegistry,
14581460
compilerOptions: CompilerOptions,
1459-
languageServiceEnabled: boolean,
1461+
exceededFilename: string | undefined,
14601462
public compileOnSaveEnabled: boolean,
14611463
projectFilePath?: string) {
14621464
super(externalProjectName,
14631465
ProjectKind.External,
14641466
projectService,
14651467
documentRegistry,
14661468
/*hasExplicitListOfFiles*/ true,
1467-
languageServiceEnabled,
1469+
exceededFilename,
14681470
compilerOptions,
14691471
compileOnSaveEnabled,
14701472
projectService.host,

src/server/protocol.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,9 +1106,9 @@ namespace ts.server.protocol {
11061106
options: ts.CompilerOptions;
11071107

11081108
/**
1109-
* true if project language service is disabled
1109+
* Filename of the last file analyzed before disabling the language service. undefined, if the language service is enabled.
11101110
*/
1111-
languageServiceDisabled: boolean;
1111+
exceededFilename: string | undefined;
11121112
}
11131113

11141114
/**

0 commit comments

Comments
 (0)