@abaplint/cli 2.113.204 → 2.113.206
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.
- package/build/cli.js +71 -597
- package/package.json +3 -3
package/build/cli.js
CHANGED
|
@@ -9464,10 +9464,11 @@ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/co
|
|
|
9464
9464
|
const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
9465
9465
|
class Type extends combi_1.Expression {
|
|
9466
9466
|
getRunnable() {
|
|
9467
|
+
const indicators = (0, combi_1.seq)("WITH INDICATORS", _1.ComponentName, "TYPE", _1.TypeName);
|
|
9467
9468
|
const typeType = (0, combi_1.seq)(_1.TypeName, (0, combi_1.optPrio)(_1.Default));
|
|
9468
9469
|
const like = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", _1.FieldChain), (0, combi_1.seq)("REF TO", _1.FieldChain), _1.FieldChain);
|
|
9469
9470
|
const type = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", typeType), (0, combi_1.seq)("REF TO", typeType), (0, combi_1.seq)(typeType, (0, combi_1.optPrio)(_1.LOBHandle)));
|
|
9470
|
-
const ret = (0, combi_1.altPrio)((0, combi_1.seq)("LIKE", like), (0, combi_1.seq)("TYPE", type));
|
|
9471
|
+
const ret = (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.seq)("LIKE", like), (0, combi_1.seq)("TYPE", type)), (0, combi_1.optPrio)(indicators));
|
|
9471
9472
|
return ret;
|
|
9472
9473
|
}
|
|
9473
9474
|
}
|
|
@@ -9616,7 +9617,7 @@ class TypeTable extends combi_1.Expression {
|
|
|
9616
9617
|
// "WITH" is not allowed as a field name in keys
|
|
9617
9618
|
const typetable = (0, combi_1.alt)(generic, (0, combi_1.seq)(normal1, (0, combi_1.alt)((0, combi_1.opt)((0, combi_1.per)(header, initial, (0, combi_1.plusPrio)(type_table_key_1.TypeTableKey))), (0, combi_1.seq)((0, combi_1.plus)(type_table_key_1.TypeTableKey), (0, combi_1.optPrio)(initial))), (0, combi_1.optPrio)("VALUE IS INITIAL")));
|
|
9618
9619
|
const occurs = (0, combi_1.seq)("OCCURS", (0, combi_1.altPrio)(_1.Integer, field_chain_1.FieldChain));
|
|
9619
|
-
const derived = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("TABLE FOR", (0, combi_1.altPrio)("ACTION IMPORT", "ACTION RESULT", "CREATE", "EVENT", "REPORTED EARLY", "FAILED EARLY", "FAILED", "LOCK", "DETERMINATION", "READ RESULT", "UPDATE", "DELETE"), (0, combi_1.alt)(_1.TypeName, _1.EntityAssociation)));
|
|
9620
|
+
const derived = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("TABLE FOR", (0, combi_1.altPrio)("ACTION IMPORT", "ACTION RESULT", "CREATE", "EVENT", "REPORTED EARLY", "READ IMPORT", "FAILED EARLY", "FAILED", "LOCK", "DETERMINATION", "READ RESULT", "UPDATE", "DELETE"), (0, combi_1.alt)(_1.TypeName, _1.EntityAssociation)));
|
|
9620
9621
|
const oldType = (0, combi_1.seq)((0, combi_1.opt)("REF TO"), _1.TypeName, (0, combi_1.alt)((0, combi_1.seq)(occurs, (0, combi_1.opt)(header)), header));
|
|
9621
9622
|
const oldLike = (0, combi_1.seq)((0, combi_1.opt)("REF TO"), field_chain_1.FieldChain, (0, combi_1.alt)((0, combi_1.seq)(occurs, (0, combi_1.opt)(header)), header));
|
|
9622
9623
|
const typeLine = (0, combi_1.seq)("LINE OF", _1.TypeName, occurs, header);
|
|
@@ -15119,9 +15120,9 @@ class MethodDef {
|
|
|
15119
15120
|
const forfunction = (0, combi_1.seq)("FOR FUNCTION", expressions_1.TypeName, result);
|
|
15120
15121
|
const behavior = (0, combi_1.altPrio)("DDL OBJECT OPTIONS CDS SESSION CLIENT REQUIRED", // todo, this is only from version something
|
|
15121
15122
|
(0, combi_1.seq)("TABLE FUNCTION", expressions_1.NamespaceSimpleName), // todo, this is only from version something
|
|
15122
|
-
(0, combi_1.seq)("VALIDATE ON SAVE IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("MODIFY IMPORTING", (0, combi_1.plus)((0, combi_1.seq)(expressions_1.MethodParamName, modify))), (0, combi_1.seq)("PRECHECK IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("NUMBERING IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("READ IMPORTING", expressions_1.MethodParamName, (0, combi_1.altPrio)(forRead, forfunction)), (0, combi_1.seq)("FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.NamespaceSimpleName, "FOR", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR CREATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR DELETE", expressions_1.TypeName), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR READ", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.alt)("BEHAVIOR", "LOCK"), "IMPORTING", expressions_1.MethodParamName, "FOR LOCK", expressions_1.TypeName), (0, combi_1.seq)("DETERMINE", (0, combi_1.alt)("ON MODIFY", "ON SAVE"), "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("GLOBAL AUTHORIZATION IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("GLOBAL FEATURES IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.seq)((0, combi_1.opt)("INSTANCE"), "AUTHORIZATION IMPORTING"), expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("INSTANCE FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result));
|
|
15123
|
+
(0, combi_1.seq)("VALIDATE ON SAVE IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("MODIFY IMPORTING", (0, combi_1.plus)((0, combi_1.seq)(expressions_1.MethodParamName, modify))), (0, combi_1.seq)("PRECHECK IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("DETERMINATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("VALIDATION", expressions_1.TypeName, "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("NUMBERING IMPORTING", expressions_1.MethodParamName, modify), (0, combi_1.seq)("READ IMPORTING", expressions_1.MethodParamName, (0, combi_1.altPrio)(forRead, forfunction)), (0, combi_1.seq)("FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.NamespaceSimpleName, "FOR", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR CREATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName, expressions_1.MethodParamName, "FOR DELETE", expressions_1.TypeName), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR READ", expressions_1.TypeName, result), (0, combi_1.seq)("BEHAVIOR IMPORTING", expressions_1.MethodParamName, "FOR UPDATE", expressions_1.TypeName), (0, combi_1.seq)((0, combi_1.alt)("BEHAVIOR", "LOCK"), "IMPORTING", expressions_1.MethodParamName, "FOR LOCK", expressions_1.TypeName), (0, combi_1.seq)("DETERMINE", (0, combi_1.alt)("ON MODIFY", "ON SAVE"), "IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("GLOBAL AUTHORIZATION IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("GLOBAL FEATURES IMPORTING REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.seq)((0, combi_1.opt)("INSTANCE"), "AUTHORIZATION IMPORTING"), expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result), (0, combi_1.seq)("INSTANCE FEATURES IMPORTING", expressions_1.MethodParamName, "REQUEST", expressions_1.MethodParamName, "FOR", expressions_1.TypeName, result));
|
|
15123
15124
|
// todo, this is only from version something
|
|
15124
|
-
const amdp = (0, combi_1.seq)("AMDP OPTIONS", (0, combi_1.optPrio)("READ-ONLY"), "CDS SESSION CLIENT CURRENT", (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising));
|
|
15125
|
+
const amdp = (0, combi_1.seq)("AMDP OPTIONS", (0, combi_1.optPrio)("READ-ONLY"), "CDS SESSION CLIENT", (0, combi_1.alt)("CURRENT", "DEPENDENT"), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising));
|
|
15125
15126
|
const ret = (0, combi_1.seq)((0, combi_1.altPrio)("CLASS-METHODS", "METHODS"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), (0, combi_1.optPrio)(def), expressions_1.EventHandler), parameters, testing, (0, combi_1.seq)("FOR", behavior), amdp, "NOT AT END OF MODE", (0, combi_1.optPrio)(expressions_1.Redefinition)));
|
|
15126
15127
|
return ret;
|
|
15127
15128
|
}
|
|
@@ -15201,16 +15202,19 @@ class ModifyEntities {
|
|
|
15201
15202
|
const fieldsWith = (0, combi_1.seq)("FIELDS (", (0, combi_1.plus)(expressions_1.SimpleName), ")", withh);
|
|
15202
15203
|
const by = (0, combi_1.seq)("BY", expressions_1.AssociationName);
|
|
15203
15204
|
const relating = (0, combi_1.seq)("RELATING TO", expressions_1.NamespaceSimpleName, "BY", expressions_1.NamespaceSimpleName);
|
|
15204
|
-
const
|
|
15205
|
+
const execute = (0, combi_1.seq)("EXECUTE", expressions_1.NamespaceSimpleName, "FROM", expressions_1.Source);
|
|
15206
|
+
const create = (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), "FROM", expressions_1.Source, (0, combi_1.opt)(relating));
|
|
15207
|
+
const updateFrom = (0, combi_1.seq)("UPDATE FROM", expressions_1.Source, (0, combi_1.opt)(relating));
|
|
15208
|
+
const deleteFrom = (0, combi_1.seq)("DELETE FROM", expressions_1.Source);
|
|
15209
|
+
const operation = (0, combi_1.alt)((0, combi_1.seq)("UPDATE SET FIELDS WITH", expressions_1.Source), (0, combi_1.seq)("CREATE SET FIELDS WITH", expressions_1.Source), (0, combi_1.seq)("UPDATE", fieldsWith), deleteFrom, updateFrom, create, execute, (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), (0, combi_1.optPrio)("AUTO FILL CID"), (0, combi_1.altPrio)(withh, fieldsWith)));
|
|
15205
15210
|
const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
|
|
15206
15211
|
const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
|
|
15207
15212
|
const mapped = (0, combi_1.seq)("MAPPED", expressions_1.Target);
|
|
15208
15213
|
const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
|
|
15209
|
-
const
|
|
15210
|
-
const
|
|
15211
|
-
const
|
|
15212
|
-
|
|
15213
|
-
return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity)));
|
|
15214
|
+
const end = (0, combi_1.optPrio)((0, combi_1.per)(failed, result, mapped, reported));
|
|
15215
|
+
const entities = (0, combi_1.seq)((0, combi_1.optPrio)("AUGMENTING"), "ENTITIES OF", expressions_1.NamespaceSimpleName, (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.plusPrio)((0, combi_1.seq)("ENTITY", expressions_1.SimpleName, (0, combi_1.plus)(operation))));
|
|
15216
|
+
const entity = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.alt)(execute, create, deleteFrom, updateFrom));
|
|
15217
|
+
return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity), end));
|
|
15214
15218
|
}
|
|
15215
15219
|
}
|
|
15216
15220
|
exports.ModifyEntities = ModifyEntities;
|
|
@@ -16148,9 +16152,12 @@ class ReadEntities {
|
|
|
16148
16152
|
const from = (0, combi_1.seq)("FROM", expressions_1.Source);
|
|
16149
16153
|
const fields = (0, combi_1.seq)("FIELDS", (0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.plus)(expressions_1.SimpleName), (0, combi_1.tok)(tokens_1.WParenRightW), "WITH", expressions_1.Source);
|
|
16150
16154
|
const all = (0, combi_1.seq)("ALL FIELDS WITH", expressions_1.Source);
|
|
16151
|
-
const
|
|
16152
|
-
const
|
|
16153
|
-
|
|
16155
|
+
const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
|
|
16156
|
+
const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
|
|
16157
|
+
const entity = (0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.AssociationName)), (0, combi_1.alt)(fields, from, all), (0, combi_1.optPrio)(result));
|
|
16158
|
+
const s = (0, combi_1.seq)("ENTITIES OF", expressions_1.NamespaceSimpleName, (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.plus)(entity), (0, combi_1.optPrio)((0, combi_1.seq)("LINK", expressions_1.Target)), (0, combi_1.optPrio)(failed), (0, combi_1.optPrio)((0, combi_1.seq)("REPORTED", expressions_1.Target)));
|
|
16159
|
+
const single = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.alt)(all, fields, from), result, (0, combi_1.optPrio)(failed));
|
|
16160
|
+
return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("READ", (0, combi_1.alt)(s, single)));
|
|
16154
16161
|
}
|
|
16155
16162
|
}
|
|
16156
16163
|
exports.ReadEntities = ReadEntities;
|
|
@@ -18356,7 +18363,8 @@ class UpdateDatabase {
|
|
|
18356
18363
|
getMatcher() {
|
|
18357
18364
|
const parameters = (0, combi_1.seq)(expressions_1.SQLFieldAndValue, (0, combi_1.star)((0, combi_1.seq)((0, combi_1.opt)(","), expressions_1.SQLFieldAndValue)));
|
|
18358
18365
|
const set = (0, combi_1.seq)("SET", (0, combi_1.alt)(parameters, expressions_1.Dynamic), (0, combi_1.opt)((0, combi_1.seq)("WHERE", expressions_1.SQLCond)));
|
|
18359
|
-
const
|
|
18366
|
+
const indicators = (0, combi_1.seq)("INDICATORS SET STRUCTURE", expressions_1.ComponentName);
|
|
18367
|
+
const fromTable = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSource, (0, combi_1.opt)(indicators));
|
|
18360
18368
|
const ret = (0, combi_1.seq)("UPDATE", expressions_1.DatabaseTable, (0, combi_1.opt)(expressions_1.SQLClient), (0, combi_1.opt)(expressions_1.DatabaseConnection), (0, combi_1.opt)((0, combi_1.alt)(fromTable, set)));
|
|
18361
18369
|
return ret;
|
|
18362
18370
|
}
|
|
@@ -36414,564 +36422,6 @@ exports.ArtifactsABAP = ArtifactsABAP;
|
|
|
36414
36422
|
|
|
36415
36423
|
/***/ }),
|
|
36416
36424
|
|
|
36417
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js":
|
|
36418
|
-
/*!***********************************************************************!*\
|
|
36419
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js ***!
|
|
36420
|
-
\***********************************************************************/
|
|
36421
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
36422
|
-
|
|
36423
|
-
"use strict";
|
|
36424
|
-
|
|
36425
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
36426
|
-
exports.FlowGraph = exports.FLOW_EDGE_TYPE = void 0;
|
|
36427
|
-
var FLOW_EDGE_TYPE;
|
|
36428
|
-
(function (FLOW_EDGE_TYPE) {
|
|
36429
|
-
FLOW_EDGE_TYPE["true"] = "true";
|
|
36430
|
-
FLOW_EDGE_TYPE["false"] = "false";
|
|
36431
|
-
FLOW_EDGE_TYPE["undefined"] = "undefined";
|
|
36432
|
-
})(FLOW_EDGE_TYPE || (exports.FLOW_EDGE_TYPE = FLOW_EDGE_TYPE = {}));
|
|
36433
|
-
class FlowGraph {
|
|
36434
|
-
constructor(counter) {
|
|
36435
|
-
this.edges = {};
|
|
36436
|
-
this.label = "undefined";
|
|
36437
|
-
this.startNode = "start#" + counter;
|
|
36438
|
-
this.endNode = "end#" + counter;
|
|
36439
|
-
}
|
|
36440
|
-
getStart() {
|
|
36441
|
-
return this.startNode;
|
|
36442
|
-
}
|
|
36443
|
-
getLabel() {
|
|
36444
|
-
return this.label;
|
|
36445
|
-
}
|
|
36446
|
-
getEnd() {
|
|
36447
|
-
return this.endNode;
|
|
36448
|
-
}
|
|
36449
|
-
addEdge(from, to, type) {
|
|
36450
|
-
if (this.edges[from] === undefined) {
|
|
36451
|
-
this.edges[from] = {};
|
|
36452
|
-
}
|
|
36453
|
-
this.edges[from][to] = type;
|
|
36454
|
-
}
|
|
36455
|
-
removeEdge(from, to) {
|
|
36456
|
-
if (this.edges[from] === undefined) {
|
|
36457
|
-
return;
|
|
36458
|
-
}
|
|
36459
|
-
delete this.edges[from][to];
|
|
36460
|
-
if (Object.keys(this.edges[from]).length === 0) {
|
|
36461
|
-
delete this.edges[from];
|
|
36462
|
-
}
|
|
36463
|
-
}
|
|
36464
|
-
listEdges() {
|
|
36465
|
-
const list = [];
|
|
36466
|
-
for (const from of Object.keys(this.edges)) {
|
|
36467
|
-
for (const to of Object.keys(this.edges[from])) {
|
|
36468
|
-
list.push({ from, to, type: this.edges[from][to] });
|
|
36469
|
-
}
|
|
36470
|
-
}
|
|
36471
|
-
return list;
|
|
36472
|
-
}
|
|
36473
|
-
listNodes() {
|
|
36474
|
-
const set = new Set();
|
|
36475
|
-
for (const l of this.listEdges()) {
|
|
36476
|
-
set.add(l.from);
|
|
36477
|
-
set.add(l.to);
|
|
36478
|
-
}
|
|
36479
|
-
return Array.from(set.values());
|
|
36480
|
-
}
|
|
36481
|
-
hasEdges() {
|
|
36482
|
-
return Object.keys(this.edges).length > 0;
|
|
36483
|
-
}
|
|
36484
|
-
/** return value: end node of to graph */
|
|
36485
|
-
addGraph(from, to, type) {
|
|
36486
|
-
if (to.hasEdges() === false) {
|
|
36487
|
-
return from;
|
|
36488
|
-
}
|
|
36489
|
-
this.addEdge(from, to.getStart(), type);
|
|
36490
|
-
to.listEdges().forEach(e => this.addEdge(e.from, e.to, e.type));
|
|
36491
|
-
return to.getEnd();
|
|
36492
|
-
}
|
|
36493
|
-
toJSON() {
|
|
36494
|
-
return JSON.stringify(this.edges);
|
|
36495
|
-
}
|
|
36496
|
-
toTextEdges() {
|
|
36497
|
-
let graph = "";
|
|
36498
|
-
for (const l of this.listEdges()) {
|
|
36499
|
-
const label = l.type === FLOW_EDGE_TYPE.undefined ? "" : ` [label="${l.type}"]`;
|
|
36500
|
-
graph += `"${l.from}" -> "${l.to}"${label};\n`;
|
|
36501
|
-
}
|
|
36502
|
-
return graph.trim();
|
|
36503
|
-
}
|
|
36504
|
-
setLabel(label) {
|
|
36505
|
-
this.label = label;
|
|
36506
|
-
}
|
|
36507
|
-
toDigraph() {
|
|
36508
|
-
return `digraph G {
|
|
36509
|
-
labelloc="t";
|
|
36510
|
-
label="${this.label}";
|
|
36511
|
-
graph [fontname = "helvetica"];
|
|
36512
|
-
node [fontname = "helvetica", shape="box"];
|
|
36513
|
-
edge [fontname = "helvetica"];
|
|
36514
|
-
${this.toTextEdges()}
|
|
36515
|
-
}`;
|
|
36516
|
-
}
|
|
36517
|
-
listSources(node) {
|
|
36518
|
-
const set = [];
|
|
36519
|
-
for (const l of this.listEdges()) {
|
|
36520
|
-
if (node === l.to) {
|
|
36521
|
-
set.push({ name: l.from, type: l.type });
|
|
36522
|
-
}
|
|
36523
|
-
}
|
|
36524
|
-
return set;
|
|
36525
|
-
}
|
|
36526
|
-
listTargets(node) {
|
|
36527
|
-
const set = [];
|
|
36528
|
-
for (const l of this.listEdges()) {
|
|
36529
|
-
if (node === l.from) {
|
|
36530
|
-
set.push({ name: l.to, type: l.type });
|
|
36531
|
-
}
|
|
36532
|
-
}
|
|
36533
|
-
return set;
|
|
36534
|
-
}
|
|
36535
|
-
/** removes all nodes containing "#" that have one in-going and one out-going edge */
|
|
36536
|
-
reduce() {
|
|
36537
|
-
for (const node of this.listNodes()) {
|
|
36538
|
-
if (node.includes("#") === false) {
|
|
36539
|
-
continue;
|
|
36540
|
-
}
|
|
36541
|
-
const sources = this.listSources(node);
|
|
36542
|
-
const targets = this.listTargets(node);
|
|
36543
|
-
if (sources.length > 0 && targets.length > 0) {
|
|
36544
|
-
// hash node in the middle of the graph
|
|
36545
|
-
for (const s of sources) {
|
|
36546
|
-
this.removeEdge(s.name, node);
|
|
36547
|
-
}
|
|
36548
|
-
for (const t of targets) {
|
|
36549
|
-
this.removeEdge(node, t.name);
|
|
36550
|
-
}
|
|
36551
|
-
for (const s of sources) {
|
|
36552
|
-
for (const t of targets) {
|
|
36553
|
-
let type = FLOW_EDGE_TYPE.undefined;
|
|
36554
|
-
if (s.type !== FLOW_EDGE_TYPE.undefined) {
|
|
36555
|
-
type = s.type;
|
|
36556
|
-
}
|
|
36557
|
-
if (t.type !== FLOW_EDGE_TYPE.undefined) {
|
|
36558
|
-
if (type !== FLOW_EDGE_TYPE.undefined) {
|
|
36559
|
-
throw new Error("reduce: cannot merge, different edge types");
|
|
36560
|
-
}
|
|
36561
|
-
type = t.type;
|
|
36562
|
-
}
|
|
36563
|
-
this.addEdge(s.name, t.name, type);
|
|
36564
|
-
}
|
|
36565
|
-
}
|
|
36566
|
-
}
|
|
36567
|
-
if (node.startsWith("end#") && sources.length === 0) {
|
|
36568
|
-
for (const t of targets) {
|
|
36569
|
-
this.removeEdge(node, t.name);
|
|
36570
|
-
}
|
|
36571
|
-
}
|
|
36572
|
-
}
|
|
36573
|
-
return this;
|
|
36574
|
-
}
|
|
36575
|
-
}
|
|
36576
|
-
exports.FlowGraph = FlowGraph;
|
|
36577
|
-
//# sourceMappingURL=flow_graph.js.map
|
|
36578
|
-
|
|
36579
|
-
/***/ }),
|
|
36580
|
-
|
|
36581
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js":
|
|
36582
|
-
/*!*****************************************************************************!*\
|
|
36583
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js ***!
|
|
36584
|
-
\*****************************************************************************/
|
|
36585
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
36586
|
-
|
|
36587
|
-
"use strict";
|
|
36588
|
-
|
|
36589
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
36590
|
-
exports.DECLARATION_STUFF = exports.SELECTION_EVENTS = void 0;
|
|
36591
|
-
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
36592
|
-
exports.SELECTION_EVENTS = [
|
|
36593
|
-
Statements.StartOfSelection,
|
|
36594
|
-
Statements.AtSelectionScreen,
|
|
36595
|
-
Statements.AtLineSelection,
|
|
36596
|
-
Statements.AtPF,
|
|
36597
|
-
Statements.AtUserCommand,
|
|
36598
|
-
Statements.EndOfSelection,
|
|
36599
|
-
Statements.Initialization,
|
|
36600
|
-
Statements.TopOfPage,
|
|
36601
|
-
Statements.LoadOfProgram,
|
|
36602
|
-
Statements.EndOfPage,
|
|
36603
|
-
];
|
|
36604
|
-
exports.DECLARATION_STUFF = [
|
|
36605
|
-
Statements.Type,
|
|
36606
|
-
Statements.TypeBegin,
|
|
36607
|
-
Statements.TypeEnum,
|
|
36608
|
-
Statements.TypeEnumBegin,
|
|
36609
|
-
Statements.Data,
|
|
36610
|
-
Statements.DataBegin,
|
|
36611
|
-
Statements.Constant,
|
|
36612
|
-
Statements.ConstantBegin,
|
|
36613
|
-
Statements.Tables,
|
|
36614
|
-
Statements.Include, // this is not super correct, but anyhow
|
|
36615
|
-
Statements.Parameter,
|
|
36616
|
-
Statements.SelectionScreen,
|
|
36617
|
-
Statements.Define,
|
|
36618
|
-
];
|
|
36619
|
-
//# sourceMappingURL=selection_events.js.map
|
|
36620
|
-
|
|
36621
|
-
/***/ }),
|
|
36622
|
-
|
|
36623
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js":
|
|
36624
|
-
/*!***************************************************************************!*\
|
|
36625
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js ***!
|
|
36626
|
-
\***************************************************************************/
|
|
36627
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
36628
|
-
|
|
36629
|
-
"use strict";
|
|
36630
|
-
|
|
36631
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
36632
|
-
exports.StatementFlow = void 0;
|
|
36633
|
-
const nodes_1 = __webpack_require__(/*! ../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
36634
|
-
const Structures = __webpack_require__(/*! ../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
36635
|
-
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
36636
|
-
const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
36637
|
-
const flow_graph_1 = __webpack_require__(/*! ./flow_graph */ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js");
|
|
36638
|
-
const objects_1 = __webpack_require__(/*! ../../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
36639
|
-
const selection_events_1 = __webpack_require__(/*! ./selection_events */ "./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js");
|
|
36640
|
-
const virtual_position_1 = __webpack_require__(/*! ../../virtual_position */ "./node_modules/@abaplint/core/build/src/virtual_position.js");
|
|
36641
|
-
class StatementFlow {
|
|
36642
|
-
constructor() {
|
|
36643
|
-
this.counter = 0;
|
|
36644
|
-
}
|
|
36645
|
-
build(stru, obj) {
|
|
36646
|
-
var _a, _b, _c, _d;
|
|
36647
|
-
const ret = [];
|
|
36648
|
-
let name = "";
|
|
36649
|
-
const structures = stru.findAllStructuresMulti([
|
|
36650
|
-
Structures.Form, Structures.ClassImplementation, Structures.FunctionModule, Structures.Module
|
|
36651
|
-
]);
|
|
36652
|
-
for (const s of structures) {
|
|
36653
|
-
if (s.get() instanceof Structures.Form) {
|
|
36654
|
-
name = "FORM " + ((_a = s.findFirstExpression(Expressions.FormName)) === null || _a === void 0 ? void 0 : _a.concatTokens());
|
|
36655
|
-
ret.push(this.run(s, name));
|
|
36656
|
-
}
|
|
36657
|
-
else if (s.get() instanceof Structures.ClassImplementation) {
|
|
36658
|
-
const className = (_b = s.findFirstExpression(Expressions.ClassName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
|
|
36659
|
-
for (const method of s.findDirectStructures(Structures.Method)) {
|
|
36660
|
-
const methodName = (_c = method.findFirstExpression(Expressions.MethodName)) === null || _c === void 0 ? void 0 : _c.concatTokens();
|
|
36661
|
-
name = "METHOD " + methodName + ", CLASS " + className;
|
|
36662
|
-
ret.push(this.run(method, name));
|
|
36663
|
-
}
|
|
36664
|
-
}
|
|
36665
|
-
else if (s.get() instanceof Structures.FunctionModule) {
|
|
36666
|
-
name = "FUNCTION " + ((_d = s.findFirstExpression(Expressions.Field)) === null || _d === void 0 ? void 0 : _d.concatTokens());
|
|
36667
|
-
ret.push(this.run(s, name));
|
|
36668
|
-
}
|
|
36669
|
-
else if (s.get() instanceof Structures.Module) {
|
|
36670
|
-
name = s.getFirstStatement().concatTokens().toUpperCase();
|
|
36671
|
-
ret.push(this.run(s, name));
|
|
36672
|
-
}
|
|
36673
|
-
else {
|
|
36674
|
-
throw new Error("StatementFlow, unknown structure");
|
|
36675
|
-
}
|
|
36676
|
-
}
|
|
36677
|
-
if (obj instanceof objects_1.Program || obj instanceof objects_1.FunctionGroup) {
|
|
36678
|
-
// find the top level events
|
|
36679
|
-
let inEvent = false;
|
|
36680
|
-
let collected = [];
|
|
36681
|
-
for (const s of stru.getChildren() || []) {
|
|
36682
|
-
if (selection_events_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
36683
|
-
if (inEvent === true) {
|
|
36684
|
-
ret.push(this.runEvent(collected, name));
|
|
36685
|
-
}
|
|
36686
|
-
collected = [];
|
|
36687
|
-
inEvent = true;
|
|
36688
|
-
name = s.concatTokens();
|
|
36689
|
-
}
|
|
36690
|
-
else if (s.get() instanceof Structures.Normal) {
|
|
36691
|
-
collected.push(s);
|
|
36692
|
-
}
|
|
36693
|
-
else {
|
|
36694
|
-
if (inEvent === true) {
|
|
36695
|
-
ret.push(this.runEvent(collected, name));
|
|
36696
|
-
inEvent = false;
|
|
36697
|
-
}
|
|
36698
|
-
collected = [];
|
|
36699
|
-
}
|
|
36700
|
-
}
|
|
36701
|
-
if (inEvent === true) {
|
|
36702
|
-
ret.push(this.runEvent(collected, name));
|
|
36703
|
-
}
|
|
36704
|
-
else if (collected.length > 0
|
|
36705
|
-
&& !(obj instanceof objects_1.FunctionGroup)) {
|
|
36706
|
-
// implicit START-OF-SELECTION
|
|
36707
|
-
ret.push(this.runEvent(collected, "START-OF-SELECTION."));
|
|
36708
|
-
}
|
|
36709
|
-
}
|
|
36710
|
-
return ret.map(f => f.reduce());
|
|
36711
|
-
}
|
|
36712
|
-
////////////////////
|
|
36713
|
-
runEvent(s, name) {
|
|
36714
|
-
this.counter = 1;
|
|
36715
|
-
const graph = this.traverseBody(s, { procedureEnd: "end#1" });
|
|
36716
|
-
graph.setLabel(name);
|
|
36717
|
-
return graph;
|
|
36718
|
-
}
|
|
36719
|
-
run(s, name) {
|
|
36720
|
-
this.counter = 1;
|
|
36721
|
-
const graph = this.traverseBody(this.findBody(s), { procedureEnd: "end#1" });
|
|
36722
|
-
graph.setLabel(name);
|
|
36723
|
-
return graph;
|
|
36724
|
-
}
|
|
36725
|
-
findBody(f) {
|
|
36726
|
-
var _a;
|
|
36727
|
-
return ((_a = f.findDirectStructure(Structures.Body)) === null || _a === void 0 ? void 0 : _a.getChildren()) || [];
|
|
36728
|
-
}
|
|
36729
|
-
// note: it must handle macros and chained statements
|
|
36730
|
-
static buildName(statement) {
|
|
36731
|
-
let token = undefined;
|
|
36732
|
-
const colon = statement.getColon();
|
|
36733
|
-
if (colon === undefined) {
|
|
36734
|
-
token = statement.getFirstToken();
|
|
36735
|
-
}
|
|
36736
|
-
else {
|
|
36737
|
-
for (const t of statement.getTokens()) {
|
|
36738
|
-
if (t.getStart().isAfter(colon.getEnd())) {
|
|
36739
|
-
token = t;
|
|
36740
|
-
break;
|
|
36741
|
-
}
|
|
36742
|
-
}
|
|
36743
|
-
}
|
|
36744
|
-
let extra = "";
|
|
36745
|
-
const tStart = token === null || token === void 0 ? void 0 : token.getStart();
|
|
36746
|
-
if (tStart instanceof virtual_position_1.VirtualPosition) {
|
|
36747
|
-
extra += "$" + tStart.vrow;
|
|
36748
|
-
extra += "," + tStart.vcol;
|
|
36749
|
-
}
|
|
36750
|
-
if (token === undefined) {
|
|
36751
|
-
return "tokenError";
|
|
36752
|
-
}
|
|
36753
|
-
return statement.get().constructor.name +
|
|
36754
|
-
":" + token.getRow() +
|
|
36755
|
-
"," + token.getCol() + extra;
|
|
36756
|
-
}
|
|
36757
|
-
traverseBody(children, context) {
|
|
36758
|
-
const graph = new flow_graph_1.FlowGraph(this.counter++);
|
|
36759
|
-
if (children.length === 0) {
|
|
36760
|
-
graph.addEdge(graph.getStart(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36761
|
-
return graph;
|
|
36762
|
-
}
|
|
36763
|
-
let current = graph.getStart();
|
|
36764
|
-
for (const c of children) {
|
|
36765
|
-
if (c.get() instanceof Structures.Normal) {
|
|
36766
|
-
const firstChild = c.getFirstChild(); // "Normal" only has one child
|
|
36767
|
-
if (firstChild instanceof nodes_1.StatementNode) {
|
|
36768
|
-
const name = StatementFlow.buildName(firstChild);
|
|
36769
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36770
|
-
current = name;
|
|
36771
|
-
if (firstChild.get() instanceof Statements.Check) {
|
|
36772
|
-
if (context.loopStart) {
|
|
36773
|
-
graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36774
|
-
}
|
|
36775
|
-
else {
|
|
36776
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36777
|
-
}
|
|
36778
|
-
}
|
|
36779
|
-
else if (firstChild.get() instanceof Statements.Assert) {
|
|
36780
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36781
|
-
}
|
|
36782
|
-
else if (firstChild.get() instanceof Statements.Continue && context.loopStart) {
|
|
36783
|
-
graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36784
|
-
return graph;
|
|
36785
|
-
}
|
|
36786
|
-
else if (firstChild.get() instanceof Statements.Exit) {
|
|
36787
|
-
if (context.loopEnd) {
|
|
36788
|
-
graph.addEdge(name, context.loopEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36789
|
-
}
|
|
36790
|
-
else {
|
|
36791
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36792
|
-
}
|
|
36793
|
-
return graph;
|
|
36794
|
-
}
|
|
36795
|
-
else if (firstChild.get() instanceof Statements.Return) {
|
|
36796
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36797
|
-
return graph;
|
|
36798
|
-
}
|
|
36799
|
-
}
|
|
36800
|
-
else if (firstChild instanceof nodes_1.StructureNode) {
|
|
36801
|
-
const sub = this.traverseStructure(firstChild, context);
|
|
36802
|
-
current = graph.addGraph(current, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36803
|
-
}
|
|
36804
|
-
}
|
|
36805
|
-
}
|
|
36806
|
-
graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36807
|
-
return graph;
|
|
36808
|
-
}
|
|
36809
|
-
traverseStructure(n, context) {
|
|
36810
|
-
const graph = new flow_graph_1.FlowGraph(this.counter++);
|
|
36811
|
-
if (n === undefined) {
|
|
36812
|
-
return graph;
|
|
36813
|
-
}
|
|
36814
|
-
let current = graph.getStart();
|
|
36815
|
-
const type = n.get();
|
|
36816
|
-
if (type instanceof Structures.If) {
|
|
36817
|
-
const ifName = StatementFlow.buildName(n.findDirectStatement(Statements.If));
|
|
36818
|
-
const sub = this.traverseBody(this.findBody(n), context);
|
|
36819
|
-
graph.addEdge(current, ifName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36820
|
-
graph.addGraph(ifName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
36821
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36822
|
-
current = ifName;
|
|
36823
|
-
for (const e of n.findDirectStructures(Structures.ElseIf)) {
|
|
36824
|
-
const elseifst = e.findDirectStatement(Statements.ElseIf);
|
|
36825
|
-
if (elseifst === undefined) {
|
|
36826
|
-
continue;
|
|
36827
|
-
}
|
|
36828
|
-
const elseIfName = StatementFlow.buildName(elseifst);
|
|
36829
|
-
const sub = this.traverseBody(this.findBody(e), context);
|
|
36830
|
-
graph.addEdge(current, elseIfName, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36831
|
-
graph.addGraph(elseIfName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
36832
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36833
|
-
current = elseIfName;
|
|
36834
|
-
}
|
|
36835
|
-
const els = n.findDirectStructure(Structures.Else);
|
|
36836
|
-
const elsest = els === null || els === void 0 ? void 0 : els.findDirectStatement(Statements.Else);
|
|
36837
|
-
if (els && elsest) {
|
|
36838
|
-
const elseName = StatementFlow.buildName(elsest);
|
|
36839
|
-
const sub = this.traverseBody(this.findBody(els), context);
|
|
36840
|
-
graph.addEdge(current, elseName, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36841
|
-
graph.addGraph(elseName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36842
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36843
|
-
}
|
|
36844
|
-
else {
|
|
36845
|
-
graph.addEdge(ifName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36846
|
-
}
|
|
36847
|
-
}
|
|
36848
|
-
else if (type instanceof Structures.Loop
|
|
36849
|
-
|| type instanceof Structures.While
|
|
36850
|
-
|| type instanceof Structures.With
|
|
36851
|
-
|| type instanceof Structures.Provide
|
|
36852
|
-
|| type instanceof Structures.Select
|
|
36853
|
-
|| type instanceof Structures.EnhancementSection
|
|
36854
|
-
|| type instanceof Structures.LoopAtScreen
|
|
36855
|
-
|| type instanceof Structures.Do) {
|
|
36856
|
-
const loopName = StatementFlow.buildName(n.getFirstStatement());
|
|
36857
|
-
const sub = this.traverseBody(this.findBody(n), Object.assign(Object.assign({}, context), { loopStart: loopName, loopEnd: graph.getEnd() }));
|
|
36858
|
-
graph.addEdge(current, loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36859
|
-
graph.addGraph(loopName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
36860
|
-
graph.addEdge(sub.getEnd(), loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36861
|
-
graph.addEdge(loopName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
36862
|
-
}
|
|
36863
|
-
else if (type instanceof Structures.Data
|
|
36864
|
-
|| type instanceof Structures.Constants
|
|
36865
|
-
|| type instanceof Structures.Statics
|
|
36866
|
-
|| type instanceof Structures.ExecSQL
|
|
36867
|
-
|| type instanceof Structures.Types) {
|
|
36868
|
-
// these doesnt affect control flow, so just take the first statement
|
|
36869
|
-
const statement = n.getFirstStatement();
|
|
36870
|
-
const name = StatementFlow.buildName(statement);
|
|
36871
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36872
|
-
graph.addEdge(name, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36873
|
-
}
|
|
36874
|
-
else if (type instanceof Structures.TestSeam) {
|
|
36875
|
-
const name = StatementFlow.buildName(n.getFirstStatement());
|
|
36876
|
-
const sub = this.traverseBody(this.findBody(n), context);
|
|
36877
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36878
|
-
graph.addGraph(name, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36879
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36880
|
-
}
|
|
36881
|
-
else if (type instanceof Structures.AtFirst
|
|
36882
|
-
|| type instanceof Structures.AtLast
|
|
36883
|
-
|| type instanceof Structures.At
|
|
36884
|
-
|| type instanceof Structures.OnChange) {
|
|
36885
|
-
const name = StatementFlow.buildName(n.getFirstStatement());
|
|
36886
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
36887
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36888
|
-
graph.addGraph(name, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36889
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36890
|
-
graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36891
|
-
}
|
|
36892
|
-
else if (type instanceof Structures.Try) {
|
|
36893
|
-
const tryName = StatementFlow.buildName(n.getFirstStatement());
|
|
36894
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
36895
|
-
graph.addEdge(current, tryName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36896
|
-
graph.addGraph(tryName, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36897
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36898
|
-
for (const c of n.findDirectStructures(Structures.Catch)) {
|
|
36899
|
-
const catchName = StatementFlow.buildName(c.getFirstStatement());
|
|
36900
|
-
const catchBody = this.traverseBody(this.findBody(c), context);
|
|
36901
|
-
// TODO: this does not take exceptions into account
|
|
36902
|
-
graph.addEdge(body.getEnd(), catchName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36903
|
-
graph.addGraph(catchName, catchBody, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36904
|
-
graph.addEdge(catchBody.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36905
|
-
}
|
|
36906
|
-
// TODO, handle CLEANUP
|
|
36907
|
-
}
|
|
36908
|
-
else if (type instanceof Structures.CatchSystemExceptions) {
|
|
36909
|
-
// TODO: this is not completely correct
|
|
36910
|
-
const catchName = StatementFlow.buildName(n.getFirstStatement());
|
|
36911
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
36912
|
-
graph.addEdge(current, catchName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36913
|
-
graph.addGraph(catchName, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36914
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36915
|
-
}
|
|
36916
|
-
else if (type instanceof Structures.Case) {
|
|
36917
|
-
const caseName = StatementFlow.buildName(n.getFirstStatement());
|
|
36918
|
-
graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36919
|
-
let othersFound = false;
|
|
36920
|
-
for (const w of n.findDirectStructures(Structures.When)) {
|
|
36921
|
-
const first = w.getFirstStatement();
|
|
36922
|
-
if (first === undefined) {
|
|
36923
|
-
continue;
|
|
36924
|
-
}
|
|
36925
|
-
if (first.get() instanceof Statements.WhenOthers) {
|
|
36926
|
-
othersFound = true;
|
|
36927
|
-
}
|
|
36928
|
-
const firstName = StatementFlow.buildName(first);
|
|
36929
|
-
const sub = this.traverseBody(this.findBody(w), context);
|
|
36930
|
-
graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36931
|
-
graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36932
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36933
|
-
}
|
|
36934
|
-
if (othersFound === false) {
|
|
36935
|
-
graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36936
|
-
}
|
|
36937
|
-
}
|
|
36938
|
-
else if (type instanceof Structures.CaseType) {
|
|
36939
|
-
const caseName = StatementFlow.buildName(n.getFirstStatement());
|
|
36940
|
-
graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36941
|
-
let othersFound = false;
|
|
36942
|
-
for (const w of n.findDirectStructures(Structures.WhenType)) {
|
|
36943
|
-
const first = w.getFirstStatement();
|
|
36944
|
-
if (first === undefined) {
|
|
36945
|
-
continue;
|
|
36946
|
-
}
|
|
36947
|
-
if (first.get() instanceof Statements.WhenOthers) {
|
|
36948
|
-
othersFound = true;
|
|
36949
|
-
}
|
|
36950
|
-
const firstName = StatementFlow.buildName(first);
|
|
36951
|
-
const sub = this.traverseBody(this.findBody(w), context);
|
|
36952
|
-
graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36953
|
-
graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36954
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36955
|
-
}
|
|
36956
|
-
if (othersFound === false) {
|
|
36957
|
-
graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
36958
|
-
}
|
|
36959
|
-
}
|
|
36960
|
-
else if (type instanceof Structures.Define
|
|
36961
|
-
|| type instanceof Structures.TestInjection) {
|
|
36962
|
-
// do nothing
|
|
36963
|
-
}
|
|
36964
|
-
else {
|
|
36965
|
-
console.dir("StatementFlow,todo, " + n.get().constructor.name);
|
|
36966
|
-
}
|
|
36967
|
-
return graph;
|
|
36968
|
-
}
|
|
36969
|
-
}
|
|
36970
|
-
exports.StatementFlow = StatementFlow;
|
|
36971
|
-
//# sourceMappingURL=statement_flow.js.map
|
|
36972
|
-
|
|
36973
|
-
/***/ }),
|
|
36974
|
-
|
|
36975
36425
|
/***/ "./node_modules/@abaplint/core/build/src/abap/nodes/_abstract_node.js":
|
|
36976
36426
|
/*!****************************************************************************!*\
|
|
36977
36427
|
!*** ./node_modules/@abaplint/core/build/src/abap/nodes/_abstract_node.js ***!
|
|
@@ -45680,7 +45130,6 @@ const code_actions_1 = __webpack_require__(/*! ./code_actions */ "./node_modules
|
|
|
45680
45130
|
const references_1 = __webpack_require__(/*! ./references */ "./node_modules/@abaplint/core/build/src/lsp/references.js");
|
|
45681
45131
|
const implementation_1 = __webpack_require__(/*! ./implementation */ "./node_modules/@abaplint/core/build/src/lsp/implementation.js");
|
|
45682
45132
|
const semantic_1 = __webpack_require__(/*! ./semantic */ "./node_modules/@abaplint/core/build/src/lsp/semantic.js");
|
|
45683
|
-
const statement_flow_1 = __webpack_require__(/*! ../abap/flow/statement_flow */ "./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js");
|
|
45684
45133
|
const code_lens_1 = __webpack_require__(/*! ./code_lens */ "./node_modules/@abaplint/core/build/src/lsp/code_lens.js");
|
|
45685
45134
|
const inlay_hints_1 = __webpack_require__(/*! ./inlay_hints */ "./node_modules/@abaplint/core/build/src/lsp/inlay_hints.js");
|
|
45686
45135
|
// note Ranges are zero based in LSP,
|
|
@@ -45792,23 +45241,6 @@ class LanguageServer {
|
|
|
45792
45241
|
listWritePositions(textDocument) {
|
|
45793
45242
|
return new highlight_1.Highlight(this.reg).listWritePositions(textDocument);
|
|
45794
45243
|
}
|
|
45795
|
-
dumpStatementFlows(textDocument) {
|
|
45796
|
-
const file = _lsp_utils_1.LSPUtils.getABAPFile(this.reg, textDocument.uri);
|
|
45797
|
-
if (file === undefined) {
|
|
45798
|
-
return "file not found";
|
|
45799
|
-
}
|
|
45800
|
-
const obj = this.reg.findObjectForFile(file);
|
|
45801
|
-
if (obj === undefined) {
|
|
45802
|
-
return "obj not found";
|
|
45803
|
-
}
|
|
45804
|
-
const stru = file.getStructure();
|
|
45805
|
-
if (stru === undefined) {
|
|
45806
|
-
return "empty structure";
|
|
45807
|
-
}
|
|
45808
|
-
const graphs = new statement_flow_1.StatementFlow().build(stru, obj);
|
|
45809
|
-
const wiz = graphs.map(g => g.toDigraph());
|
|
45810
|
-
return JSON.stringify(wiz);
|
|
45811
|
-
}
|
|
45812
45244
|
}
|
|
45813
45245
|
exports.LanguageServer = LanguageServer;
|
|
45814
45246
|
//# sourceMappingURL=language_server.js.map
|
|
@@ -55041,7 +54473,7 @@ class Registry {
|
|
|
55041
54473
|
}
|
|
55042
54474
|
static abaplintVersion() {
|
|
55043
54475
|
// magic, see build script "version.sh"
|
|
55044
|
-
return "2.113.
|
|
54476
|
+
return "2.113.206";
|
|
55045
54477
|
}
|
|
55046
54478
|
getDDICReferences() {
|
|
55047
54479
|
return this.ddicReferences;
|
|
@@ -63358,7 +62790,7 @@ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./
|
|
|
63358
62790
|
const Structures = __webpack_require__(/*! ../abap/3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
63359
62791
|
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
63360
62792
|
const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
63361
|
-
const
|
|
62793
|
+
const stuff_1 = __webpack_require__(/*! ../stuff */ "./node_modules/@abaplint/core/build/src/stuff.js");
|
|
63362
62794
|
class EmptyEventConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
63363
62795
|
}
|
|
63364
62796
|
exports.EmptyEventConf = EmptyEventConf;
|
|
@@ -63402,7 +62834,7 @@ START-OF-SELECTION.
|
|
|
63402
62834
|
let currentEvent = undefined;
|
|
63403
62835
|
let children = [];
|
|
63404
62836
|
for (const s of stru.getChildren() || []) {
|
|
63405
|
-
if (
|
|
62837
|
+
if (stuff_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
63406
62838
|
if (currentEvent !== undefined && children.length === 0) {
|
|
63407
62839
|
issues.push(issue_1.Issue.atStatement(file, currentEvent, "Empty event", this.getMetadata().key, this.getConfig().severity));
|
|
63408
62840
|
}
|
|
@@ -63412,7 +62844,7 @@ START-OF-SELECTION.
|
|
|
63412
62844
|
else if (s.get() instanceof Structures.Normal) {
|
|
63413
62845
|
const stru = s;
|
|
63414
62846
|
// ignore declaration stuff
|
|
63415
|
-
if (
|
|
62847
|
+
if (stuff_1.DECLARATION_STUFF.some(d => { var _a; return ((_a = stru.getFirstStatement()) === null || _a === void 0 ? void 0 : _a.get()) instanceof d; })) {
|
|
63416
62848
|
continue;
|
|
63417
62849
|
}
|
|
63418
62850
|
children.push(s);
|
|
@@ -65825,7 +65257,7 @@ const Structures = __webpack_require__(/*! ../abap/3_structures/structures */ ".
|
|
|
65825
65257
|
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
65826
65258
|
const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
65827
65259
|
const nodes_1 = __webpack_require__(/*! ../abap/nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
65828
|
-
const
|
|
65260
|
+
const stuff_1 = __webpack_require__(/*! ../stuff */ "./node_modules/@abaplint/core/build/src/stuff.js");
|
|
65829
65261
|
class ImplicitStartOfSelectionConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
65830
65262
|
}
|
|
65831
65263
|
exports.ImplicitStartOfSelectionConf = ImplicitStartOfSelectionConf;
|
|
@@ -65868,7 +65300,7 @@ START-OF-SELECTION.
|
|
|
65868
65300
|
let inEvent = false;
|
|
65869
65301
|
let collected = [];
|
|
65870
65302
|
for (const s of stru.getChildren() || []) {
|
|
65871
|
-
if (
|
|
65303
|
+
if (stuff_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
65872
65304
|
if (inEvent === false && collected.length > 0) {
|
|
65873
65305
|
// implicit START-OF-SELECTION
|
|
65874
65306
|
let first = collected[0];
|
|
@@ -65883,7 +65315,7 @@ START-OF-SELECTION.
|
|
|
65883
65315
|
else if (s.get() instanceof Structures.Normal) {
|
|
65884
65316
|
const stru = s;
|
|
65885
65317
|
// ignore declaration stuff
|
|
65886
|
-
if (
|
|
65318
|
+
if (stuff_1.DECLARATION_STUFF.some(d => { var _a; return ((_a = stru.getFirstStatement()) === null || _a === void 0 ? void 0 : _a.get()) instanceof d; })) {
|
|
65887
65319
|
continue;
|
|
65888
65320
|
}
|
|
65889
65321
|
collected.push(s);
|
|
@@ -78248,6 +77680,48 @@ exports.SkipLogic = SkipLogic;
|
|
|
78248
77680
|
|
|
78249
77681
|
/***/ }),
|
|
78250
77682
|
|
|
77683
|
+
/***/ "./node_modules/@abaplint/core/build/src/stuff.js":
|
|
77684
|
+
/*!********************************************************!*\
|
|
77685
|
+
!*** ./node_modules/@abaplint/core/build/src/stuff.js ***!
|
|
77686
|
+
\********************************************************/
|
|
77687
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
77688
|
+
|
|
77689
|
+
"use strict";
|
|
77690
|
+
|
|
77691
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
77692
|
+
exports.DECLARATION_STUFF = exports.SELECTION_EVENTS = void 0;
|
|
77693
|
+
const Statements = __webpack_require__(/*! ./abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
77694
|
+
exports.SELECTION_EVENTS = [
|
|
77695
|
+
Statements.StartOfSelection,
|
|
77696
|
+
Statements.AtSelectionScreen,
|
|
77697
|
+
Statements.AtLineSelection,
|
|
77698
|
+
Statements.AtPF,
|
|
77699
|
+
Statements.AtUserCommand,
|
|
77700
|
+
Statements.EndOfSelection,
|
|
77701
|
+
Statements.Initialization,
|
|
77702
|
+
Statements.TopOfPage,
|
|
77703
|
+
Statements.LoadOfProgram,
|
|
77704
|
+
Statements.EndOfPage,
|
|
77705
|
+
];
|
|
77706
|
+
exports.DECLARATION_STUFF = [
|
|
77707
|
+
Statements.Type,
|
|
77708
|
+
Statements.TypeBegin,
|
|
77709
|
+
Statements.TypeEnum,
|
|
77710
|
+
Statements.TypeEnumBegin,
|
|
77711
|
+
Statements.Data,
|
|
77712
|
+
Statements.DataBegin,
|
|
77713
|
+
Statements.Constant,
|
|
77714
|
+
Statements.ConstantBegin,
|
|
77715
|
+
Statements.Tables,
|
|
77716
|
+
Statements.Include, // this is not super correct, but anyhow
|
|
77717
|
+
Statements.Parameter,
|
|
77718
|
+
Statements.SelectionScreen,
|
|
77719
|
+
Statements.Define,
|
|
77720
|
+
];
|
|
77721
|
+
//# sourceMappingURL=stuff.js.map
|
|
77722
|
+
|
|
77723
|
+
/***/ }),
|
|
77724
|
+
|
|
78251
77725
|
/***/ "./node_modules/@abaplint/core/build/src/utils/cyclomatic_complexity_stats.js":
|
|
78252
77726
|
/*!************************************************************************************!*\
|
|
78253
77727
|
!*** ./node_modules/@abaplint/core/build/src/utils/cyclomatic_complexity_stats.js ***!
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/cli",
|
|
3
|
-
"version": "2.113.
|
|
3
|
+
"version": "2.113.206",
|
|
4
4
|
"description": "abaplint - Command Line Interface",
|
|
5
5
|
"funding": "https://github.com/sponsors/larshp",
|
|
6
6
|
"bin": {
|
|
@@ -38,11 +38,11 @@
|
|
|
38
38
|
},
|
|
39
39
|
"homepage": "https://abaplint.org",
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@abaplint/core": "^2.113.
|
|
41
|
+
"@abaplint/core": "^2.113.206",
|
|
42
42
|
"@types/chai": "^4.3.20",
|
|
43
43
|
"@types/minimist": "^1.2.5",
|
|
44
44
|
"@types/mocha": "^10.0.10",
|
|
45
|
-
"@types/node": "^24.
|
|
45
|
+
"@types/node": "^24.5.2",
|
|
46
46
|
"@types/progress": "^2.0.7",
|
|
47
47
|
"chai": "^4.5.0",
|
|
48
48
|
"p-limit": "^3.1.0",
|