UNPKG

@abaplint/transpiler

Version:
49 lines 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SortTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class SortTranspiler { transpile(node, traversal) { const concat = node.concatTokens().toUpperCase(); const components = node.findDirectExpressions(abaplint.Expressions.ComponentChain); const options = []; if (concat.includes(" BY ") === false) { const descending = node.findDirectTokenByText("DESCENDING") !== undefined; if (descending === true) { options.push("descending: true"); } } else if (components.length > 0) { const by = []; for (const c of components) { const next = this.findNextText(c, node); if (next === "DESCENDING") { by.push(`{component: "${c.concatTokens().toLowerCase()}", descending: true}`); } else { by.push(`{component: "${c.concatTokens().toLowerCase()}"}`); } } options.push(`by: [${by.join(",")}]`); } const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Target)).getCode(); return new chunk_1.Chunk().append("abap.statements.sort(" + target + ",{" + options.join(",") + "});", node, traversal); } findNextText(c, parent) { const children = parent.getChildren(); for (let i = 0; i < children.length; i++) { const element = children[i]; if (element !== c) { continue; } const next = children[i + 1]; if (next) { return next.concatTokens().toUpperCase(); } } return ""; } } exports.SortTranspiler = SortTranspiler; //# sourceMappingURL=sort.js.map