diff --git a/src/LuaAST.ts b/src/LuaAST.ts index d88dbef09..7fcd4a74b 100644 --- a/src/LuaAST.ts +++ b/src/LuaAST.ts @@ -829,6 +829,7 @@ export function createMethodCallExpression( export interface Identifier extends Expression { kind: SyntaxKind.Identifier; + exportable: boolean; text: string; originalName?: string; symbolId?: SymbolId; @@ -846,6 +847,7 @@ export function createIdentifier( parent?: Node ): Identifier { const expression = createNode(SyntaxKind.Identifier, tsOriginal, parent) as Identifier; + expression.exportable = true; expression.text = text; expression.symbolId = symbolId; expression.originalName = originalName; @@ -858,6 +860,7 @@ export function cloneIdentifier(identifier: Identifier, tsOriginal?: ts.Node): I export function createAnonymousIdentifier(tsOriginal?: ts.Node, parent?: Node): Identifier { const expression = createNode(SyntaxKind.Identifier, tsOriginal, parent) as Identifier; + expression.exportable = false; expression.text = "____"; return expression; } diff --git a/src/LuaTransformer.ts b/src/LuaTransformer.ts index 5479fc889..8287ebb08 100644 --- a/src/LuaTransformer.ts +++ b/src/LuaTransformer.ts @@ -5480,6 +5480,10 @@ export class LuaTransformer { identifier: tstl.Identifier, exportScope?: ts.SourceFile | ts.ModuleDeclaration ): tstl.AssignmentLeftHandSideExpression { + if (!identifier.exportable) { + return identifier; + } + const exportTable = exportScope && ts.isModuleDeclaration(exportScope) ? this.createModuleLocalNameIdentifier(exportScope) diff --git a/test/unit/destructuring.spec.ts b/test/unit/destructuring.spec.ts index 6572d8b6b..ed6d5219d 100644 --- a/test/unit/destructuring.spec.ts +++ b/test/unit/destructuring.spec.ts @@ -51,16 +51,11 @@ test.each(testCases)("in variable declaration (%p)", ({ binding, value }) => { `.expectToMatchJsResult(); }); -// TODO: https://github.com/TypeScriptToLua/TypeScriptToLua/issues/695 -// TODO: https://github.com/microsoft/TypeScript/issues/32656 -test.each(testCases.filter(x => x.binding !== "[x, , y]" && x.binding !== "{ x, ...rest }"))( - "in exported variable declaration (%p)", - ({ binding, value }) => { - util.testModule` - export const ${binding} = ${value}; - `.expectToMatchJsResult(); - } -); +test.each(testCases)("in exported variable declaration (%p)", ({ binding, value }) => { + util.testModule` + export const ${binding} = ${value}; + `.expectToMatchJsResult(); +}); const assignmentTestCases = [ ...testCases,