UNPKG

roblox-ts

Version:

A TypeScript-to-Luau Compiler for Roblox

49 lines 1.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapReturnIfLuaTuple = wrapReturnIfLuaTuple; const luau_ast_1 = __importDefault(require("@roblox-ts/luau-ast")); const arrayBindingPatternContainsHoists_1 = require("./arrayBindingPatternContainsHoists"); const traversal_1 = require("./traversal"); const types_1 = require("./types"); const typescript_1 = __importDefault(require("typescript")); function shouldWrapLuaTuple(state, node, exp) { if (!luau_ast_1.default.isCall(exp)) { return true; } const child = (0, traversal_1.skipUpwards)(node); const parent = child.parent; if (typescript_1.default.isExpressionStatement(parent)) { return false; } if (typescript_1.default.isForStatement(parent) && parent.condition !== child) { return false; } if (typescript_1.default.isVariableDeclaration(parent) && typescript_1.default.isArrayBindingPattern(parent.name) && !(0, arrayBindingPatternContainsHoists_1.arrayBindingPatternContainsHoists)(state, parent.name)) { return false; } if (typescript_1.default.isAssignmentExpression(parent) && typescript_1.default.isArrayLiteralExpression(parent.left)) { return false; } if (typescript_1.default.isElementAccessExpression(parent)) { return false; } if (typescript_1.default.isReturnStatement(parent)) { return false; } if (typescript_1.default.isVoidExpression(parent)) { return false; } return true; } function wrapReturnIfLuaTuple(state, node, exp) { if ((0, types_1.isLuaTupleType)(state)(state.getType(node)) && shouldWrapLuaTuple(state, node, exp)) { return luau_ast_1.default.array([exp]); } return exp; } //# sourceMappingURL=wrapReturnIfLuaTuple.js.map