Skip to content

Commit 7db76ed

Browse files
committed
Always return empty object when converting the json sourcefile into actual json object, allowing to continue compilation even if there are errors in the tsconfig files
1 parent 7bd9e09 commit 7db76ed

File tree

6 files changed

+21
-53
lines changed

6 files changed

+21
-53
lines changed

src/compiler/commandLineParser.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ namespace ts {
874874
text = readFile(fileName);
875875
}
876876
catch (e) {
877-
return { error: createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) };
877+
return { config: {}, error: createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message) };
878878
}
879879
return parseConfigFileTextToJson(fileName, text);
880880
}
@@ -1011,10 +1011,7 @@ namespace ts {
10111011
knownRootOptions: Map<CommandLineOption> | undefined,
10121012
jsonConversionNotifier: JsonConversionNotifier | undefined): any {
10131013
if (!sourceFile.jsonObject) {
1014-
if (sourceFile.endOfFileToken) {
1015-
return {};
1016-
}
1017-
return undefined;
1014+
return {};
10181015
}
10191016

10201017
return convertObjectLiteralExpressionToJson(sourceFile.jsonObject, knownRootOptions,

src/compiler/tsc.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -225,17 +225,11 @@ namespace ts {
225225

226226
const result = parseJsonText(configFileName, cachedConfigFileText);
227227
reportDiagnostics(result.parseDiagnostics, /* compilerHost */ undefined);
228-
if (!result.endOfFileToken) {
229-
sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped);
230-
return;
231-
}
228+
232229
const cwd = sys.getCurrentDirectory();
233230
const configParseResult = parseJsonSourceFileConfigFileContent(result, sys, getNormalizedAbsolutePath(getDirectoryPath(configFileName), cwd), commandLine.options, getNormalizedAbsolutePath(configFileName, cwd));
234-
if (configParseResult.errors.length > 0) {
235-
reportDiagnostics(configParseResult.errors, /* compilerHost */ undefined);
236-
sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped);
237-
return;
238-
}
231+
reportDiagnostics(configParseResult.errors, /* compilerHost */ undefined);
232+
239233
if (isWatchSet(configParseResult.options)) {
240234
if (!sys.watchFile) {
241235
reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--watch"), /* host */ undefined);

src/harness/projectsRunner.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,16 +222,9 @@ class ProjectRunner extends RunnerBase {
222222
readFile
223223
};
224224
const configParseResult = ts.parseJsonSourceFileConfigFileContent(result, configParseHost, ts.getDirectoryPath(configFileName), compilerOptions);
225-
if (configParseResult.errors.length > 0) {
226-
return {
227-
configFileSourceFiles,
228-
moduleKind,
229-
errors: result.parseDiagnostics.concat(configParseResult.errors)
230-
};
231-
}
232225
inputFiles = configParseResult.fileNames;
233226
compilerOptions = configParseResult.options;
234-
errors = result.parseDiagnostics;
227+
errors = result.parseDiagnostics.concat(configParseResult.errors);
235228
}
236229

237230
const projectCompilerResult = compileProjectFiles(moduleKind, configFileSourceFiles, () => inputFiles, getSourceFileText, writeFile, compilerOptions);

src/harness/unittests/tsconfigParsing.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace ts {
1010

1111
function assertParseError(jsonText: string) {
1212
const parsed = ts.parseConfigFileTextToJson("/apath/tsconfig.json", jsonText);
13-
assert.isTrue(undefined === parsed.config);
13+
assert.deepEqual(parsed.config, {});
1414
assert.isTrue(undefined !== parsed.error);
1515
}
1616

src/services/jsTyping.ts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ namespace ts.JsTyping {
7676

7777
if (!safeList) {
7878
const result = readConfigFile(safeListPath, (path: string) => host.readFile(path));
79-
safeList = result.config ? createMapFromTemplate<string>(result.config) : EmptySafeList;
79+
safeList = createMapFromTemplate<string>(result.config);
8080
}
8181

8282
const filesToWatch: string[] = [];
@@ -163,20 +163,18 @@ namespace ts.JsTyping {
163163
filesToWatch.push(jsonPath);
164164
}
165165
const result = readConfigFile(jsonPath, (path: string) => host.readFile(path));
166-
if (result.config) {
167-
const jsonConfig: PackageJson = result.config;
168-
if (jsonConfig.dependencies) {
169-
mergeTypings(getOwnKeys(jsonConfig.dependencies));
170-
}
171-
if (jsonConfig.devDependencies) {
172-
mergeTypings(getOwnKeys(jsonConfig.devDependencies));
173-
}
174-
if (jsonConfig.optionalDependencies) {
175-
mergeTypings(getOwnKeys(jsonConfig.optionalDependencies));
176-
}
177-
if (jsonConfig.peerDependencies) {
178-
mergeTypings(getOwnKeys(jsonConfig.peerDependencies));
179-
}
166+
const jsonConfig: PackageJson = result.config;
167+
if (jsonConfig.dependencies) {
168+
mergeTypings(getOwnKeys(jsonConfig.dependencies));
169+
}
170+
if (jsonConfig.devDependencies) {
171+
mergeTypings(getOwnKeys(jsonConfig.devDependencies));
172+
}
173+
if (jsonConfig.optionalDependencies) {
174+
mergeTypings(getOwnKeys(jsonConfig.optionalDependencies));
175+
}
176+
if (jsonConfig.peerDependencies) {
177+
mergeTypings(getOwnKeys(jsonConfig.peerDependencies));
180178
}
181179
}
182180

@@ -222,9 +220,6 @@ namespace ts.JsTyping {
222220
continue;
223221
}
224222
const result = readConfigFile(normalizedFileName, (path: string) => host.readFile(path));
225-
if (!result.config) {
226-
continue;
227-
}
228223
const packageJson: PackageJson = result.config;
229224

230225
// npm 3's package.json contains a "_requiredBy" field

src/services/shims.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,17 +1110,6 @@ namespace ts {
11101110
const text = sourceTextSnapshot.getText(0, sourceTextSnapshot.getLength());
11111111

11121112
const result = parseJsonText(fileName, text);
1113-
1114-
if (!result.endOfFileToken) {
1115-
return {
1116-
options: {},
1117-
typeAcquisition: {},
1118-
files: [],
1119-
raw: {},
1120-
errors: realizeDiagnostics(result.parseDiagnostics, "\r\n")
1121-
};
1122-
}
1123-
11241113
const normalizedFileName = normalizeSlashes(fileName);
11251114
const configFile = parseJsonSourceFileConfigFileContent(result, this.host, getDirectoryPath(normalizedFileName), /*existingOptions*/ {}, normalizedFileName);
11261115

@@ -1248,4 +1237,4 @@ namespace TypeScript.Services {
12481237
// TODO: it should be moved into a namespace though.
12491238

12501239
/* @internal */
1251-
const toolsVersion = "2.4";
1240+
const toolsVersion = "2.4";

0 commit comments

Comments
 (0)