@abaplint/transpiler
Version:
51 lines • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SortTranspiler = void 0;
const abaplint = require("@abaplint/core");
const chunk_1 = require("../chunk");
const expressions_1 = require("../expressions");
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);
const concat = expressions_1.ComponentChainTranspiler.concat(c, traversal);
if (next === "DESCENDING") {
by.push(`{component: "${concat}", descending: true}`);
}
else {
by.push(`{component: "${concat}"}`);
}
}
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