@abaplint/core 2.93.20 → 2.93.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -7,7 +7,8 @@ const component_compare_simple_1 = require("./component_compare_simple");
|
|
|
7
7
|
class LoopGroupByComponent extends combi_1.Expression {
|
|
8
8
|
getRunnable() {
|
|
9
9
|
const groupSize = (0, combi_1.seq)(component_name_1.ComponentName, "=", "GROUP SIZE");
|
|
10
|
-
const
|
|
10
|
+
const groupIndex = (0, combi_1.seq)(component_name_1.ComponentName, "=", "GROUP INDEX");
|
|
11
|
+
const components = (0, combi_1.alt)(component_compare_simple_1.ComponentCompareSimple, groupSize, groupIndex);
|
|
11
12
|
return components;
|
|
12
13
|
}
|
|
13
14
|
}
|
|
@@ -5,18 +5,10 @@ const Expressions = require("../../2_statements/expressions");
|
|
|
5
5
|
const basic_1 = require("../../types/basic");
|
|
6
6
|
const component_compare_1 = require("./component_compare");
|
|
7
7
|
const inline_data_1 = require("./inline_data");
|
|
8
|
-
const
|
|
8
|
+
const fstarget_1 = require("./fstarget");
|
|
9
9
|
const target_1 = require("./target");
|
|
10
10
|
class LoopGroupBy {
|
|
11
11
|
runSyntax(node, scope, filename) {
|
|
12
|
-
const components = [];
|
|
13
|
-
for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
|
|
14
|
-
components.push({ name: c.getFirstToken().getStr(), type: new basic_1.VoidType("todoGroupBy") });
|
|
15
|
-
}
|
|
16
|
-
if (components.length === 0) {
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
const sourceType = new basic_1.StructureType(components);
|
|
20
12
|
for (const t of node.findAllExpressions(Expressions.Target)) {
|
|
21
13
|
const inline = t.findDirectExpression(Expressions.InlineData);
|
|
22
14
|
if (inline) {
|
|
@@ -26,10 +18,19 @@ class LoopGroupBy {
|
|
|
26
18
|
new target_1.Target().runSyntax(t, scope, filename);
|
|
27
19
|
}
|
|
28
20
|
}
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
for (const t of node.findAllExpressions(Expressions.FSTarget)) {
|
|
22
|
+
new fstarget_1.FSTarget().runSyntax(t, scope, filename, new basic_1.VoidType("todoGroupBy"));
|
|
23
|
+
}
|
|
24
|
+
/*
|
|
25
|
+
const components: IStructureComponent[] = [];
|
|
26
|
+
for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
|
|
27
|
+
components.push({name: c.getFirstToken().getStr(), type: new VoidType("todoGroupBy")});
|
|
28
|
+
}
|
|
29
|
+
if (components.length === 0) {
|
|
30
|
+
return;
|
|
32
31
|
}
|
|
32
|
+
*/
|
|
33
|
+
// const sourceType = new StructureType(components);
|
|
33
34
|
for (const c of node.findDirectExpressions(Expressions.LoopGroupByComponent)) {
|
|
34
35
|
for (const t of c.findDirectExpressions(Expressions.ComponentCompareSimple)) {
|
|
35
36
|
new component_compare_1.ComponentCompare().runSyntax(t, scope, filename);
|
package/build/src/registry.js
CHANGED
|
@@ -921,7 +921,7 @@ ${indentation}RAISE EXCEPTION ${uniqueName2}.`;
|
|
|
921
921
|
return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Downport, simple REF move", this.getMetadata().key, this.conf.severity, fix);
|
|
922
922
|
}
|
|
923
923
|
downportLoopGroup(high, lowFile, highSyntax, highFile) {
|
|
924
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
924
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
925
925
|
if (!(high.get() instanceof Statements.Loop)) {
|
|
926
926
|
return undefined;
|
|
927
927
|
}
|
|
@@ -929,11 +929,15 @@ ${indentation}RAISE EXCEPTION ${uniqueName2}.`;
|
|
|
929
929
|
if (group === undefined) {
|
|
930
930
|
return undefined;
|
|
931
931
|
}
|
|
932
|
-
const groupTargetName = ((_a = group.findFirstExpression(Expressions.TargetField)) === null || _a === void 0 ? void 0 : _a.concatTokens())
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
const
|
|
936
|
-
const
|
|
932
|
+
const groupTargetName = ((_a = group.findFirstExpression(Expressions.TargetField)) === null || _a === void 0 ? void 0 : _a.concatTokens())
|
|
933
|
+
|| ((_b = group.findFirstExpression(Expressions.TargetFieldSymbol)) === null || _b === void 0 ? void 0 : _b.concatTokens().replace("<", "_").replace(">", "_"))
|
|
934
|
+
|| "nameNotFound";
|
|
935
|
+
const loopSourceName = ((_c = high.findFirstExpression(Expressions.SimpleSource2)) === null || _c === void 0 ? void 0 : _c.concatTokens()) || "nameNotFound";
|
|
936
|
+
const loopTargetName = ((_d = high.findFirstExpression(Expressions.TargetField)) === null || _d === void 0 ? void 0 : _d.concatTokens())
|
|
937
|
+
|| ((_e = high.findFirstExpression(Expressions.TargetFieldSymbol)) === null || _e === void 0 ? void 0 : _e.concatTokens())
|
|
938
|
+
|| "nameNotFound";
|
|
939
|
+
const groupTarget = ((_f = group.findDirectExpression(Expressions.LoopGroupByTarget)) === null || _f === void 0 ? void 0 : _f.concatTokens()) || "";
|
|
940
|
+
const isReference = (_g = high.findFirstExpression(Expressions.LoopTarget)) === null || _g === void 0 ? void 0 : _g.concatTokens().toUpperCase().startsWith("REFERENCE INTO ");
|
|
937
941
|
let loopSourceRowType = "typeNotFound";
|
|
938
942
|
const spag = highSyntax.spaghetti.lookupPosition(high.getFirstToken().getStart(), lowFile.getFilename());
|
|
939
943
|
if (spag !== undefined) {
|
|
@@ -948,8 +952,8 @@ ${indentation}RAISE EXCEPTION ${uniqueName2}.`;
|
|
|
948
952
|
let groupCountName = undefined;
|
|
949
953
|
for (const c of group.findAllExpressions(Expressions.LoopGroupByComponent)) {
|
|
950
954
|
const name = c.findFirstExpression(Expressions.ComponentName);
|
|
951
|
-
let type = ((
|
|
952
|
-
if ((
|
|
955
|
+
let type = ((_h = c.findFirstExpression(Expressions.Source)) === null || _h === void 0 ? void 0 : _h.concatTokens()) || "todo";
|
|
956
|
+
if ((_j = c.concatTokens()) === null || _j === void 0 ? void 0 : _j.toUpperCase().endsWith(" = GROUP SIZE")) {
|
|
953
957
|
type = "i";
|
|
954
958
|
groupCountName = name === null || name === void 0 ? void 0 : name.concatTokens();
|
|
955
959
|
}
|
|
@@ -960,13 +964,23 @@ ${indentation}RAISE EXCEPTION ${uniqueName2}.`;
|
|
|
960
964
|
}
|
|
961
965
|
code += ` ${name === null || name === void 0 ? void 0 : name.concatTokens()} TYPE ${type},\n`;
|
|
962
966
|
}
|
|
967
|
+
const s = group.findDirectExpression(Expressions.Source);
|
|
968
|
+
let singleName = "";
|
|
969
|
+
if (s) {
|
|
970
|
+
let type = s.concatTokens();
|
|
971
|
+
type = type.replace(loopTargetName, loopSourceRowType);
|
|
972
|
+
type = type.replace("->", "-");
|
|
973
|
+
singleName = s.concatTokens().split("-")[1];
|
|
974
|
+
code += ` ${singleName} TYPE ${type},\n`;
|
|
975
|
+
condition = singleName + " = " + s.concatTokens();
|
|
976
|
+
}
|
|
963
977
|
const uniqueName = this.uniqueName(high.getFirstToken().getStart(), lowFile.getFilename(), highSyntax);
|
|
964
978
|
const uniqueFS = this.uniqueName(high.getFirstToken().getStart(), lowFile.getFilename(), highSyntax);
|
|
965
979
|
code += ` items LIKE ${loopSourceName},
|
|
966
980
|
END OF ${groupTargetName}type.
|
|
967
981
|
DATA ${groupTargetName}tab TYPE STANDARD TABLE OF ${groupTargetName}type WITH DEFAULT KEY.
|
|
968
982
|
DATA ${uniqueName} LIKE LINE OF ${groupTargetName}tab.
|
|
969
|
-
LOOP AT ${loopSourceName} ${(
|
|
983
|
+
LOOP AT ${loopSourceName} ${(_k = high.findFirstExpression(Expressions.LoopTarget)) === null || _k === void 0 ? void 0 : _k.concatTokens()}.
|
|
970
984
|
READ TABLE ${groupTargetName}tab ASSIGNING FIELD-SYMBOL(<${uniqueFS}>) WITH KEY ${condition}.
|
|
971
985
|
IF sy-subrc = 0.\n`;
|
|
972
986
|
if (groupCountName !== undefined) {
|
|
@@ -978,25 +992,28 @@ ELSE.\n`;
|
|
|
978
992
|
for (const c of group.findAllExpressions(Expressions.LoopGroupByComponent)) {
|
|
979
993
|
code += ` ${uniqueName}-${c.concatTokens().replace("GROUP SIZE", "1")}.\n`;
|
|
980
994
|
}
|
|
995
|
+
if (singleName !== "") {
|
|
996
|
+
code += ` ${uniqueName}-${singleName} = ${loopTargetName}-${singleName}.\n`;
|
|
997
|
+
}
|
|
981
998
|
code += ` INSERT ${loopTargetName}${isReference ? "->*" : ""} INTO TABLE ${uniqueName}-items.\n`;
|
|
982
999
|
code += ` INSERT ${uniqueName} INTO TABLE ${groupTargetName}tab.\n`;
|
|
983
1000
|
code += `ENDIF.
|
|
984
1001
|
ENDLOOP.
|
|
985
1002
|
LOOP AT ${groupTargetName}tab ${groupTarget}.`;
|
|
986
1003
|
let fix = edit_helper_1.EditHelper.replaceRange(lowFile, high.getFirstToken().getStart(), high.getLastToken().getEnd(), code);
|
|
987
|
-
for (const l of ((
|
|
1004
|
+
for (const l of ((_l = highFile.getStructure()) === null || _l === void 0 ? void 0 : _l.findAllStructures(Structures.Loop)) || []) {
|
|
988
1005
|
// make sure to find the correct/current loop statement
|
|
989
1006
|
if (l.findDirectStatement(Statements.Loop) !== high) {
|
|
990
1007
|
continue;
|
|
991
1008
|
}
|
|
992
1009
|
for (const loop of l.findAllStatements(Statements.Loop)) {
|
|
993
|
-
if ((
|
|
1010
|
+
if ((_m = loop.concatTokens()) === null || _m === void 0 ? void 0 : _m.toUpperCase().startsWith("LOOP AT GROUP ")) {
|
|
994
1011
|
const subLoopSource = loop.findFirstExpression(Expressions.SimpleSource2);
|
|
995
1012
|
if (subLoopSource === undefined) {
|
|
996
1013
|
continue;
|
|
997
1014
|
}
|
|
998
1015
|
const subLoopSourceName = (subLoopSource === null || subLoopSource === void 0 ? void 0 : subLoopSource.concatTokens()) || "nameNotFound";
|
|
999
|
-
const subCode = `LOOP AT ${subLoopSourceName}->items`;
|
|
1016
|
+
const subCode = `LOOP AT ${subLoopSourceName}${isReference ? "->" : "-"}items`;
|
|
1000
1017
|
const subFix = edit_helper_1.EditHelper.replaceRange(lowFile, loop.getFirstToken().getStart(), subLoopSource.getLastToken().getEnd(), subCode);
|
|
1001
1018
|
fix = edit_helper_1.EditHelper.merge(subFix, fix);
|
|
1002
1019
|
}
|
|
@@ -1329,7 +1346,9 @@ ${indentation} output = ${topTarget}.`;
|
|
|
1329
1346
|
return undefined;
|
|
1330
1347
|
}
|
|
1331
1348
|
const concat = node.concatTokens().toUpperCase();
|
|
1332
|
-
if (concat.includes(" REFERENCE INTO ")
|
|
1349
|
+
if (concat.includes(" REFERENCE INTO ")
|
|
1350
|
+
|| concat.includes(" GROUP BY ")
|
|
1351
|
+
|| concat.startsWith("LOOP AT GROUP ")) {
|
|
1333
1352
|
return undefined;
|
|
1334
1353
|
}
|
|
1335
1354
|
const indentation = " ".repeat(node.getFirstToken().getStart().getCol() - 1);
|
|
@@ -1796,7 +1815,8 @@ ${indentation} output = ${topTarget}.`;
|
|
|
1796
1815
|
}
|
|
1797
1816
|
outlineFS(low, high, lowFile, highSyntax) {
|
|
1798
1817
|
var _a, _b;
|
|
1799
|
-
if (!(low.get() instanceof _statement_1.Unknown)
|
|
1818
|
+
if (!(low.get() instanceof _statement_1.Unknown)
|
|
1819
|
+
|| (high.get() instanceof Statements.Loop)) {
|
|
1800
1820
|
return undefined;
|
|
1801
1821
|
}
|
|
1802
1822
|
for (const i of high.findAllExpressionsRecursive(Expressions.InlineFS)) {
|