Show implied options in --showConfig (#56701)

This commit is contained in:
Andrew Branch
2023-12-08 11:33:01 -08:00
committed by GitHub
parent 96e7af47fd
commit b436976bd3
12 changed files with 316 additions and 159 deletions

View File

@@ -15,6 +15,7 @@ import {
CommandLineOptionOfListType,
CompilerOptions,
CompilerOptionsValue,
computedOptions,
ConfigFileSpecs,
containsPath,
convertToRelativePath,
@@ -103,6 +104,7 @@ import {
removeTrailingDirectorySeparator,
returnTrue,
ScriptTarget,
some,
startsWith,
StringLiteral,
SyntaxKind,
@@ -2475,9 +2477,10 @@ export function convertToTSConfig(configParseResult: ParsedCommandLine, configFi
),
f => getRelativePathFromFile(getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), getNormalizedAbsolutePath(f, host.getCurrentDirectory()), getCanonicalFileName),
);
const optionMap = serializeCompilerOptions(configParseResult.options, { configFilePath: getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), useCaseSensitiveFileNames: host.useCaseSensitiveFileNames });
const pathOptions = { configFilePath: getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), useCaseSensitiveFileNames: host.useCaseSensitiveFileNames };
const optionMap = serializeCompilerOptions(configParseResult.options, pathOptions);
const watchOptionMap = configParseResult.watchOptions && serializeWatchOptions(configParseResult.watchOptions);
const config = {
const config: TSConfig & { watchOptions?: object; } = {
compilerOptions: {
...optionMapToObject(optionMap),
showConfig: undefined,
@@ -2500,6 +2503,19 @@ export function convertToTSConfig(configParseResult: ParsedCommandLine, configFi
} : {}),
compileOnSave: !!configParseResult.compileOnSave ? true : undefined,
};
const providedKeys = new Set(optionMap.keys());
const impliedCompilerOptions: Record<string, CompilerOptionsValue> = {};
for (const option in computedOptions) {
if (!providedKeys.has(option) && some(computedOptions[option as keyof typeof computedOptions].dependencies, dep => providedKeys.has(dep))) {
const implied = computedOptions[option as keyof typeof computedOptions].computeValue(configParseResult.options);
const defaultValue = computedOptions[option as keyof typeof computedOptions].computeValue({});
if (implied !== defaultValue) {
impliedCompilerOptions[option] = computedOptions[option as keyof typeof computedOptions].computeValue(configParseResult.options);
}
}
}
assign(config.compilerOptions, optionMapToObject(serializeCompilerOptions(impliedCompilerOptions, pathOptions)));
return config;
}