@@ -3,20 +3,8 @@ import * as lua from "../../../LuaAST";
33import * as helpers from "../../utils/helpers" ;
44import { isNonNull } from "../../../utils" ;
55import { TransformationContext } from "../../context" ;
6- import { transformAssignmentLeftHandSideExpression } from "../binary-expression/assignments" ;
7- import { transformIdentifier } from "../identifier" ;
86import { transformArguments } from "../call" ;
9- import { getDependenciesOfSymbol , createExportedIdentifier } from "../../utils/export" ;
10- import { createLocalOrExportedOrGlobalDeclaration } from "../../utils/lua-ast" ;
11- import {
12- invalidMultiReturnArrayBindingPatternElementInitializer ,
13- invalidMultiReturnArrayLiteralElementInitializer ,
14- invalidMultiReturnToEmptyPatternOrArrayLiteral ,
15- invalidMultiReturnToNonArrayBindingPattern ,
16- invalidMultiReturnToNonArrayLiteral ,
17- unsupportedMultiFunctionAssignment ,
18- unsupportedMultiHelperFunctionPosition ,
19- } from "../../../transformation/utils/diagnostics" ;
7+ import { unsupportedMultiHelperFunctionPosition } from "../../../transformation/utils/diagnostics" ;
208
219const isMultiHelperDeclaration = ( context : TransformationContext ) => ( declaration : ts . Declaration ) : boolean =>
2210 helpers . getHelperFileKind ( context , declaration . getSourceFile ( ) ) === helpers . HelperKind . Multi ;
@@ -52,102 +40,6 @@ export function transformMultiHelperReturnStatement(
5240 return lua . createReturnStatement ( expressions , statement ) ;
5341}
5442
55- function transformMultiHelperCallArguments (
56- context : TransformationContext ,
57- expression : ts . CallExpression
58- ) : lua . Expression [ ] | lua . Expression {
59- if ( ! isMultiHelperCallSignature ( context , expression ) ) {
60- return context . transformExpression ( expression ) ;
61- }
62-
63- if ( expression . arguments . length === 0 ) {
64- return lua . createNilLiteral ( expression ) ;
65- }
66-
67- return expression . arguments . map ( e => context . transformExpression ( e ) ) ;
68- }
69-
70- export function transformMultiHelperVariableDeclaration (
71- context : TransformationContext ,
72- declaration : ts . VariableDeclaration
73- ) : lua . Statement [ ] | undefined {
74- if ( ! declaration . initializer ) return ;
75- if ( ! isMultiReturnCall ( context , declaration . initializer ) ) return ;
76-
77- if ( ! ts . isArrayBindingPattern ( declaration . name ) ) {
78- context . diagnostics . push ( invalidMultiReturnToNonArrayBindingPattern ( declaration . name ) ) ;
79- return [ ] ;
80- }
81-
82- if ( declaration . name . elements . length < 1 ) {
83- context . diagnostics . push ( invalidMultiReturnToEmptyPatternOrArrayLiteral ( declaration . name ) ) ;
84- return [ ] ;
85- }
86-
87- const leftIdentifiers : lua . Identifier [ ] = [ ] ;
88-
89- for ( const element of declaration . name . elements ) {
90- if ( ts . isBindingElement ( element ) ) {
91- if ( element . initializer ) {
92- context . diagnostics . push ( invalidMultiReturnArrayBindingPatternElementInitializer ( element ) ) ;
93- } else if ( ts . isIdentifier ( element . name ) ) {
94- leftIdentifiers . push ( transformIdentifier ( context , element . name ) ) ;
95- } else {
96- context . diagnostics . push ( unsupportedMultiFunctionAssignment ( element ) ) ;
97- }
98- } else if ( ts . isOmittedExpression ( element ) ) {
99- leftIdentifiers . push ( lua . createAnonymousIdentifier ( element ) ) ;
100- }
101- }
102-
103- const rightExpressions = transformMultiHelperCallArguments ( context , declaration . initializer ) ;
104- return createLocalOrExportedOrGlobalDeclaration ( context , leftIdentifiers , rightExpressions , declaration ) ;
105- }
106-
107- export function transformMultiHelperDestructuringAssignmentStatement (
108- context : TransformationContext ,
109- statement : ts . ExpressionStatement
110- ) : lua . Statement [ ] | undefined {
111- if ( ! ts . isBinaryExpression ( statement . expression ) ) return ;
112- if ( statement . expression . operatorToken . kind !== ts . SyntaxKind . EqualsToken ) return ;
113- if ( ! isMultiReturnCall ( context , statement . expression . right ) ) return ;
114-
115- if ( ! ts . isArrayLiteralExpression ( statement . expression . left ) ) {
116- context . diagnostics . push ( invalidMultiReturnToNonArrayLiteral ( statement . expression . left ) ) ;
117- return [ ] ;
118- }
119-
120- if ( statement . expression . left . elements . some ( ts . isBinaryExpression ) ) {
121- context . diagnostics . push ( invalidMultiReturnArrayLiteralElementInitializer ( statement . expression . left ) ) ;
122- return [ ] ;
123- }
124-
125- if ( statement . expression . left . elements . length < 1 ) {
126- context . diagnostics . push ( invalidMultiReturnToEmptyPatternOrArrayLiteral ( statement . expression . left ) ) ;
127- return [ ] ;
128- }
129-
130- const transformLeft = ( expression : ts . Expression ) : lua . AssignmentLeftHandSideExpression =>
131- ts . isOmittedExpression ( expression )
132- ? lua . createAnonymousIdentifier ( expression )
133- : transformAssignmentLeftHandSideExpression ( context , expression ) ;
134-
135- const leftIdentifiers = statement . expression . left . elements . map ( transformLeft ) ;
136-
137- const rightExpressions = transformMultiHelperCallArguments ( context , statement . expression . right ) ;
138-
139- const trailingStatements = statement . expression . left . elements . flatMap ( expression => {
140- const symbol = context . checker . getSymbolAtLocation ( expression ) ;
141- const dependentSymbols = symbol ? getDependenciesOfSymbol ( context , symbol ) : [ ] ;
142- return dependentSymbols . map ( symbol => {
143- const identifierToAssign = createExportedIdentifier ( context , lua . createIdentifier ( symbol . name ) ) ;
144- return lua . createAssignmentStatement ( identifierToAssign , transformLeft ( expression ) ) ;
145- } ) ;
146- } ) ;
147-
148- return [ lua . createAssignmentStatement ( leftIdentifiers , rightExpressions , statement ) , ...trailingStatements ] ;
149- }
150-
15143export function findMultiHelperAssignmentViolations (
15244 context : TransformationContext ,
15345 node : ts . ObjectLiteralExpression
0 commit comments