From ba317ff7f6c96c59cb894ac716bbe7b856dec48f Mon Sep 17 00:00:00 2001 From: Hirt Felix Date: Mon, 26 Jan 2026 08:47:58 +0100 Subject: [PATCH 1/2] fix enum nested in namespace --- src/transformation/visitors/enum.ts | 4 ++-- test/unit/enum.spec.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/transformation/visitors/enum.ts b/src/transformation/visitors/enum.ts index 3c496344e..9de658a45 100644 --- a/src/transformation/visitors/enum.ts +++ b/src/transformation/visitors/enum.ts @@ -2,7 +2,7 @@ import * as ts from "typescript"; import * as lua from "../../LuaAST"; import { FunctionVisitor, TransformationContext } from "../context"; import { AnnotationKind, getTypeAnnotations } from "../utils/annotations"; -import { getSymbolExportScope } from "../utils/export"; +import { addExportToIdentifier, getSymbolExportScope } from "../utils/export"; import { createLocalOrExportedOrGlobalDeclaration } from "../utils/lua-ast"; import { isFirstDeclaration } from "../utils/typescript"; import { transformIdentifier } from "./identifier"; @@ -32,7 +32,7 @@ export const transformEnumDeclaration: FunctionVisitor = (no if (!membersOnly && isFirstDeclaration(context, node)) { const name = transformIdentifier(context, node.name); const table = lua.createBinaryExpression( - lua.cloneIdentifier(name), + addExportToIdentifier(context, name), lua.createTableExpression(), lua.SyntaxKind.OrOperator ); diff --git a/test/unit/enum.spec.ts b/test/unit/enum.spec.ts index f421be2c5..98f186f3f 100644 --- a/test/unit/enum.spec.ts +++ b/test/unit/enum.spec.ts @@ -203,3 +203,19 @@ test("enum merging multiple files", () => { ) .expectToMatchJsResult(); }); + +test("enum nested in namespace", () => { + util.testModule` + namespace A { + export enum TestEnum { + C, + D + } + } + `.tap(builder => { + const lua = builder.getMainLuaCodeChunk(); + expect(lua).toMatch( + 'A = A or ({})\ndo\n A.TestEnum = A.TestEnum or ({})\n A.TestEnum.C = 0\n A.TestEnum[A.TestEnum.C] = "C"\n A.TestEnum.D = 1\n A.TestEnum[A.TestEnum.D] = "D"\nend' + ); + }); +}); From 246e76cc7b0a03dbeca288e80a7a0a15c56d659f Mon Sep 17 00:00:00 2001 From: Hirt Felix Date: Tue, 17 Feb 2026 14:49:07 +0100 Subject: [PATCH 2/2] use snapshot to test --- test/unit/__snapshots__/enum.spec.ts.snap | 12 ++++++++++++ test/unit/enum.spec.ts | 11 +++-------- 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 test/unit/__snapshots__/enum.spec.ts.snap diff --git a/test/unit/__snapshots__/enum.spec.ts.snap b/test/unit/__snapshots__/enum.spec.ts.snap new file mode 100644 index 000000000..181b66a45 --- /dev/null +++ b/test/unit/__snapshots__/enum.spec.ts.snap @@ -0,0 +1,12 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`enum nested in namespace 1`] = ` +"A = A or ({}) +do + A.TestEnum = A.TestEnum or ({}) + A.TestEnum.B = 0 + A.TestEnum[A.TestEnum.B] = "B" + A.TestEnum.C = 1 + A.TestEnum[A.TestEnum.C] = "C" +end" +`; diff --git a/test/unit/enum.spec.ts b/test/unit/enum.spec.ts index 98f186f3f..3ff4ce3fe 100644 --- a/test/unit/enum.spec.ts +++ b/test/unit/enum.spec.ts @@ -208,14 +208,9 @@ test("enum nested in namespace", () => { util.testModule` namespace A { export enum TestEnum { - C, - D + B, + C } } - `.tap(builder => { - const lua = builder.getMainLuaCodeChunk(); - expect(lua).toMatch( - 'A = A or ({})\ndo\n A.TestEnum = A.TestEnum or ({})\n A.TestEnum.C = 0\n A.TestEnum[A.TestEnum.C] = "C"\n A.TestEnum.D = 1\n A.TestEnum[A.TestEnum.D] = "D"\nend' - ); - }); + `.expectLuaToMatchSnapshot(); });