Skip to content

Commit b8e4ed8

Browse files
authored
Fix --showConfig to show transitively implied options that vary from the default config (#60240)
1 parent bd1641f commit b8e4ed8

19 files changed

+57
-32
lines changed

src/compiler/commandLineParser.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
addToSeen,
23
AlternateModeDiagnostics,
34
append,
45
arrayFrom,
@@ -2629,7 +2630,7 @@ export function convertToTSConfig(configParseResult: ParsedCommandLine, configFi
26292630
const providedKeys = new Set(optionMap.keys());
26302631
const impliedCompilerOptions: Record<string, CompilerOptionsValue> = {};
26312632
for (const option in computedOptions) {
2632-
if (!providedKeys.has(option) && some(computedOptions[option].dependencies, dep => providedKeys.has(dep))) {
2633+
if (!providedKeys.has(option) && optionDependsOn(option, providedKeys)) {
26332634
const implied = computedOptions[option].computeValue(configParseResult.options);
26342635
const defaultValue = computedOptions[option].computeValue({});
26352636
if (implied !== defaultValue) {
@@ -2641,6 +2642,18 @@ export function convertToTSConfig(configParseResult: ParsedCommandLine, configFi
26412642
return config;
26422643
}
26432644

2645+
function optionDependsOn(option: string, dependsOn: Set<string>): boolean {
2646+
const seen = new Set<string>();
2647+
return optionDependsOnRecursive(option);
2648+
2649+
function optionDependsOnRecursive(option: string): boolean {
2650+
if (addToSeen(seen, option)) {
2651+
return some(computedOptions[option]?.dependencies, dep => dependsOn.has(dep) || optionDependsOnRecursive(dep));
2652+
}
2653+
return false;
2654+
}
2655+
}
2656+
26442657
/** @internal */
26452658
export function optionMapToObject(optionMap: Map<string, CompilerOptionsValue>): object {
26462659
return Object.fromEntries(optionMap);

src/compiler/utilities.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8193,15 +8193,11 @@ export function getLastChild(node: Node): Node | undefined {
81938193
*
81948194
* @internal
81958195
*/
8196-
export function addToSeen<K>(seen: Map<K, true>, key: K): boolean;
8197-
/** @internal */
8198-
export function addToSeen<K, T>(seen: Map<K, T>, key: K, value: T): boolean;
8199-
/** @internal */
8200-
export function addToSeen<K, T>(seen: Map<K, T>, key: K, value: T = true as any): boolean {
8196+
export function addToSeen<K>(seen: Set<K>, key: K): boolean {
82018197
if (seen.has(key)) {
82028198
return false;
82038199
}
8204-
seen.set(key, value);
8200+
seen.add(key);
82058201
return true;
82068202
}
82078203

src/server/editorServices.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,7 @@ export class ProjectService {
12971297
*/
12981298
private readonly filenameToScriptInfoVersion = new Map<Path, number>();
12991299
// Set of all '.js' files ever opened.
1300-
private readonly allJsFilesForOpenFileTelemetry = new Map<string, true>();
1300+
private readonly allJsFilesForOpenFileTelemetry = new Set<string>();
13011301

13021302
/**
13031303
* Map to the real path of the infos

src/services/codefixes/convertConstToLet.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ registerCodeFix({
3636
},
3737
getAllCodeActions: context => {
3838
const { program } = context;
39-
const seen = new Map<number, true>();
39+
const seen = new Set<number>();
4040

4141
return createCombinedCodeActions(textChanges.ChangeTracker.with(context, changes => {
4242
eachDiagnostic(context, errorCodes, diag => {

src/services/codefixes/convertToTypeOnlyExport.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ registerCodeFix({
3636
},
3737
fixIds: [fixId],
3838
getAllCodeActions: function getAllCodeActionsToConvertToTypeOnlyExport(context) {
39-
const fixedExportDeclarations = new Map<number, true>();
39+
const fixedExportDeclarations = new Set<number>();
4040
return codeFixAll(context, errorCodes, (changes, diag) => {
4141
const exportSpecifier = getExportSpecifierForDiagnosticSpan(diag, context.sourceFile);
4242
if (exportSpecifier && addToSeen(fixedExportDeclarations, getNodeId(exportSpecifier.parent.parent))) {

src/services/codefixes/fixAddMissingConstraint.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ registerCodeFix({
6363
fixIds: [fixId],
6464
getAllCodeActions: context => {
6565
const { program, preferences, host } = context;
66-
const seen = new Map<number, true>();
66+
const seen = new Set<number>();
6767

6868
return createCombinedCodeActions(textChanges.ChangeTracker.with(context, changes => {
6969
eachDiagnostic(context, errorCodes, diag => {

src/services/codefixes/fixAddMissingMember.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ registerCodeFix({
182182
getAllCodeActions: context => {
183183
const { program, fixId } = context;
184184
const checker = program.getTypeChecker();
185-
const seen = new Map<string, true>();
185+
const seen = new Set<string>();
186186
const typeDeclToMembers = new Map<ClassLikeDeclaration | InterfaceDeclaration | TypeLiteralNode, TypeLikeDeclarationInfo[]>();
187187

188188
return createCombinedCodeActions(textChanges.ChangeTracker.with(context, changes => {

src/services/codefixes/fixAwaitInSyncFunction.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ registerCodeFix({
4444
},
4545
fixIds: [fixId],
4646
getAllCodeActions: function getAllCodeActionsToFixAwaitInSyncFunction(context) {
47-
const seen = new Map<number, true>();
47+
const seen = new Set<number>();
4848
return codeFixAll(context, errorCodes, (changes, diag) => {
4949
const nodes = getNodes(diag.file, diag.start);
5050
if (!nodes || !addToSeen(seen, getNodeId(nodes.insertBefore))) return;

src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ registerCodeFix({
4444
},
4545
fixIds: [fixId],
4646
getAllCodeActions: function getAllCodeActionsToFixClassDoesntImplementInheritedAbstractMember(context) {
47-
const seenClassDeclarations = new Map<number, true>();
47+
const seenClassDeclarations = new Set<number>();
4848
return codeFixAll(context, errorCodes, (changes, diag) => {
4949
const classDeclaration = getClass(diag.file, diag.start);
5050
if (addToSeen(seenClassDeclarations, getNodeId(classDeclaration))) {

src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ registerCodeFix({
5555
},
5656
fixIds: [fixId],
5757
getAllCodeActions(context) {
58-
const seenClassDeclarations = new Map<number, true>();
58+
const seenClassDeclarations = new Set<number>();
5959
return codeFixAll(context, errorCodes, (changes, diag) => {
6060
const classDeclaration = getClass(diag.file, diag.start);
6161
if (addToSeen(seenClassDeclarations, getNodeId(classDeclaration))) {

0 commit comments

Comments
 (0)