diff --git a/lib/tsc.js b/lib/tsc.js index fe3d3dce89c..5cfe05deab9 100644 --- a/lib/tsc.js +++ b/lib/tsc.js @@ -33374,20 +33374,8 @@ var ts; } return file_1; } - if (!options.disableSizeLimit) { - if (programSizeForNonTsFiles === -1) { - return; - } - if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { - var commonSourceDirectory_1 = getCommonSourceDirectory(); - var rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory_1.length, path.indexOf(ts.directorySeparator, commonSourceDirectory_1.length))); - if (rootLevelDirectory[rootLevelDirectory.length - 1] !== ts.directorySeparator) { - rootLevelDirectory += ts.directorySeparator; - } - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); - programSizeForNonTsFiles = -1; - return; - } + if (!options.disableSizeLimit && programSizeForNonTsFiles === -1) { + return undefined; } var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { @@ -33399,6 +33387,16 @@ var ts; }); if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { programSizeForNonTsFiles += file.text.length; + if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { + var commonSourceDirectory_1 = getCommonSourceDirectory(); + var rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory_1.length, path.indexOf(ts.directorySeparator, commonSourceDirectory_1.length))); + if (rootLevelDirectory[rootLevelDirectory.length - 1] !== ts.directorySeparator) { + rootLevelDirectory += ts.directorySeparator; + } + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); + programSizeForNonTsFiles = -1; + return undefined; + } } filesByName.set(path, file); if (file) { diff --git a/lib/tsserver.js b/lib/tsserver.js index 01d58c6b771..50ab978f86f 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -33999,20 +33999,8 @@ var ts; } return file_1; } - if (!options.disableSizeLimit) { - if (programSizeForNonTsFiles === -1) { - return; - } - if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { - var commonSourceDirectory_1 = getCommonSourceDirectory(); - var rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory_1.length, path.indexOf(ts.directorySeparator, commonSourceDirectory_1.length))); - if (rootLevelDirectory[rootLevelDirectory.length - 1] !== ts.directorySeparator) { - rootLevelDirectory += ts.directorySeparator; - } - programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); - programSizeForNonTsFiles = -1; - return; - } + if (!options.disableSizeLimit && programSizeForNonTsFiles === -1) { + return undefined; } var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { @@ -34024,6 +34012,16 @@ var ts; }); if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { programSizeForNonTsFiles += file.text.length; + if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { + var commonSourceDirectory_1 = getCommonSourceDirectory(); + var rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory_1.length, path.indexOf(ts.directorySeparator, commonSourceDirectory_1.length))); + if (rootLevelDirectory[rootLevelDirectory.length - 1] !== ts.directorySeparator) { + rootLevelDirectory += ts.directorySeparator; + } + programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); + programSizeForNonTsFiles = -1; + return undefined; + } } filesByName.set(path, file); if (file) { diff --git a/lib/typescript.js b/lib/typescript.js index 6eb17200319..cbf5c9d79c8 100644 --- a/lib/typescript.js +++ b/lib/typescript.js @@ -40278,10 +40278,20 @@ var ts; } return file_1; } - if (!options.disableSizeLimit) { - if (programSizeForNonTsFiles === -1) { - return; + if (!options.disableSizeLimit && programSizeForNonTsFiles === -1) { + return undefined; + } + // We haven't looked for this file, do so now and cache result + var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { + if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { + fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } + else { + fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); + } + }); + if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { + programSizeForNonTsFiles += file.text.length; if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { // If the program size limit was reached when processing a file, this file is // likely in the problematic folder than contains too many files. @@ -40295,21 +40305,9 @@ var ts; } programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); programSizeForNonTsFiles = -1; - return; + return undefined; } } - // We haven't looked for this file, do so now and cache result - var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { - if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { - fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); - } - else { - fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); - } - }); - if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { - programSizeForNonTsFiles += file.text.length; - } filesByName.set(path, file); if (file) { file.path = path; diff --git a/lib/typescriptServices.js b/lib/typescriptServices.js index 6eb17200319..cbf5c9d79c8 100644 --- a/lib/typescriptServices.js +++ b/lib/typescriptServices.js @@ -40278,10 +40278,20 @@ var ts; } return file_1; } - if (!options.disableSizeLimit) { - if (programSizeForNonTsFiles === -1) { - return; + if (!options.disableSizeLimit && programSizeForNonTsFiles === -1) { + return undefined; + } + // We haven't looked for this file, do so now and cache result + var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { + if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { + fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); } + else { + fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); + } + }); + if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { + programSizeForNonTsFiles += file.text.length; if (programSizeForNonTsFiles > ts.maxProgramSizeForNonTsFiles) { // If the program size limit was reached when processing a file, this file is // likely in the problematic folder than contains too many files. @@ -40295,21 +40305,9 @@ var ts; } programDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); programSizeForNonTsFiles = -1; - return; + return undefined; } } - // We haven't looked for this file, do so now and cache result - var file = host.getSourceFile(fileName, options.target, function (hostErrorMessage) { - if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) { - fileProcessingDiagnostics.add(ts.createFileDiagnostic(refFile, refPos, refEnd - refPos, ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); - } - else { - fileProcessingDiagnostics.add(ts.createCompilerDiagnostic(ts.Diagnostics.Cannot_read_file_0_Colon_1, fileName, hostErrorMessage)); - } - }); - if (!options.disableSizeLimit && file && file.text && !ts.hasTypeScriptFileExtension(file.fileName)) { - programSizeForNonTsFiles += file.text.length; - } filesByName.set(path, file); if (file) { file.path = path; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index dd519a2559b..96e9ad1cf1d 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1089,25 +1089,8 @@ namespace ts { return file; } - if (!options.disableSizeLimit) { - if (programSizeForNonTsFiles === -1) { - return; - } - if (programSizeForNonTsFiles > maxProgramSizeForNonTsFiles) { - // If the program size limit was reached when processing a file, this file is - // likely in the problematic folder than contains too many files. - // Normally the folder is one level down from the commonSourceDirectory, for example, - // if the commonSourceDirectory is "/src/", and the last processed path was "/src/node_modules/a/b.js", - // we should show in the error message "/src/node_modules/". - const commonSourceDirectory = getCommonSourceDirectory(); - let rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory.length, path.indexOf(directorySeparator, commonSourceDirectory.length))); - if (rootLevelDirectory[rootLevelDirectory.length - 1] !== directorySeparator) { - rootLevelDirectory += directorySeparator; - } - programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); - programSizeForNonTsFiles = -1; - return; - } + if (!options.disableSizeLimit && programSizeForNonTsFiles === -1) { + return undefined; } // We haven't looked for this file, do so now and cache result @@ -1123,6 +1106,21 @@ namespace ts { if (!options.disableSizeLimit && file && file.text && !hasTypeScriptFileExtension(file.fileName)) { programSizeForNonTsFiles += file.text.length; + if (programSizeForNonTsFiles > maxProgramSizeForNonTsFiles) { + // If the program size limit was reached when processing a file, this file is + // likely in the problematic folder than contains too many files. + // Normally the folder is one level down from the commonSourceDirectory, for example, + // if the commonSourceDirectory is "/src/", and the last processed path was "/src/node_modules/a/b.js", + // we should show in the error message "/src/node_modules/". + const commonSourceDirectory = getCommonSourceDirectory(); + let rootLevelDirectory = path.substring(0, Math.max(commonSourceDirectory.length, path.indexOf(directorySeparator, commonSourceDirectory.length))); + if (rootLevelDirectory[rootLevelDirectory.length - 1] !== directorySeparator) { + rootLevelDirectory += directorySeparator; + } + programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Too_many_JavaScript_files_in_the_project_Consider_specifying_the_exclude_setting_in_project_configuration_to_limit_included_source_folders_The_likely_folder_to_exclude_is_0_To_disable_the_project_size_limit_set_the_disableSizeLimit_compiler_option_to_true, rootLevelDirectory)); + programSizeForNonTsFiles = -1; + return undefined; + } } filesByName.set(path, file); diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 8c3429ac698..fd5fe0bf34b 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -1252,6 +1252,8 @@ namespace ts.server { } } else { + // The project size is too large. Stop loading the files on the server, + // and let the compiler issue an diagnostic via `createProgram`. break; } } @@ -1285,7 +1287,7 @@ namespace ts.server { } else { // if the project is too large, the root files might not have been all loaded if the total - // program size reached the upper limit. In that case project.projectOptions.files should + // program size reached the upper limit. In that case project.projectOptions.files should // be more precise. However this would only happen for configured project. const oldFileNames = project.projectOptions ? project.projectOptions.files : project.compilerService.host.roots.map(info => info.fileName); const newFileNames = projectOptions.files;