Skip to content

Commit d2a2450

Browse files
committed
Move OmittedExpression handling to context visitors
1 parent 022a8ca commit d2a2450

3 files changed

Lines changed: 7 additions & 32 deletions

File tree

src/transformation/transformers/literal.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,11 @@ const transformObjectLiteralExpression: FunctionVisitor<ts.ObjectLiteralExpressi
128128

129129
const transformArrayLiteralExpression: FunctionVisitor<ts.ArrayLiteralExpression> = (expression, context) => {
130130
const values = expression.elements.map(element =>
131-
lua.createTableFieldExpression(context.transformExpression(element), undefined, element)
131+
lua.createTableFieldExpression(
132+
ts.isOmittedExpression(element) ? lua.createNilLiteral(element) : context.transformExpression(element),
133+
undefined,
134+
element
135+
)
132136
);
133137

134138
return lua.createTableExpression(values, expression);

src/transformation/transformers/todo-move-somewhere.ts

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import * as ts from "typescript";
22
import * as lua from "../../LuaAST";
33
import { FunctionVisitor, Visitors } from "../context";
44
import { validateAssignment } from "../utils/assignment-validation";
5-
import { isInDestructingAssignment } from "../utils/typescript";
65

76
const transformAssertionExpression: FunctionVisitor<ts.AssertionExpression> = (expression, context) => {
87
if (!ts.isConstTypeReference(expression.type)) {
@@ -17,43 +16,15 @@ const transformAssertionExpression: FunctionVisitor<ts.AssertionExpression> = (e
1716
return context.transformExpression(expression.expression);
1817
};
1918

20-
function isWithinLiteralAssignmentStatement(node: ts.Node): boolean {
21-
if (!node.parent) {
22-
return false;
23-
}
24-
25-
if (
26-
ts.isArrayLiteralExpression(node.parent) ||
27-
ts.isArrayBindingPattern(node.parent) ||
28-
ts.isObjectLiteralExpression(node.parent)
29-
) {
30-
return isWithinLiteralAssignmentStatement(node.parent);
31-
} else if (isInDestructingAssignment(node)) {
32-
return true;
33-
} else if (ts.isBinaryExpression(node.parent) && node.parent.operatorToken.kind === ts.SyntaxKind.EqualsToken) {
34-
return true;
35-
} else {
36-
return false;
37-
}
38-
}
39-
40-
// TODO: Consider handling without a visitor since it depends on context too much
41-
const transformOmittedExpression: FunctionVisitor<ts.OmittedExpression> = node => {
42-
const isWithinBindingAssignmentStatement = isWithinLiteralAssignmentStatement(node);
43-
return isWithinBindingAssignmentStatement ? lua.createAnonymousIdentifier() : lua.createNilLiteral(node);
44-
};
45-
4619
export const todoMoveSomewhereVisitors: Visitors = {
47-
[ts.SyntaxKind.EmptyStatement]: () => undefined,
48-
[ts.SyntaxKind.OmittedExpression]: transformOmittedExpression,
49-
5020
[ts.SyntaxKind.TypeAliasDeclaration]: () => undefined,
5121
[ts.SyntaxKind.InterfaceDeclaration]: () => undefined,
5222

5323
[ts.SyntaxKind.NonNullExpression]: (node, context) => context.transformExpression(node.expression),
5424
[ts.SyntaxKind.AsExpression]: transformAssertionExpression,
5525
[ts.SyntaxKind.TypeAssertionExpression]: transformAssertionExpression,
5626

27+
[ts.SyntaxKind.EmptyStatement]: () => undefined,
5728
[ts.SyntaxKind.ParenthesizedExpression]: (node, context) =>
5829
lua.createParenthesizedExpression(context.transformExpression(node.expression), node),
5930
};

src/transformation/transformers/variable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function transformArrayBindingElement(
1616
name: ts.ArrayBindingElement | ts.Expression
1717
): lua.Expression {
1818
if (ts.isOmittedExpression(name)) {
19-
return context.transformExpression(name);
19+
return lua.createAnonymousIdentifier(name);
2020
} else if (ts.isIdentifier(name)) {
2121
return transformIdentifier(context, name);
2222
} else if (ts.isBindingElement(name) && ts.isIdentifier(name.name)) {

0 commit comments

Comments
 (0)