From e99e6e2e87a6d7f152eb7cc491ce11da1926662b Mon Sep 17 00:00:00 2001 From: "Oleksandr T." Date: Mon, 14 Oct 2024 21:30:34 +0300 Subject: [PATCH] fix(60186): Quick fix "add missing properties" fails with enums from other module (#60191) --- src/services/codefixes/fixAddMissingMember.ts | 3 ++- .../codeFixAddMissingProperties32.ts | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixAddMissingProperties32.ts diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 77bec1ed7f173..87f931a62b145 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -681,7 +681,8 @@ function tryGetValueFromType(context: CodeFixContextBase, checker: TypeChecker, } if (type.flags & TypeFlags.EnumLike) { const enumMember = type.symbol.exports ? firstOrUndefinedIterator(type.symbol.exports.values()) : type.symbol; - const name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.symbol, SymbolFlags.Value, /*enclosingDeclaration*/ undefined, /*flags*/ NodeBuilderFlags.UseFullyQualifiedType); + const symbol = type.symbol.parent && type.symbol.parent.flags & SymbolFlags.RegularEnum ? type.symbol.parent : type.symbol; + const name = checker.symbolToExpression(symbol, SymbolFlags.Value, /*enclosingDeclaration*/ undefined, /*flags*/ NodeBuilderFlags.UseFullyQualifiedType); return enumMember === undefined || name === undefined ? factory.createNumericLiteral(0) : factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember)); } if (type.flags & TypeFlags.NumberLiteral) { diff --git a/tests/cases/fourslash/codeFixAddMissingProperties32.ts b/tests/cases/fourslash/codeFixAddMissingProperties32.ts new file mode 100644 index 0000000000000..7777c9332c3b5 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingProperties32.ts @@ -0,0 +1,24 @@ +/// + +// @filename: E.ts +////export enum E { +//// A, +//// B, +////} + +// @filename: foo.ts +////import { E } from "./E" +////type T = { +//// e: E, +////} +////[|const t: T = { }|] + +goTo.file('foo.ts'); +verify.codeFix({ + index: 0, + description: ts.Diagnostics.Add_missing_properties.message, + newRangeContent: +`const t: T = { + e: E.A +}`, +});