From a50f67d3473d29baeb9ef771bd8c1143ede8d8ee Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 2 Jan 2024 21:25:44 +0200 Subject: [PATCH] fix(56733): Auto fix "add missing properties" of enums does not correct namespace of enum (#56739) --- src/services/codefixes/fixAddMissingMember.ts | 2 +- .../codeFixAddMissingProperties29.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixAddMissingProperties29.ts diff --git a/src/services/codefixes/fixAddMissingMember.ts b/src/services/codefixes/fixAddMissingMember.ts index 3b9340f4e2b..6c7fa30828d 100644 --- a/src/services/codefixes/fixAddMissingMember.ts +++ b/src/services/codefixes/fixAddMissingMember.ts @@ -674,7 +674,7 @@ 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*/ undefined); + const name = checker.symbolToExpression(type.symbol.parent ? type.symbol.parent : type.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/codeFixAddMissingProperties29.ts b/tests/cases/fourslash/codeFixAddMissingProperties29.ts new file mode 100644 index 00000000000..964c3363f57 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingProperties29.ts @@ -0,0 +1,27 @@ +/// + +////namespace Foo.Bar { +//// export enum E { +//// E1 = 0, +//// E2 = 1, +//// } +//// export interface Baz { +//// prop1: string; +//// prop2: number; +//// prop3: E.E1; +//// prop4: Foo.Bar.E.E1; +//// } +////} +////[|const foo: Foo.Bar.Baz = {}|] + +verify.codeFix({ + index: 0, + description: ts.Diagnostics.Add_missing_properties.message, + newRangeContent: +`const foo: Foo.Bar.Baz = { + prop1: "", + prop2: 0, + prop3: Foo.Bar.E.E1, + prop4: Foo.Bar.E.E1 +}`, +});