UNPKG

@abaplint/transpiler

Version:
77 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FindTranspiler = void 0; const abaplint = require("@abaplint/core"); const chunk_1 = require("../chunk"); class FindTranspiler { transpile(node, traversal) { const options = []; let index = 1; const sources = node.findDirectExpressions(abaplint.Expressions.Source); const source0 = traversal.traverse(sources[0]).getCode(); if (node.findFirstExpression(abaplint.Expressions.FindType)?.findDirectTokenByText("REGEX")) { options.push("regex: " + source0); } else if (node.findFirstExpression(abaplint.Expressions.FindType)?.findDirectTokenByText("PCRE")) { options.push("pcre: " + source0); } else { options.push("find: " + source0); } const concat = node.concatTokens().toUpperCase(); if (concat.startsWith("FIND FIRST OCCURRENCE OF ")) { options.push("first: true"); } else if (concat.startsWith("FIND ALL OCCURRENCES OF ")) { options.push("first: false"); } if (concat.includes(" IGNORING CASE")) { options.push("ignoringCase: true"); } if (concat.includes(" IN BYTE MODE")) { options.push("byteMode: true"); } if (concat.includes(" IN SECTION OFFSET")) { options.push("sectionOffset: " + traversal.traverse(sources[1]).getCode()); index++; } const source1 = traversal.traverse(sources[index]).getCode(); let prev = undefined; let off; for (const c of node.getChildren()) { if (prev?.getFirstToken().getStr().toUpperCase() === "OFFSET" && c.get() instanceof abaplint.Expressions.Target) { options.push("offset: " + traversal.traverse(c).getCode()); off = c; break; } prev = c; } const cnt = node.findExpressionAfterToken("COUNT"); if (cnt) { options.push("count: " + traversal.traverse(cnt).getCode()); } const len = node.findExpressionAfterToken("LENGTH"); if (len) { options.push("length: " + traversal.traverse(len).getCode()); } const res = node.findExpressionAfterToken("RESULTS"); if (res) { options.push("results: " + traversal.traverse(res).getCode()); } const firstSubmatch = node.findExpressionAfterToken("SUBMATCHES"); if (firstSubmatch) { const submatches = []; for (const t of node.findDirectExpressions(abaplint.Expressions.Target)) { if (t === len || t === cnt || t === off) { continue; } submatches.push(traversal.traverse(t).getCode()); } options.push("submatches: [" + submatches.join(",") + "]"); } return new chunk_1.Chunk("abap.statements.find(" + source1 + ", {" + options.join(", ") + "});"); } } exports.FindTranspiler = FindTranspiler; //# sourceMappingURL=find.js.map