Skip to content

Commit 005123f

Browse files
committed
Handle typingOptions to typeAcquisition rename when converting parsed json node
1 parent 25be912 commit 005123f

File tree

2 files changed

+46
-22
lines changed

2 files changed

+46
-22
lines changed

src/compiler/commandLineParser.ts

+26-3
Original file line numberDiff line numberDiff line change
@@ -758,6 +758,12 @@ namespace ts {
758758
optionDeclarations: typeAcquisitionDeclarations,
759759
extraKeyDiagnosticMessage: Diagnostics.Unknown_type_acquisition_option_0
760760
},
761+
{
762+
name: "typeAcquisition",
763+
type: "object",
764+
optionDeclarations: typeAcquisitionDeclarations,
765+
extraKeyDiagnosticMessage: Diagnostics.Unknown_type_acquisition_option_0
766+
},
761767
{
762768
name: "extends",
763769
type: "string"
@@ -1121,11 +1127,14 @@ namespace ts {
11211127
}
11221128
else {
11231129
options = getDefaultCompilerOptions(configFileName);
1124-
typeAcquisition = getDefaultTypeAcquisition(configFileName);
1130+
let typingOptionstypeAcquisition: TypeAcquisition;
11251131
const optionsIterator: JsonConversionNotifier = {
11261132
onSetOptionKeyValue(optionsObject: string, option: CommandLineOption, value: CompilerOptionsValue) {
1127-
Debug.assert(optionsObject === "compilerOptions" || optionsObject === "typingOptions");
1128-
const currentOption = optionsObject === "compilerOptions" ? options : typingOptions;
1133+
Debug.assert(optionsObject === "compilerOptions" || optionsObject === "typeAcquisition" || optionsObject === "typingOptions");
1134+
const currentOption = optionsObject === "compilerOptions" ? options :
1135+
optionsObject === "typeAcquisition" ? (typeAcquisition || (typeAcquisition = getDefaultTypeAcquisition(configFileName)) ) :
1136+
(typingOptionstypeAcquisition || (typingOptionstypeAcquisition = getDefaultTypeAcquisition(configFileName)));
1137+
11291138
currentOption[option.name] = normalizeOptionValue(option, basePath, value);
11301139
},
11311140
onRootKeyValue(key: string, propertyName: PropertyName, value: CompilerOptionsValue, node: Expression) {
@@ -1156,6 +1165,20 @@ namespace ts {
11561165
}
11571166
};
11581167
json = convertToJsonWorker(jsonNode, errors, getTsconfigRootOptionsMap(), optionsIterator);
1168+
if (!typeAcquisition) {
1169+
if (typingOptionstypeAcquisition) {
1170+
typeAcquisition = (typingOptionstypeAcquisition.enableAutoDiscovery !== undefined) ?
1171+
{
1172+
enable: typingOptionstypeAcquisition.enableAutoDiscovery,
1173+
include: typingOptionstypeAcquisition.include,
1174+
exclude: typingOptionstypeAcquisition.exclude
1175+
} :
1176+
typingOptionstypeAcquisition;
1177+
}
1178+
else {
1179+
typeAcquisition = getDefaultTypeAcquisition(configFileName);
1180+
}
1181+
}
11591182
}
11601183

11611184
if (json["extends"]) {

src/harness/unittests/convertTypeAcquisitionFromJson.ts

+20-19
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,53 @@
22
/// <reference path="..\..\compiler\commandLineParser.ts" />
33

44
namespace ts {
5+
type ExpectedResult = { typeAcquisition: TypeAcquisition, errors: Diagnostic[] };
56
describe("convertTypeAcquisitionFromJson", () => {
6-
function assertTypeAcquisition(json: any, configFileName: string, expectedResult: { typingOptions: TypingOptions, errors: Diagnostic[] }) {
7+
function assertTypeAcquisition(json: any, configFileName: string, expectedResult: ExpectedResult) {
78
assertTypeAcquisitionWithJson(json, configFileName, expectedResult);
89
assertTypeAcquisitionWithJsonNode(json, configFileName, expectedResult);
910
}
1011

11-
function assertTypeAcquisitionWithJson(json: any, configFileName: string, expectedResult: { typingOptions: TypingOptions, errors: Diagnostic[] }) {
12-
const jsonOptions = json["typeAcquisition"] || json["typingOptions"];
13-
const { options: actualTypeAcquisition, errors: actualErrors } = convertTypeAcquisitionFromJson(jsonOptions, "/apath/", configFileName);
12+
function verifyAcquisition(actualTypeAcquisition: TypeAcquisition, expectedResult: ExpectedResult) {
1413
const parsedTypeAcquisition = JSON.stringify(actualTypeAcquisition);
1514
const expectedTypeAcquisition = JSON.stringify(expectedResult.typeAcquisition);
1615
assert.equal(parsedTypeAcquisition, expectedTypeAcquisition);
16+
}
1717

18+
function verifyErrors(actualErrors: Diagnostic[], expectedResult: ExpectedResult, hasLocation?: boolean) {
1819
const expectedErrors = expectedResult.errors;
1920
assert.isTrue(expectedResult.errors.length === actualErrors.length, `Expected error: ${JSON.stringify(expectedResult.errors)}. Actual error: ${JSON.stringify(actualErrors)}.`);
2021
for (let i = 0; i < actualErrors.length; i++) {
2122
const actualError = actualErrors[i];
2223
const expectedError = expectedErrors[i];
2324
assert.equal(actualError.code, expectedError.code, `Expected error-code: ${JSON.stringify(expectedError.code)}. Actual error-code: ${JSON.stringify(actualError.code)}.`);
2425
assert.equal(actualError.category, expectedError.category, `Expected error-category: ${JSON.stringify(expectedError.category)}. Actual error-category: ${JSON.stringify(actualError.category)}.`);
26+
if (hasLocation) {
27+
assert(actualError.file);
28+
assert(actualError.start);
29+
assert(actualError.length);
30+
}
2531
}
2632
}
2733

28-
function assertTypeAcquisitionWithJsonNode(json: any, configFileName: string, expectedResult: { typingOptions: TypingOptions, errors: Diagnostic[] }) {
34+
function assertTypeAcquisitionWithJson(json: any, configFileName: string, expectedResult: ExpectedResult) {
35+
const jsonOptions = json["typeAcquisition"] || json["typingOptions"];
36+
const { options: actualTypeAcquisition, errors: actualErrors } = convertTypeAcquisitionFromJson(jsonOptions, "/apath/", configFileName);
37+
verifyAcquisition(actualTypeAcquisition, expectedResult);
38+
verifyErrors(actualErrors, expectedResult);
39+
}
40+
41+
function assertTypeAcquisitionWithJsonNode(json: any, configFileName: string, expectedResult: ExpectedResult) {
2942
const fileText = JSON.stringify(json);
3043
const { node, errors } = parseJsonText(configFileName, fileText);
3144
assert(!errors.length);
3245
assert(!!node);
3346
const host: ParseConfigHost = new Utils.MockParseConfigHost("/apath/", true, []);
3447
const { typeAcquisition: actualTypeAcquisition, errors: actualParseErrors } = parseJsonNodeConfigFileContent(node, host, "/apath/", /*existingOptions*/ undefined, configFileName);
35-
const parsedTypeAcquisition = JSON.stringify(actualTypeAcquisition);
36-
const expectedTypeAcquisition = JSON.stringify(expectedResult.actualTypeAcquisition);
37-
assert.equal(parsedTypeAcquisition, expectedTypeAcquisition);
48+
verifyAcquisition(actualTypeAcquisition, expectedResult);
3849

3950
const actualErrors = filter(actualParseErrors, error => error.code !== Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code);
40-
const expectedErrors = expectedResult.errors;
41-
assert.isTrue(expectedResult.errors.length === actualErrors.length, `Expected error: ${JSON.stringify(expectedResult.errors)}. Actual error: ${JSON.stringify(actualErrors)}.`);
42-
for (let i = 0; i < actualErrors.length; i++) {
43-
const actualError = actualErrors[i];
44-
const expectedError = expectedErrors[i];
45-
assert.equal(actualError.code, expectedError.code, `Expected error-code: ${JSON.stringify(expectedError.code)}. Actual error-code: ${JSON.stringify(actualError.code)}.`);
46-
assert.equal(actualError.category, expectedError.category, `Expected error-category: ${JSON.stringify(expectedError.category)}. Actual error-category: ${JSON.stringify(actualError.category)}.`);
47-
assert(actualError.file);
48-
assert(actualError.start);
49-
assert(actualError.length);
50-
}
51+
verifyErrors(actualErrors, expectedResult, /*hasLocation*/ true);
5152
}
5253

5354
// tsconfig.json

0 commit comments

Comments
 (0)