mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-19 00:42:28 -05:00
Refactoring
This commit is contained in:
@@ -408,7 +408,7 @@ namespace ts {
|
||||
description: Diagnostics.Specify_library_files_to_be_included_in_the_compilation_Colon
|
||||
},
|
||||
{
|
||||
name: "disableSizeLimit",
|
||||
name: "disableProjectSizeLimit",
|
||||
type: "boolean"
|
||||
},
|
||||
{
|
||||
|
||||
@@ -2984,9 +2984,5 @@
|
||||
"Unknown typing option '{0}'.": {
|
||||
"category": "Error",
|
||||
"code": 17010
|
||||
},
|
||||
"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'.": {
|
||||
"category": "Error",
|
||||
"code": 17012
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,6 @@ namespace ts {
|
||||
/* @internal */ export let emitTime = 0;
|
||||
/* @internal */ export let ioReadTime = 0;
|
||||
/* @internal */ export let ioWriteTime = 0;
|
||||
/* @internal */ export const maxProgramSizeForNonTsFiles = 20 * 1024 * 1024;
|
||||
|
||||
/** The version of the TypeScript compiler release */
|
||||
|
||||
const emptyArray: any[] = [];
|
||||
|
||||
@@ -19,6 +16,7 @@ namespace ts {
|
||||
"node_modules/@types/",
|
||||
];
|
||||
|
||||
/** The version of the TypeScript compiler release */
|
||||
export const version = "1.9.0";
|
||||
|
||||
export function findConfigFile(searchPath: string, fileExists: (fileName: string) => boolean): string {
|
||||
@@ -1059,8 +1057,6 @@ namespace ts {
|
||||
let diagnosticsProducingTypeChecker: TypeChecker;
|
||||
let noDiagnosticsTypeChecker: TypeChecker;
|
||||
let classifiableNames: Map<string>;
|
||||
let programSizeLimitExceeded = false;
|
||||
let programSizeForNonTsFiles = 0;
|
||||
|
||||
let resolvedTypeReferenceDirectives: Map<ResolvedTypeReferenceDirective> = {};
|
||||
let fileProcessingDiagnostics = createDiagnosticCollection();
|
||||
@@ -1166,11 +1162,6 @@ namespace ts {
|
||||
|
||||
return program;
|
||||
|
||||
function exceedProgramSizeLimit() {
|
||||
return !options.disableSizeLimit && programSizeLimitExceeded;
|
||||
}
|
||||
|
||||
|
||||
function getCommonSourceDirectory() {
|
||||
if (typeof commonSourceDirectory === "undefined") {
|
||||
if (options.rootDir && checkSourceFilesBelongToPath(files, options.rootDir)) {
|
||||
@@ -1219,7 +1210,6 @@ namespace ts {
|
||||
(oldOptions.noLib !== options.noLib) ||
|
||||
(oldOptions.jsx !== options.jsx) ||
|
||||
(oldOptions.allowJs !== options.allowJs) ||
|
||||
(oldOptions.disableSizeLimit !== options.disableSizeLimit) ||
|
||||
(oldOptions.rootDir !== options.rootDir) ||
|
||||
(oldOptions.typesSearchPaths !== options.typesSearchPaths) ||
|
||||
(oldOptions.configFilePath !== options.configFilePath) ||
|
||||
@@ -1838,7 +1828,7 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
if (diagnostic && !exceedProgramSizeLimit()) {
|
||||
if (diagnostic) {
|
||||
if (refFile !== undefined && refEnd !== undefined && refPos !== undefined) {
|
||||
fileProcessingDiagnostics.add(createFileDiagnostic(refFile, refPos, refEnd - refPos, diagnostic, ...diagnosticArgument));
|
||||
}
|
||||
@@ -1871,11 +1861,6 @@ namespace ts {
|
||||
return file;
|
||||
}
|
||||
|
||||
const isNonTsFile = !hasTypeScriptFileExtension(fileName);
|
||||
if (isNonTsFile && exceedProgramSizeLimit()) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// We haven't looked for this file, do so now and cache result
|
||||
const file = host.getSourceFile(fileName, options.target, hostErrorMessage => {
|
||||
if (refFile !== undefined && refPos !== undefined && refEnd !== undefined) {
|
||||
@@ -1887,25 +1872,6 @@ 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));
|
||||
programSizeLimitExceeded = true;
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
filesByName.set(path, file);
|
||||
if (file) {
|
||||
file.path = path;
|
||||
|
||||
@@ -27,6 +27,8 @@ namespace ts.server {
|
||||
});
|
||||
}
|
||||
|
||||
export const maxProgramSizeForNonTsFiles = 20 * 1024 * 1024;
|
||||
|
||||
export class ScriptInfo {
|
||||
svc: ScriptVersionCache;
|
||||
children: ScriptInfo[] = []; // files referenced by this file
|
||||
@@ -384,7 +386,7 @@ namespace ts.server {
|
||||
constructor(
|
||||
public projectService: ProjectService,
|
||||
public projectOptions?: ProjectOptions,
|
||||
public languageServiceDiabled?: boolean) {
|
||||
public languageServiceDiabled = false) {
|
||||
if (projectOptions && projectOptions.files) {
|
||||
// If files are listed explicitly, allow all extensions
|
||||
projectOptions.compilerOptions.allowNonTsExtensions = true;
|
||||
@@ -430,7 +432,16 @@ namespace ts.server {
|
||||
|
||||
getFileNames() {
|
||||
if (this.languageServiceDiabled) {
|
||||
return this.projectOptions ? this.projectOptions.files : undefined;
|
||||
if (!this.projectOptions) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const fileNames: string[] = [];
|
||||
if (this.projectOptions && this.projectOptions.compilerOptions) {
|
||||
fileNames.push(getDefaultLibFilePath(this.projectOptions.compilerOptions));
|
||||
}
|
||||
ts.addRange(fileNames, this.projectOptions.files);
|
||||
return fileNames;
|
||||
}
|
||||
|
||||
const sourceFiles = this.program.getSourceFiles();
|
||||
@@ -1340,6 +1351,10 @@ namespace ts.server {
|
||||
|
||||
private exceedTotalNonTsFileSizeLimit(fileNames: string[]) {
|
||||
let totalNonTsFileSize = 0;
|
||||
if (!this.host.getFileSize) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const fileName of fileNames) {
|
||||
if (hasTypeScriptFileExtension(fileName)) {
|
||||
continue;
|
||||
@@ -1409,14 +1424,17 @@ namespace ts.server {
|
||||
return errors;
|
||||
}
|
||||
else {
|
||||
if (this.exceedTotalNonTsFileSizeLimit(projectOptions.files)) {
|
||||
if (this.exceedTotalNonTsFileSizeLimit(projectOptions.files) && projectOptions.compilerOptions && !projectOptions.compilerOptions.disableSizeLimit) {
|
||||
project.setProjectOptions(projectOptions);
|
||||
if (project.languageServiceDiabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
project.disableLanguageService();
|
||||
project.directoryWatcher.close();
|
||||
if (project.directoryWatcher) {
|
||||
project.directoryWatcher.close();
|
||||
project.directoryWatcher = undefined;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
3
src/server/protocol.d.ts
vendored
3
src/server/protocol.d.ts
vendored
@@ -123,6 +123,9 @@ declare namespace ts.server.protocol {
|
||||
* The list of normalized file name in the project, including 'lib.d.ts'
|
||||
*/
|
||||
fileNames?: string[];
|
||||
/**
|
||||
* Indicates if the project has a active language service instance
|
||||
*/
|
||||
languageServiceDisabled?: boolean;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user