@abaplint/transpiler-cli 2.11.91 → 2.11.93
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/bundle.js +256 -644
- package/package.json +4 -4
package/build/bundle.js
CHANGED
|
@@ -151,19 +151,17 @@ const virtual_position_1 = __webpack_require__(/*! ../../virtual_position */ "./
|
|
|
151
151
|
const tokens_1 = __webpack_require__(/*! ./tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
152
152
|
const lexer_buffer_1 = __webpack_require__(/*! ./lexer_buffer */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/lexer_buffer.js");
|
|
153
153
|
const lexer_stream_1 = __webpack_require__(/*! ./lexer_stream */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/lexer_stream.js");
|
|
154
|
+
const ModeNormal = 1;
|
|
155
|
+
const ModePing = 2;
|
|
156
|
+
const ModeStr = 3;
|
|
157
|
+
const ModeTemplate = 4;
|
|
158
|
+
const ModeComment = 5;
|
|
159
|
+
const ModePragma = 6;
|
|
154
160
|
class Lexer {
|
|
155
|
-
constructor() {
|
|
156
|
-
this.ModeNormal = 1;
|
|
157
|
-
this.ModePing = 2;
|
|
158
|
-
this.ModeStr = 3;
|
|
159
|
-
this.ModeTemplate = 4;
|
|
160
|
-
this.ModeComment = 5;
|
|
161
|
-
this.ModePragma = 6;
|
|
162
|
-
}
|
|
163
161
|
run(file, virtual) {
|
|
164
162
|
this.virtual = virtual;
|
|
165
163
|
this.tokens = [];
|
|
166
|
-
this.m =
|
|
164
|
+
this.m = ModeNormal;
|
|
167
165
|
this.process(file.getRaw());
|
|
168
166
|
return { file, tokens: this.tokens };
|
|
169
167
|
}
|
|
@@ -189,13 +187,13 @@ class Lexer {
|
|
|
189
187
|
pos = new virtual_position_1.VirtualPosition(this.virtual, pos.getRow(), pos.getCol());
|
|
190
188
|
}
|
|
191
189
|
let tok = undefined;
|
|
192
|
-
if (this.m ===
|
|
190
|
+
if (this.m === ModeComment) {
|
|
193
191
|
tok = new tokens_1.Comment(pos, s);
|
|
194
192
|
}
|
|
195
|
-
else if (this.m ===
|
|
193
|
+
else if (this.m === ModePing || this.m === ModeStr) {
|
|
196
194
|
tok = new tokens_1.StringToken(pos, s);
|
|
197
195
|
}
|
|
198
|
-
else if (this.m ===
|
|
196
|
+
else if (this.m === ModeTemplate) {
|
|
199
197
|
const first = s.charAt(0);
|
|
200
198
|
const last = s.charAt(s.length - 1);
|
|
201
199
|
if (first === "|" && last === "|") {
|
|
@@ -388,35 +386,35 @@ class Lexer {
|
|
|
388
386
|
const buf = this.buffer.add(current);
|
|
389
387
|
const ahead = this.stream.nextChar();
|
|
390
388
|
const aahead = this.stream.nextNextChar();
|
|
391
|
-
if (this.m ===
|
|
389
|
+
if (this.m === ModeNormal) {
|
|
392
390
|
if (splits[ahead]) {
|
|
393
391
|
this.add();
|
|
394
392
|
}
|
|
395
393
|
else if (ahead === "'") {
|
|
396
394
|
// start string
|
|
397
395
|
this.add();
|
|
398
|
-
this.m =
|
|
396
|
+
this.m = ModeStr;
|
|
399
397
|
}
|
|
400
398
|
else if (ahead === "|" || ahead === "}") {
|
|
401
399
|
// start template
|
|
402
400
|
this.add();
|
|
403
|
-
this.m =
|
|
401
|
+
this.m = ModeTemplate;
|
|
404
402
|
}
|
|
405
403
|
else if (ahead === "`") {
|
|
406
404
|
// start ping
|
|
407
405
|
this.add();
|
|
408
|
-
this.m =
|
|
406
|
+
this.m = ModePing;
|
|
409
407
|
}
|
|
410
408
|
else if (aahead === "##") {
|
|
411
409
|
// start pragma
|
|
412
410
|
this.add();
|
|
413
|
-
this.m =
|
|
411
|
+
this.m = ModePragma;
|
|
414
412
|
}
|
|
415
413
|
else if (ahead === "\""
|
|
416
414
|
|| (ahead === "*" && current === "\n")) {
|
|
417
415
|
// start comment
|
|
418
416
|
this.add();
|
|
419
|
-
this.m =
|
|
417
|
+
this.m = ModeComment;
|
|
420
418
|
}
|
|
421
419
|
else if (ahead === "@" && buf.trim().length === 0) {
|
|
422
420
|
this.add();
|
|
@@ -437,12 +435,12 @@ class Lexer {
|
|
|
437
435
|
this.add();
|
|
438
436
|
}
|
|
439
437
|
}
|
|
440
|
-
else if (this.m ===
|
|
438
|
+
else if (this.m === ModePragma && (ahead === "," || ahead === ":" || ahead === "." || ahead === " " || ahead === "\n")) {
|
|
441
439
|
// end of pragma
|
|
442
440
|
this.add();
|
|
443
|
-
this.m =
|
|
441
|
+
this.m = ModeNormal;
|
|
444
442
|
}
|
|
445
|
-
else if (this.m ===
|
|
443
|
+
else if (this.m === ModePing
|
|
446
444
|
&& buf.length > 1
|
|
447
445
|
&& current === "`"
|
|
448
446
|
&& aahead !== "``"
|
|
@@ -451,26 +449,26 @@ class Lexer {
|
|
|
451
449
|
// end of ping
|
|
452
450
|
this.add();
|
|
453
451
|
if (ahead === `"`) {
|
|
454
|
-
this.m =
|
|
452
|
+
this.m = ModeComment;
|
|
455
453
|
}
|
|
456
454
|
else {
|
|
457
|
-
this.m =
|
|
455
|
+
this.m = ModeNormal;
|
|
458
456
|
}
|
|
459
457
|
}
|
|
460
|
-
else if (this.m ===
|
|
458
|
+
else if (this.m === ModeTemplate
|
|
461
459
|
&& buf.length > 1
|
|
462
460
|
&& (current === "|" || current === "{")
|
|
463
461
|
&& (this.stream.prevChar() !== "\\" || this.stream.prevPrevChar() === "\\\\")) {
|
|
464
462
|
// end of template
|
|
465
463
|
this.add();
|
|
466
|
-
this.m =
|
|
464
|
+
this.m = ModeNormal;
|
|
467
465
|
}
|
|
468
|
-
else if (this.m ===
|
|
466
|
+
else if (this.m === ModeTemplate
|
|
469
467
|
&& ahead === "}"
|
|
470
468
|
&& current !== "\\") {
|
|
471
469
|
this.add();
|
|
472
470
|
}
|
|
473
|
-
else if (this.m ===
|
|
471
|
+
else if (this.m === ModeStr
|
|
474
472
|
&& current === "'"
|
|
475
473
|
&& buf.length > 1
|
|
476
474
|
&& aahead !== "''"
|
|
@@ -479,17 +477,17 @@ class Lexer {
|
|
|
479
477
|
// end of string
|
|
480
478
|
this.add();
|
|
481
479
|
if (ahead === "\"") {
|
|
482
|
-
this.m =
|
|
480
|
+
this.m = ModeComment;
|
|
483
481
|
}
|
|
484
482
|
else {
|
|
485
|
-
this.m =
|
|
483
|
+
this.m = ModeNormal;
|
|
486
484
|
}
|
|
487
485
|
}
|
|
488
|
-
else if (ahead === "\n" && this.m !==
|
|
486
|
+
else if (ahead === "\n" && this.m !== ModeTemplate) {
|
|
489
487
|
this.add();
|
|
490
|
-
this.m =
|
|
488
|
+
this.m = ModeNormal;
|
|
491
489
|
}
|
|
492
|
-
else if (this.m ===
|
|
490
|
+
else if (this.m === ModeTemplate && current === "\n") {
|
|
493
491
|
this.add();
|
|
494
492
|
}
|
|
495
493
|
if (!this.stream.advance()) {
|
|
@@ -4036,7 +4034,7 @@ exports.EntityAssociation = void 0;
|
|
|
4036
4034
|
const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
4037
4035
|
class EntityAssociation extends combi_1.Expression {
|
|
4038
4036
|
getRunnable() {
|
|
4039
|
-
return (0, combi_1.regex)(/^[\/\w]+(\\_|\\\\)[
|
|
4037
|
+
return (0, combi_1.regex)(/^[\/\w]+(\\_|\\\\)[\/\_\w\\~]+$/);
|
|
4040
4038
|
}
|
|
4041
4039
|
}
|
|
4042
4040
|
exports.EntityAssociation = EntityAssociation;
|
|
@@ -7512,9 +7510,14 @@ class SQLFunction extends combi_1.Expression {
|
|
|
7512
7510
|
const concat_with_space = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^concat_with_space$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7513
7511
|
// dunno if the version for substring is correct
|
|
7514
7512
|
const substring = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^substring$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7513
|
+
// dunno if the version for substring is correct
|
|
7514
|
+
const dats_is_valid = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^dats_is_valid$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7515
|
+
const dats_days_between = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^dats_days_between$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7516
|
+
const dats_add_days = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^dats_is_valid$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7517
|
+
const dats_add_months = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^dats_is_valid$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7515
7518
|
const ltrim = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^ltrim$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7516
7519
|
const rtrim = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^rtrim$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7517
|
-
return (0, combi_1.altPrio)(uuid, abs, ceil, floor, cast, div, mod, coalesce, concat, replace, length, lower, upper, round, concat_with_space, ltrim, rtrim, substring);
|
|
7520
|
+
return (0, combi_1.altPrio)(uuid, abs, ceil, floor, cast, div, mod, coalesce, concat, replace, length, lower, upper, round, concat_with_space, ltrim, rtrim, substring, dats_is_valid, dats_days_between, dats_add_days, dats_add_months);
|
|
7518
7521
|
}
|
|
7519
7522
|
}
|
|
7520
7523
|
exports.SQLFunction = SQLFunction;
|
|
@@ -8362,10 +8365,11 @@ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/co
|
|
|
8362
8365
|
const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
8363
8366
|
class Type extends combi_1.Expression {
|
|
8364
8367
|
getRunnable() {
|
|
8368
|
+
const indicators = (0, combi_1.seq)("WITH INDICATORS", _1.ComponentName, "TYPE", _1.TypeName);
|
|
8365
8369
|
const typeType = (0, combi_1.seq)(_1.TypeName, (0, combi_1.optPrio)(_1.Default));
|
|
8366
8370
|
const like = (0, combi_1.altPrio)((0, combi_1.seq)("LINE OF", _1.FieldChain), (0, combi_1.seq)("REF TO", _1.FieldChain), _1.FieldChain);
|
|
8367
8371
|
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)));
|
|
8368
|
-
const ret = (0, combi_1.altPrio)((0, combi_1.seq)("LIKE", like), (0, combi_1.seq)("TYPE", type));
|
|
8372
|
+
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));
|
|
8369
8373
|
return ret;
|
|
8370
8374
|
}
|
|
8371
8375
|
}
|
|
@@ -8514,7 +8518,7 @@ class TypeTable extends combi_1.Expression {
|
|
|
8514
8518
|
// "WITH" is not allowed as a field name in keys
|
|
8515
8519
|
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")));
|
|
8516
8520
|
const occurs = (0, combi_1.seq)("OCCURS", (0, combi_1.altPrio)(_1.Integer, field_chain_1.FieldChain));
|
|
8517
|
-
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"), (0, combi_1.alt)(_1.TypeName, _1.EntityAssociation)));
|
|
8521
|
+
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)));
|
|
8518
8522
|
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));
|
|
8519
8523
|
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));
|
|
8520
8524
|
const typeLine = (0, combi_1.seq)("LINE OF", _1.TypeName, occurs, header);
|
|
@@ -14017,9 +14021,9 @@ class MethodDef {
|
|
|
14017
14021
|
const forfunction = (0, combi_1.seq)("FOR FUNCTION", expressions_1.TypeName, result);
|
|
14018
14022
|
const behavior = (0, combi_1.altPrio)("DDL OBJECT OPTIONS CDS SESSION CLIENT REQUIRED", // todo, this is only from version something
|
|
14019
14023
|
(0, combi_1.seq)("TABLE FUNCTION", expressions_1.NamespaceSimpleName), // todo, this is only from version something
|
|
14020
|
-
(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)("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));
|
|
14024
|
+
(0, combi_1.seq)("VALIDATE ON SAVE IMPORTING", expressions_1.MethodParamName, "FOR", expressions_1.TypeName), (0, combi_1.seq)("MODIFY", (0, combi_1.opt)("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));
|
|
14021
14025
|
// todo, this is only from version something
|
|
14022
|
-
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));
|
|
14026
|
+
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));
|
|
14023
14027
|
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)));
|
|
14024
14028
|
return ret;
|
|
14025
14029
|
}
|
|
@@ -14099,16 +14103,23 @@ class ModifyEntities {
|
|
|
14099
14103
|
const fieldsWith = (0, combi_1.seq)("FIELDS (", (0, combi_1.plus)(expressions_1.SimpleName), ")", withh);
|
|
14100
14104
|
const by = (0, combi_1.seq)("BY", expressions_1.AssociationName);
|
|
14101
14105
|
const relating = (0, combi_1.seq)("RELATING TO", expressions_1.NamespaceSimpleName, "BY", expressions_1.NamespaceSimpleName);
|
|
14102
|
-
const
|
|
14106
|
+
const execute = (0, combi_1.seq)("EXECUTE", expressions_1.NamespaceSimpleName, "FROM", expressions_1.Source);
|
|
14107
|
+
const create = (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), "FROM", expressions_1.Source, (0, combi_1.opt)(relating));
|
|
14108
|
+
const updateFrom = (0, combi_1.seq)("UPDATE FROM", expressions_1.Source, (0, combi_1.opt)(relating));
|
|
14109
|
+
const deleteFrom = (0, combi_1.seq)("DELETE FROM", expressions_1.Source);
|
|
14110
|
+
const updateFields = (0, combi_1.seq)("UPDATE", fieldsWith);
|
|
14111
|
+
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), updateFields, 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)));
|
|
14103
14112
|
const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
|
|
14104
14113
|
const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
|
|
14105
14114
|
const mapped = (0, combi_1.seq)("MAPPED", expressions_1.Target);
|
|
14106
14115
|
const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
|
|
14107
|
-
const
|
|
14108
|
-
const
|
|
14109
|
-
const
|
|
14110
|
-
const
|
|
14111
|
-
|
|
14116
|
+
const end = (0, combi_1.optPrio)((0, combi_1.per)(failed, result, mapped, reported));
|
|
14117
|
+
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.NamespaceSimpleName, (0, combi_1.plus)(operation))));
|
|
14118
|
+
const create2 = (0, combi_1.seq)("CREATE", fieldsWith, (0, combi_1.opt)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith)));
|
|
14119
|
+
const create3 = (0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith);
|
|
14120
|
+
const create4 = (0, combi_1.seq)("CREATE FROM", expressions_1.Source, (0, combi_1.plus)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, "FROM", expressions_1.Source)));
|
|
14121
|
+
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, updateFields, deleteFrom, updateFrom, create2, create3, create4));
|
|
14122
|
+
return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity), end));
|
|
14112
14123
|
}
|
|
14113
14124
|
}
|
|
14114
14125
|
exports.ModifyEntities = ModifyEntities;
|
|
@@ -15046,9 +15057,16 @@ class ReadEntities {
|
|
|
15046
15057
|
const from = (0, combi_1.seq)("FROM", expressions_1.Source);
|
|
15047
15058
|
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);
|
|
15048
15059
|
const all = (0, combi_1.seq)("ALL FIELDS WITH", expressions_1.Source);
|
|
15049
|
-
const
|
|
15050
|
-
const
|
|
15051
|
-
|
|
15060
|
+
const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
|
|
15061
|
+
const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
|
|
15062
|
+
const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
|
|
15063
|
+
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));
|
|
15064
|
+
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)((0, combi_1.per)(failed, reported)));
|
|
15065
|
+
const byall = (0, combi_1.seq)("BY", expressions_1.AssociationName, all);
|
|
15066
|
+
const by = (0, combi_1.seq)("BY", expressions_1.AssociationName, fields);
|
|
15067
|
+
const sub = (0, combi_1.seq)((0, combi_1.alt)(all, fields, from, by, byall), result);
|
|
15068
|
+
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.plus)(sub), (0, combi_1.optPrio)(failed), (0, combi_1.optPrio)(reported));
|
|
15069
|
+
return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("READ", (0, combi_1.alt)(s, single)));
|
|
15052
15070
|
}
|
|
15053
15071
|
}
|
|
15054
15072
|
exports.ReadEntities = ReadEntities;
|
|
@@ -15586,7 +15604,7 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/
|
|
|
15586
15604
|
const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
|
|
15587
15605
|
class Select {
|
|
15588
15606
|
getMatcher() {
|
|
15589
|
-
const union = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("UNION", (0, combi_1.optPrio)((0, combi_1.altPrio)("DISTINCT", "ALL")), expressions_1.Select));
|
|
15607
|
+
const union = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("UNION", (0, combi_1.optPrio)((0, combi_1.altPrio)("DISTINCT", "ALL")), expressions_1.Select), version_1.Version.OpenABAP);
|
|
15590
15608
|
return (0, combi_1.seq)(expressions_1.Select, (0, combi_1.starPrio)(union));
|
|
15591
15609
|
}
|
|
15592
15610
|
}
|
|
@@ -17254,7 +17272,8 @@ class UpdateDatabase {
|
|
|
17254
17272
|
getMatcher() {
|
|
17255
17273
|
const parameters = (0, combi_1.seq)(expressions_1.SQLFieldAndValue, (0, combi_1.star)((0, combi_1.seq)((0, combi_1.opt)(","), expressions_1.SQLFieldAndValue)));
|
|
17256
17274
|
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)));
|
|
17257
|
-
const
|
|
17275
|
+
const indicators = (0, combi_1.seq)("INDICATORS SET STRUCTURE", expressions_1.ComponentName);
|
|
17276
|
+
const fromTable = (0, combi_1.seq)("FROM", (0, combi_1.opt)("TABLE"), expressions_1.SQLSource, (0, combi_1.opt)(indicators));
|
|
17258
17277
|
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)));
|
|
17259
17278
|
return ret;
|
|
17260
17279
|
}
|
|
@@ -23123,7 +23142,7 @@ class BasicTypes {
|
|
|
23123
23142
|
}
|
|
23124
23143
|
parseTable(node, name) {
|
|
23125
23144
|
var _a, _b, _c, _d;
|
|
23126
|
-
const typename = node.findFirstExpression(Expressions.TypeName);
|
|
23145
|
+
const typename = node.findFirstExpression(Expressions.TypeName) || node.findFirstExpression(Expressions.EntityAssociation);
|
|
23127
23146
|
const text = (_a = node.findFirstExpression(Expressions.TypeTable)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
|
|
23128
23147
|
if (text === undefined) {
|
|
23129
23148
|
return undefined;
|
|
@@ -23259,6 +23278,8 @@ class BasicTypes {
|
|
|
23259
23278
|
return new Types.TableType(structure, options);
|
|
23260
23279
|
}
|
|
23261
23280
|
else if (typename && (text.startsWith("TYPE TABLE FOR CREATE ")
|
|
23281
|
+
|| text.startsWith("TYPE TABLE FOR READ ")
|
|
23282
|
+
|| text.startsWith("TYPE TABLE FOR DELETE ")
|
|
23262
23283
|
|| text.startsWith("TYPE TABLE FOR UPDATE "))) {
|
|
23263
23284
|
const name = typename.concatTokens();
|
|
23264
23285
|
const type = (_d = this.input.scope.getDDIC().lookupDDLS(name)) === null || _d === void 0 ? void 0 : _d.type;
|
|
@@ -28886,6 +28907,11 @@ class Append {
|
|
|
28886
28907
|
if (sourceType instanceof basic_1.TableType) {
|
|
28887
28908
|
sourceType = sourceType.getRowType();
|
|
28888
28909
|
}
|
|
28910
|
+
else if (!(sourceType instanceof basic_1.VoidType) && !(sourceType instanceof basic_1.UnknownType)) {
|
|
28911
|
+
const message = "LINES OF must be a table type";
|
|
28912
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
28913
|
+
return;
|
|
28914
|
+
}
|
|
28889
28915
|
if (targetType instanceof basic_1.TableType) {
|
|
28890
28916
|
targetType = targetType.getRowType();
|
|
28891
28917
|
}
|
|
@@ -35307,560 +35333,6 @@ exports.ArtifactsABAP = ArtifactsABAP;
|
|
|
35307
35333
|
|
|
35308
35334
|
/***/ }),
|
|
35309
35335
|
|
|
35310
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js":
|
|
35311
|
-
/*!***********************************************************************!*\
|
|
35312
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js ***!
|
|
35313
|
-
\***********************************************************************/
|
|
35314
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
35315
|
-
|
|
35316
|
-
"use strict";
|
|
35317
|
-
|
|
35318
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
35319
|
-
exports.FlowGraph = exports.FLOW_EDGE_TYPE = void 0;
|
|
35320
|
-
var FLOW_EDGE_TYPE;
|
|
35321
|
-
(function (FLOW_EDGE_TYPE) {
|
|
35322
|
-
FLOW_EDGE_TYPE["true"] = "true";
|
|
35323
|
-
FLOW_EDGE_TYPE["false"] = "false";
|
|
35324
|
-
FLOW_EDGE_TYPE["undefined"] = "undefined";
|
|
35325
|
-
})(FLOW_EDGE_TYPE || (exports.FLOW_EDGE_TYPE = FLOW_EDGE_TYPE = {}));
|
|
35326
|
-
class FlowGraph {
|
|
35327
|
-
constructor(counter) {
|
|
35328
|
-
this.edges = {};
|
|
35329
|
-
this.label = "undefined";
|
|
35330
|
-
this.startNode = "start#" + counter;
|
|
35331
|
-
this.endNode = "end#" + counter;
|
|
35332
|
-
}
|
|
35333
|
-
getStart() {
|
|
35334
|
-
return this.startNode;
|
|
35335
|
-
}
|
|
35336
|
-
getLabel() {
|
|
35337
|
-
return this.label;
|
|
35338
|
-
}
|
|
35339
|
-
getEnd() {
|
|
35340
|
-
return this.endNode;
|
|
35341
|
-
}
|
|
35342
|
-
addEdge(from, to, type) {
|
|
35343
|
-
if (this.edges[from] === undefined) {
|
|
35344
|
-
this.edges[from] = {};
|
|
35345
|
-
}
|
|
35346
|
-
this.edges[from][to] = type;
|
|
35347
|
-
}
|
|
35348
|
-
removeEdge(from, to) {
|
|
35349
|
-
if (this.edges[from] === undefined) {
|
|
35350
|
-
return;
|
|
35351
|
-
}
|
|
35352
|
-
delete this.edges[from][to];
|
|
35353
|
-
if (Object.keys(this.edges[from]).length === 0) {
|
|
35354
|
-
delete this.edges[from];
|
|
35355
|
-
}
|
|
35356
|
-
}
|
|
35357
|
-
listEdges() {
|
|
35358
|
-
const list = [];
|
|
35359
|
-
for (const from of Object.keys(this.edges)) {
|
|
35360
|
-
for (const to of Object.keys(this.edges[from])) {
|
|
35361
|
-
list.push({ from, to, type: this.edges[from][to] });
|
|
35362
|
-
}
|
|
35363
|
-
}
|
|
35364
|
-
return list;
|
|
35365
|
-
}
|
|
35366
|
-
listNodes() {
|
|
35367
|
-
const set = new Set();
|
|
35368
|
-
for (const l of this.listEdges()) {
|
|
35369
|
-
set.add(l.from);
|
|
35370
|
-
set.add(l.to);
|
|
35371
|
-
}
|
|
35372
|
-
return Array.from(set.values());
|
|
35373
|
-
}
|
|
35374
|
-
hasEdges() {
|
|
35375
|
-
return Object.keys(this.edges).length > 0;
|
|
35376
|
-
}
|
|
35377
|
-
/** return value: end node of to graph */
|
|
35378
|
-
addGraph(from, to, type) {
|
|
35379
|
-
if (to.hasEdges() === false) {
|
|
35380
|
-
return from;
|
|
35381
|
-
}
|
|
35382
|
-
this.addEdge(from, to.getStart(), type);
|
|
35383
|
-
to.listEdges().forEach(e => this.addEdge(e.from, e.to, e.type));
|
|
35384
|
-
return to.getEnd();
|
|
35385
|
-
}
|
|
35386
|
-
toJSON() {
|
|
35387
|
-
return JSON.stringify(this.edges);
|
|
35388
|
-
}
|
|
35389
|
-
toTextEdges() {
|
|
35390
|
-
let graph = "";
|
|
35391
|
-
for (const l of this.listEdges()) {
|
|
35392
|
-
const label = l.type === FLOW_EDGE_TYPE.undefined ? "" : ` [label="${l.type}"]`;
|
|
35393
|
-
graph += `"${l.from}" -> "${l.to}"${label};\n`;
|
|
35394
|
-
}
|
|
35395
|
-
return graph.trim();
|
|
35396
|
-
}
|
|
35397
|
-
setLabel(label) {
|
|
35398
|
-
this.label = label;
|
|
35399
|
-
}
|
|
35400
|
-
toDigraph() {
|
|
35401
|
-
return `digraph G {
|
|
35402
|
-
labelloc="t";
|
|
35403
|
-
label="${this.label}";
|
|
35404
|
-
graph [fontname = "helvetica"];
|
|
35405
|
-
node [fontname = "helvetica", shape="box"];
|
|
35406
|
-
edge [fontname = "helvetica"];
|
|
35407
|
-
${this.toTextEdges()}
|
|
35408
|
-
}`;
|
|
35409
|
-
}
|
|
35410
|
-
listSources(node) {
|
|
35411
|
-
const set = [];
|
|
35412
|
-
for (const l of this.listEdges()) {
|
|
35413
|
-
if (node === l.to) {
|
|
35414
|
-
set.push({ name: l.from, type: l.type });
|
|
35415
|
-
}
|
|
35416
|
-
}
|
|
35417
|
-
return set;
|
|
35418
|
-
}
|
|
35419
|
-
listTargets(node) {
|
|
35420
|
-
const set = [];
|
|
35421
|
-
for (const l of this.listEdges()) {
|
|
35422
|
-
if (node === l.from) {
|
|
35423
|
-
set.push({ name: l.to, type: l.type });
|
|
35424
|
-
}
|
|
35425
|
-
}
|
|
35426
|
-
return set;
|
|
35427
|
-
}
|
|
35428
|
-
/** removes all nodes containing "#" that have one in-going and one out-going edge */
|
|
35429
|
-
reduce() {
|
|
35430
|
-
for (const node of this.listNodes()) {
|
|
35431
|
-
if (node.includes("#") === false) {
|
|
35432
|
-
continue;
|
|
35433
|
-
}
|
|
35434
|
-
const sources = this.listSources(node);
|
|
35435
|
-
const targets = this.listTargets(node);
|
|
35436
|
-
if (sources.length > 0 && targets.length > 0) {
|
|
35437
|
-
// hash node in the middle of the graph
|
|
35438
|
-
for (const s of sources) {
|
|
35439
|
-
this.removeEdge(s.name, node);
|
|
35440
|
-
}
|
|
35441
|
-
for (const t of targets) {
|
|
35442
|
-
this.removeEdge(node, t.name);
|
|
35443
|
-
}
|
|
35444
|
-
for (const s of sources) {
|
|
35445
|
-
for (const t of targets) {
|
|
35446
|
-
let type = FLOW_EDGE_TYPE.undefined;
|
|
35447
|
-
if (s.type !== FLOW_EDGE_TYPE.undefined) {
|
|
35448
|
-
type = s.type;
|
|
35449
|
-
}
|
|
35450
|
-
if (t.type !== FLOW_EDGE_TYPE.undefined) {
|
|
35451
|
-
if (type !== FLOW_EDGE_TYPE.undefined) {
|
|
35452
|
-
throw new Error("reduce: cannot merge, different edge types");
|
|
35453
|
-
}
|
|
35454
|
-
type = t.type;
|
|
35455
|
-
}
|
|
35456
|
-
this.addEdge(s.name, t.name, type);
|
|
35457
|
-
}
|
|
35458
|
-
}
|
|
35459
|
-
}
|
|
35460
|
-
if (node.startsWith("end#") && sources.length === 0) {
|
|
35461
|
-
for (const t of targets) {
|
|
35462
|
-
this.removeEdge(node, t.name);
|
|
35463
|
-
}
|
|
35464
|
-
}
|
|
35465
|
-
}
|
|
35466
|
-
return this;
|
|
35467
|
-
}
|
|
35468
|
-
}
|
|
35469
|
-
exports.FlowGraph = FlowGraph;
|
|
35470
|
-
//# sourceMappingURL=flow_graph.js.map
|
|
35471
|
-
|
|
35472
|
-
/***/ }),
|
|
35473
|
-
|
|
35474
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js":
|
|
35475
|
-
/*!*****************************************************************************!*\
|
|
35476
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js ***!
|
|
35477
|
-
\*****************************************************************************/
|
|
35478
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
35479
|
-
|
|
35480
|
-
"use strict";
|
|
35481
|
-
|
|
35482
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
35483
|
-
exports.DECLARATION_STUFF = exports.SELECTION_EVENTS = void 0;
|
|
35484
|
-
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
35485
|
-
exports.SELECTION_EVENTS = [
|
|
35486
|
-
Statements.StartOfSelection,
|
|
35487
|
-
Statements.AtSelectionScreen,
|
|
35488
|
-
Statements.AtLineSelection,
|
|
35489
|
-
Statements.AtPF,
|
|
35490
|
-
Statements.AtUserCommand,
|
|
35491
|
-
Statements.EndOfSelection,
|
|
35492
|
-
Statements.Initialization,
|
|
35493
|
-
Statements.TopOfPage,
|
|
35494
|
-
Statements.LoadOfProgram,
|
|
35495
|
-
Statements.EndOfPage,
|
|
35496
|
-
];
|
|
35497
|
-
exports.DECLARATION_STUFF = [
|
|
35498
|
-
Statements.Data,
|
|
35499
|
-
Statements.DataBegin,
|
|
35500
|
-
Statements.Constant,
|
|
35501
|
-
Statements.Tables,
|
|
35502
|
-
Statements.Include, // this is not super correct, but anyhow
|
|
35503
|
-
Statements.Parameter,
|
|
35504
|
-
Statements.SelectionScreen,
|
|
35505
|
-
Statements.ConstantBegin,
|
|
35506
|
-
Statements.Define,
|
|
35507
|
-
];
|
|
35508
|
-
//# sourceMappingURL=selection_events.js.map
|
|
35509
|
-
|
|
35510
|
-
/***/ }),
|
|
35511
|
-
|
|
35512
|
-
/***/ "./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js":
|
|
35513
|
-
/*!***************************************************************************!*\
|
|
35514
|
-
!*** ./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js ***!
|
|
35515
|
-
\***************************************************************************/
|
|
35516
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
35517
|
-
|
|
35518
|
-
"use strict";
|
|
35519
|
-
|
|
35520
|
-
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
35521
|
-
exports.StatementFlow = void 0;
|
|
35522
|
-
const nodes_1 = __webpack_require__(/*! ../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
35523
|
-
const Structures = __webpack_require__(/*! ../3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
35524
|
-
const Statements = __webpack_require__(/*! ../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
35525
|
-
const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
35526
|
-
const flow_graph_1 = __webpack_require__(/*! ./flow_graph */ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js");
|
|
35527
|
-
const objects_1 = __webpack_require__(/*! ../../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
35528
|
-
const selection_events_1 = __webpack_require__(/*! ./selection_events */ "./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js");
|
|
35529
|
-
const virtual_position_1 = __webpack_require__(/*! ../../virtual_position */ "./node_modules/@abaplint/core/build/src/virtual_position.js");
|
|
35530
|
-
class StatementFlow {
|
|
35531
|
-
constructor() {
|
|
35532
|
-
this.counter = 0;
|
|
35533
|
-
}
|
|
35534
|
-
build(stru, obj) {
|
|
35535
|
-
var _a, _b, _c, _d;
|
|
35536
|
-
const ret = [];
|
|
35537
|
-
let name = "";
|
|
35538
|
-
const structures = stru.findAllStructuresMulti([
|
|
35539
|
-
Structures.Form, Structures.ClassImplementation, Structures.FunctionModule, Structures.Module
|
|
35540
|
-
]);
|
|
35541
|
-
for (const s of structures) {
|
|
35542
|
-
if (s.get() instanceof Structures.Form) {
|
|
35543
|
-
name = "FORM " + ((_a = s.findFirstExpression(Expressions.FormName)) === null || _a === void 0 ? void 0 : _a.concatTokens());
|
|
35544
|
-
ret.push(this.run(s, name));
|
|
35545
|
-
}
|
|
35546
|
-
else if (s.get() instanceof Structures.ClassImplementation) {
|
|
35547
|
-
const className = (_b = s.findFirstExpression(Expressions.ClassName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
|
|
35548
|
-
for (const method of s.findDirectStructures(Structures.Method)) {
|
|
35549
|
-
const methodName = (_c = method.findFirstExpression(Expressions.MethodName)) === null || _c === void 0 ? void 0 : _c.concatTokens();
|
|
35550
|
-
name = "METHOD " + methodName + ", CLASS " + className;
|
|
35551
|
-
ret.push(this.run(method, name));
|
|
35552
|
-
}
|
|
35553
|
-
}
|
|
35554
|
-
else if (s.get() instanceof Structures.FunctionModule) {
|
|
35555
|
-
name = "FUNCTION " + ((_d = s.findFirstExpression(Expressions.Field)) === null || _d === void 0 ? void 0 : _d.concatTokens());
|
|
35556
|
-
ret.push(this.run(s, name));
|
|
35557
|
-
}
|
|
35558
|
-
else if (s.get() instanceof Structures.Module) {
|
|
35559
|
-
name = s.getFirstStatement().concatTokens().toUpperCase();
|
|
35560
|
-
ret.push(this.run(s, name));
|
|
35561
|
-
}
|
|
35562
|
-
else {
|
|
35563
|
-
throw new Error("StatementFlow, unknown structure");
|
|
35564
|
-
}
|
|
35565
|
-
}
|
|
35566
|
-
if (obj instanceof objects_1.Program || obj instanceof objects_1.FunctionGroup) {
|
|
35567
|
-
// find the top level events
|
|
35568
|
-
let inEvent = false;
|
|
35569
|
-
let collected = [];
|
|
35570
|
-
for (const s of stru.getChildren() || []) {
|
|
35571
|
-
if (selection_events_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
35572
|
-
if (inEvent === true) {
|
|
35573
|
-
ret.push(this.runEvent(collected, name));
|
|
35574
|
-
}
|
|
35575
|
-
collected = [];
|
|
35576
|
-
inEvent = true;
|
|
35577
|
-
name = s.concatTokens();
|
|
35578
|
-
}
|
|
35579
|
-
else if (s.get() instanceof Structures.Normal) {
|
|
35580
|
-
collected.push(s);
|
|
35581
|
-
}
|
|
35582
|
-
else {
|
|
35583
|
-
if (inEvent === true) {
|
|
35584
|
-
ret.push(this.runEvent(collected, name));
|
|
35585
|
-
inEvent = false;
|
|
35586
|
-
}
|
|
35587
|
-
collected = [];
|
|
35588
|
-
}
|
|
35589
|
-
}
|
|
35590
|
-
if (inEvent === true) {
|
|
35591
|
-
ret.push(this.runEvent(collected, name));
|
|
35592
|
-
}
|
|
35593
|
-
else if (collected.length > 0
|
|
35594
|
-
&& !(obj instanceof objects_1.FunctionGroup)) {
|
|
35595
|
-
// implicit START-OF-SELECTION
|
|
35596
|
-
ret.push(this.runEvent(collected, "START-OF-SELECTION."));
|
|
35597
|
-
}
|
|
35598
|
-
}
|
|
35599
|
-
return ret.map(f => f.reduce());
|
|
35600
|
-
}
|
|
35601
|
-
////////////////////
|
|
35602
|
-
runEvent(s, name) {
|
|
35603
|
-
this.counter = 1;
|
|
35604
|
-
const graph = this.traverseBody(s, { procedureEnd: "end#1" });
|
|
35605
|
-
graph.setLabel(name);
|
|
35606
|
-
return graph;
|
|
35607
|
-
}
|
|
35608
|
-
run(s, name) {
|
|
35609
|
-
this.counter = 1;
|
|
35610
|
-
const graph = this.traverseBody(this.findBody(s), { procedureEnd: "end#1" });
|
|
35611
|
-
graph.setLabel(name);
|
|
35612
|
-
return graph;
|
|
35613
|
-
}
|
|
35614
|
-
findBody(f) {
|
|
35615
|
-
var _a;
|
|
35616
|
-
return ((_a = f.findDirectStructure(Structures.Body)) === null || _a === void 0 ? void 0 : _a.getChildren()) || [];
|
|
35617
|
-
}
|
|
35618
|
-
// note: it must handle macros and chained statements
|
|
35619
|
-
static buildName(statement) {
|
|
35620
|
-
let token = undefined;
|
|
35621
|
-
const colon = statement.getColon();
|
|
35622
|
-
if (colon === undefined) {
|
|
35623
|
-
token = statement.getFirstToken();
|
|
35624
|
-
}
|
|
35625
|
-
else {
|
|
35626
|
-
for (const t of statement.getTokens()) {
|
|
35627
|
-
if (t.getStart().isAfter(colon.getEnd())) {
|
|
35628
|
-
token = t;
|
|
35629
|
-
break;
|
|
35630
|
-
}
|
|
35631
|
-
}
|
|
35632
|
-
}
|
|
35633
|
-
let extra = "";
|
|
35634
|
-
const tStart = token === null || token === void 0 ? void 0 : token.getStart();
|
|
35635
|
-
if (tStart instanceof virtual_position_1.VirtualPosition) {
|
|
35636
|
-
extra += "$" + tStart.vrow;
|
|
35637
|
-
extra += "," + tStart.vcol;
|
|
35638
|
-
}
|
|
35639
|
-
if (token === undefined) {
|
|
35640
|
-
return "tokenError";
|
|
35641
|
-
}
|
|
35642
|
-
return statement.get().constructor.name +
|
|
35643
|
-
":" + token.getRow() +
|
|
35644
|
-
"," + token.getCol() + extra;
|
|
35645
|
-
}
|
|
35646
|
-
traverseBody(children, context) {
|
|
35647
|
-
const graph = new flow_graph_1.FlowGraph(this.counter++);
|
|
35648
|
-
if (children.length === 0) {
|
|
35649
|
-
graph.addEdge(graph.getStart(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35650
|
-
return graph;
|
|
35651
|
-
}
|
|
35652
|
-
let current = graph.getStart();
|
|
35653
|
-
for (const c of children) {
|
|
35654
|
-
if (c.get() instanceof Structures.Normal) {
|
|
35655
|
-
const firstChild = c.getFirstChild(); // "Normal" only has one child
|
|
35656
|
-
if (firstChild instanceof nodes_1.StatementNode) {
|
|
35657
|
-
const name = StatementFlow.buildName(firstChild);
|
|
35658
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35659
|
-
current = name;
|
|
35660
|
-
if (firstChild.get() instanceof Statements.Check) {
|
|
35661
|
-
if (context.loopStart) {
|
|
35662
|
-
graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35663
|
-
}
|
|
35664
|
-
else {
|
|
35665
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35666
|
-
}
|
|
35667
|
-
}
|
|
35668
|
-
else if (firstChild.get() instanceof Statements.Assert) {
|
|
35669
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35670
|
-
}
|
|
35671
|
-
else if (firstChild.get() instanceof Statements.Continue && context.loopStart) {
|
|
35672
|
-
graph.addEdge(name, context.loopStart, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35673
|
-
return graph;
|
|
35674
|
-
}
|
|
35675
|
-
else if (firstChild.get() instanceof Statements.Exit) {
|
|
35676
|
-
if (context.loopEnd) {
|
|
35677
|
-
graph.addEdge(name, context.loopEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35678
|
-
}
|
|
35679
|
-
else {
|
|
35680
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35681
|
-
}
|
|
35682
|
-
return graph;
|
|
35683
|
-
}
|
|
35684
|
-
else if (firstChild.get() instanceof Statements.Return) {
|
|
35685
|
-
graph.addEdge(name, context.procedureEnd, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35686
|
-
return graph;
|
|
35687
|
-
}
|
|
35688
|
-
}
|
|
35689
|
-
else if (firstChild instanceof nodes_1.StructureNode) {
|
|
35690
|
-
const sub = this.traverseStructure(firstChild, context);
|
|
35691
|
-
current = graph.addGraph(current, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35692
|
-
}
|
|
35693
|
-
}
|
|
35694
|
-
}
|
|
35695
|
-
graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35696
|
-
return graph;
|
|
35697
|
-
}
|
|
35698
|
-
traverseStructure(n, context) {
|
|
35699
|
-
const graph = new flow_graph_1.FlowGraph(this.counter++);
|
|
35700
|
-
if (n === undefined) {
|
|
35701
|
-
return graph;
|
|
35702
|
-
}
|
|
35703
|
-
let current = graph.getStart();
|
|
35704
|
-
const type = n.get();
|
|
35705
|
-
if (type instanceof Structures.If) {
|
|
35706
|
-
const ifName = StatementFlow.buildName(n.findDirectStatement(Statements.If));
|
|
35707
|
-
const sub = this.traverseBody(this.findBody(n), context);
|
|
35708
|
-
graph.addEdge(current, ifName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35709
|
-
graph.addGraph(ifName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
35710
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35711
|
-
current = ifName;
|
|
35712
|
-
for (const e of n.findDirectStructures(Structures.ElseIf)) {
|
|
35713
|
-
const elseifst = e.findDirectStatement(Statements.ElseIf);
|
|
35714
|
-
if (elseifst === undefined) {
|
|
35715
|
-
continue;
|
|
35716
|
-
}
|
|
35717
|
-
const elseIfName = StatementFlow.buildName(elseifst);
|
|
35718
|
-
const sub = this.traverseBody(this.findBody(e), context);
|
|
35719
|
-
graph.addEdge(current, elseIfName, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35720
|
-
graph.addGraph(elseIfName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
35721
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35722
|
-
current = elseIfName;
|
|
35723
|
-
}
|
|
35724
|
-
const els = n.findDirectStructure(Structures.Else);
|
|
35725
|
-
const elsest = els === null || els === void 0 ? void 0 : els.findDirectStatement(Statements.Else);
|
|
35726
|
-
if (els && elsest) {
|
|
35727
|
-
const elseName = StatementFlow.buildName(elsest);
|
|
35728
|
-
const sub = this.traverseBody(this.findBody(els), context);
|
|
35729
|
-
graph.addEdge(current, elseName, flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35730
|
-
graph.addGraph(elseName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35731
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35732
|
-
}
|
|
35733
|
-
else {
|
|
35734
|
-
graph.addEdge(ifName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35735
|
-
}
|
|
35736
|
-
}
|
|
35737
|
-
else if (type instanceof Structures.Loop
|
|
35738
|
-
|| type instanceof Structures.While
|
|
35739
|
-
|| type instanceof Structures.With
|
|
35740
|
-
|| type instanceof Structures.Provide
|
|
35741
|
-
|| type instanceof Structures.Select
|
|
35742
|
-
|| type instanceof Structures.EnhancementSection
|
|
35743
|
-
|| type instanceof Structures.LoopAtScreen
|
|
35744
|
-
|| type instanceof Structures.Do) {
|
|
35745
|
-
const loopName = StatementFlow.buildName(n.getFirstStatement());
|
|
35746
|
-
const sub = this.traverseBody(this.findBody(n), Object.assign(Object.assign({}, context), { loopStart: loopName, loopEnd: graph.getEnd() }));
|
|
35747
|
-
graph.addEdge(current, loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35748
|
-
graph.addGraph(loopName, sub, flow_graph_1.FLOW_EDGE_TYPE.true);
|
|
35749
|
-
graph.addEdge(sub.getEnd(), loopName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35750
|
-
graph.addEdge(loopName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.false);
|
|
35751
|
-
}
|
|
35752
|
-
else if (type instanceof Structures.Data
|
|
35753
|
-
|| type instanceof Structures.Constants
|
|
35754
|
-
|| type instanceof Structures.Statics
|
|
35755
|
-
|| type instanceof Structures.ExecSQL
|
|
35756
|
-
|| type instanceof Structures.Types) {
|
|
35757
|
-
// these doesnt affect control flow, so just take the first statement
|
|
35758
|
-
const statement = n.getFirstStatement();
|
|
35759
|
-
const name = StatementFlow.buildName(statement);
|
|
35760
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35761
|
-
graph.addEdge(name, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35762
|
-
}
|
|
35763
|
-
else if (type instanceof Structures.TestSeam) {
|
|
35764
|
-
const name = StatementFlow.buildName(n.getFirstStatement());
|
|
35765
|
-
const sub = this.traverseBody(this.findBody(n), context);
|
|
35766
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35767
|
-
graph.addGraph(name, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35768
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35769
|
-
}
|
|
35770
|
-
else if (type instanceof Structures.AtFirst
|
|
35771
|
-
|| type instanceof Structures.AtLast
|
|
35772
|
-
|| type instanceof Structures.At
|
|
35773
|
-
|| type instanceof Structures.OnChange) {
|
|
35774
|
-
const name = StatementFlow.buildName(n.getFirstStatement());
|
|
35775
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
35776
|
-
graph.addEdge(current, name, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35777
|
-
graph.addGraph(name, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35778
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35779
|
-
graph.addEdge(current, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35780
|
-
}
|
|
35781
|
-
else if (type instanceof Structures.Try) {
|
|
35782
|
-
const tryName = StatementFlow.buildName(n.getFirstStatement());
|
|
35783
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
35784
|
-
graph.addEdge(current, tryName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35785
|
-
graph.addGraph(tryName, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35786
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35787
|
-
for (const c of n.findDirectStructures(Structures.Catch)) {
|
|
35788
|
-
const catchName = StatementFlow.buildName(c.getFirstStatement());
|
|
35789
|
-
const catchBody = this.traverseBody(this.findBody(c), context);
|
|
35790
|
-
// TODO: this does not take exceptions into account
|
|
35791
|
-
graph.addEdge(body.getEnd(), catchName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35792
|
-
graph.addGraph(catchName, catchBody, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35793
|
-
graph.addEdge(catchBody.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35794
|
-
}
|
|
35795
|
-
// TODO, handle CLEANUP
|
|
35796
|
-
}
|
|
35797
|
-
else if (type instanceof Structures.CatchSystemExceptions) {
|
|
35798
|
-
// TODO: this is not completely correct
|
|
35799
|
-
const catchName = StatementFlow.buildName(n.getFirstStatement());
|
|
35800
|
-
const body = this.traverseBody(this.findBody(n), context);
|
|
35801
|
-
graph.addEdge(current, catchName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35802
|
-
graph.addGraph(catchName, body, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35803
|
-
graph.addEdge(body.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35804
|
-
}
|
|
35805
|
-
else if (type instanceof Structures.Case) {
|
|
35806
|
-
const caseName = StatementFlow.buildName(n.getFirstStatement());
|
|
35807
|
-
graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35808
|
-
let othersFound = false;
|
|
35809
|
-
for (const w of n.findDirectStructures(Structures.When)) {
|
|
35810
|
-
const first = w.getFirstStatement();
|
|
35811
|
-
if (first === undefined) {
|
|
35812
|
-
continue;
|
|
35813
|
-
}
|
|
35814
|
-
if (first.get() instanceof Statements.WhenOthers) {
|
|
35815
|
-
othersFound = true;
|
|
35816
|
-
}
|
|
35817
|
-
const firstName = StatementFlow.buildName(first);
|
|
35818
|
-
const sub = this.traverseBody(this.findBody(w), context);
|
|
35819
|
-
graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35820
|
-
graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35821
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35822
|
-
}
|
|
35823
|
-
if (othersFound === false) {
|
|
35824
|
-
graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35825
|
-
}
|
|
35826
|
-
}
|
|
35827
|
-
else if (type instanceof Structures.CaseType) {
|
|
35828
|
-
const caseName = StatementFlow.buildName(n.getFirstStatement());
|
|
35829
|
-
graph.addEdge(current, caseName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35830
|
-
let othersFound = false;
|
|
35831
|
-
for (const w of n.findDirectStructures(Structures.WhenType)) {
|
|
35832
|
-
const first = w.getFirstStatement();
|
|
35833
|
-
if (first === undefined) {
|
|
35834
|
-
continue;
|
|
35835
|
-
}
|
|
35836
|
-
if (first.get() instanceof Statements.WhenOthers) {
|
|
35837
|
-
othersFound = true;
|
|
35838
|
-
}
|
|
35839
|
-
const firstName = StatementFlow.buildName(first);
|
|
35840
|
-
const sub = this.traverseBody(this.findBody(w), context);
|
|
35841
|
-
graph.addEdge(caseName, firstName, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35842
|
-
graph.addGraph(firstName, sub, flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35843
|
-
graph.addEdge(sub.getEnd(), graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35844
|
-
}
|
|
35845
|
-
if (othersFound === false) {
|
|
35846
|
-
graph.addEdge(caseName, graph.getEnd(), flow_graph_1.FLOW_EDGE_TYPE.undefined);
|
|
35847
|
-
}
|
|
35848
|
-
}
|
|
35849
|
-
else if (type instanceof Structures.Define
|
|
35850
|
-
|| type instanceof Structures.TestInjection) {
|
|
35851
|
-
// do nothing
|
|
35852
|
-
}
|
|
35853
|
-
else {
|
|
35854
|
-
console.dir("StatementFlow,todo, " + n.get().constructor.name);
|
|
35855
|
-
}
|
|
35856
|
-
return graph;
|
|
35857
|
-
}
|
|
35858
|
-
}
|
|
35859
|
-
exports.StatementFlow = StatementFlow;
|
|
35860
|
-
//# sourceMappingURL=statement_flow.js.map
|
|
35861
|
-
|
|
35862
|
-
/***/ }),
|
|
35863
|
-
|
|
35864
35336
|
/***/ "./node_modules/@abaplint/core/build/src/abap/nodes/_abstract_node.js":
|
|
35865
35337
|
/*!****************************************************************************!*\
|
|
35866
35338
|
!*** ./node_modules/@abaplint/core/build/src/abap/nodes/_abstract_node.js ***!
|
|
@@ -39852,6 +39324,8 @@ class MethodParameters {
|
|
|
39852
39324
|
|| concat.includes(" FOR FEATURES ")
|
|
39853
39325
|
|| concat.includes(" FOR INSTANCE FEATURES ")
|
|
39854
39326
|
|| concat.includes(" FOR READ ")
|
|
39327
|
+
|| concat.includes(" FOR VALIDATION ")
|
|
39328
|
+
|| concat.includes(" FOR DETERMINE ")
|
|
39855
39329
|
|| concat.includes(" FOR LOCK ")
|
|
39856
39330
|
|| concat.includes(" FOR MODIFY ")) {
|
|
39857
39331
|
const token = isRap.getFirstToken();
|
|
@@ -40367,7 +39841,7 @@ const _1 = __webpack_require__(/*! . */ "./node_modules/@abaplint/core/build/src
|
|
|
40367
39841
|
const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
40368
39842
|
class CDSAggregate extends combi_1.Expression {
|
|
40369
39843
|
getRunnable() {
|
|
40370
|
-
const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.
|
|
39844
|
+
const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.star)((0, combi_1.seq)(".", _1.CDSName)));
|
|
40371
39845
|
const value = (0, combi_1.alt)(name, "*", _1.CDSCast, _1.CDSCase, _1.CDSFunction);
|
|
40372
39846
|
return (0, combi_1.seq)((0, combi_1.alt)("MAX", "MIN", "SUM", "AVG", "COUNT"), "(", (0, combi_1.opt)("DISTINCT"), value, ")");
|
|
40373
39847
|
}
|
|
@@ -40585,8 +40059,10 @@ exports.CDSCardinality = void 0;
|
|
|
40585
40059
|
const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
40586
40060
|
class CDSCardinality extends combi_1.Expression {
|
|
40587
40061
|
getRunnable() {
|
|
40588
|
-
const
|
|
40589
|
-
|
|
40062
|
+
const numeric = (0, combi_1.seq)("[", (0, combi_1.alt)("0", "1", "*"), (0, combi_1.opt)((0, combi_1.seq)(".", ".", (0, combi_1.alt)("0", "1", "*"))), "]");
|
|
40063
|
+
const num = (0, combi_1.alt)("ONE", "MANY");
|
|
40064
|
+
const text = (0, combi_1.seq)("OF", num, "TO", num);
|
|
40065
|
+
return (0, combi_1.alt)(numeric, text);
|
|
40590
40066
|
}
|
|
40591
40067
|
}
|
|
40592
40068
|
exports.CDSCardinality = CDSCardinality;
|
|
@@ -40740,7 +40216,7 @@ class CDSDefineCustom extends combi_1.Expression {
|
|
|
40740
40216
|
getRunnable() {
|
|
40741
40217
|
const field = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.str)("KEY")), cds_name_1.CDSName, ":", cds_type_1.CDSType, ";");
|
|
40742
40218
|
const compsiOrAssoci = (0, combi_1.seq)(cds_name_1.CDSName, ":", (0, combi_1.alt)(_1.CDSComposition, _1.CDSAssociation), ";");
|
|
40743
|
-
return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("DEFINE"), (0, combi_1.opt)((0, combi_1.str)("ROOT")), (0, combi_1.str)("CUSTOM ENTITY"), cds_name_1.CDSName, (0, combi_1.str)("{"), (0, combi_1.plus)((0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.alt)(field, compsiOrAssoci))), (0, combi_1.str)("}"), (0, combi_1.opt)(";"));
|
|
40219
|
+
return (0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.str)("DEFINE"), (0, combi_1.opt)((0, combi_1.str)("ROOT")), (0, combi_1.str)("CUSTOM ENTITY"), (0, combi_1.opt)(_1.CDSWithParameters), cds_name_1.CDSName, (0, combi_1.str)("{"), (0, combi_1.plus)((0, combi_1.seq)((0, combi_1.star)(_1.CDSAnnotation), (0, combi_1.alt)(field, compsiOrAssoci))), (0, combi_1.str)("}"), (0, combi_1.opt)(";"));
|
|
40744
40220
|
}
|
|
40745
40221
|
}
|
|
40746
40222
|
exports.CDSDefineCustom = CDSDefineCustom;
|
|
@@ -41136,9 +40612,10 @@ exports.CDSPrefixedName = void 0;
|
|
|
41136
40612
|
const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
41137
40613
|
const cds_name_1 = __webpack_require__(/*! ./cds_name */ "./node_modules/@abaplint/core/build/src/cds/expressions/cds_name.js");
|
|
41138
40614
|
const cds_parameters_1 = __webpack_require__(/*! ./cds_parameters */ "./node_modules/@abaplint/core/build/src/cds/expressions/cds_parameters.js");
|
|
40615
|
+
const cds_parameters_select_1 = __webpack_require__(/*! ./cds_parameters_select */ "./node_modules/@abaplint/core/build/src/cds/expressions/cds_parameters_select.js");
|
|
41139
40616
|
class CDSPrefixedName extends combi_1.Expression {
|
|
41140
40617
|
getRunnable() {
|
|
41141
|
-
return (0, combi_1.seq)(cds_name_1.CDSName, (0, combi_1.opt)(cds_parameters_1.CDSParameters), (0, combi_1.star)((0, combi_1.seq)(".", cds_name_1.CDSName, (0, combi_1.opt)(cds_parameters_1.CDSParameters))));
|
|
40618
|
+
return (0, combi_1.seq)(cds_name_1.CDSName, (0, combi_1.opt)((0, combi_1.alt)(cds_parameters_1.CDSParameters, cds_parameters_select_1.CDSParametersSelect)), (0, combi_1.star)((0, combi_1.seq)(".", cds_name_1.CDSName, (0, combi_1.opt)(cds_parameters_1.CDSParameters))));
|
|
41142
40619
|
}
|
|
41143
40620
|
}
|
|
41144
40621
|
exports.CDSPrefixedName = CDSPrefixedName;
|
|
@@ -44569,7 +44046,6 @@ const code_actions_1 = __webpack_require__(/*! ./code_actions */ "./node_modules
|
|
|
44569
44046
|
const references_1 = __webpack_require__(/*! ./references */ "./node_modules/@abaplint/core/build/src/lsp/references.js");
|
|
44570
44047
|
const implementation_1 = __webpack_require__(/*! ./implementation */ "./node_modules/@abaplint/core/build/src/lsp/implementation.js");
|
|
44571
44048
|
const semantic_1 = __webpack_require__(/*! ./semantic */ "./node_modules/@abaplint/core/build/src/lsp/semantic.js");
|
|
44572
|
-
const statement_flow_1 = __webpack_require__(/*! ../abap/flow/statement_flow */ "./node_modules/@abaplint/core/build/src/abap/flow/statement_flow.js");
|
|
44573
44049
|
const code_lens_1 = __webpack_require__(/*! ./code_lens */ "./node_modules/@abaplint/core/build/src/lsp/code_lens.js");
|
|
44574
44050
|
const inlay_hints_1 = __webpack_require__(/*! ./inlay_hints */ "./node_modules/@abaplint/core/build/src/lsp/inlay_hints.js");
|
|
44575
44051
|
// note Ranges are zero based in LSP,
|
|
@@ -44681,23 +44157,6 @@ class LanguageServer {
|
|
|
44681
44157
|
listWritePositions(textDocument) {
|
|
44682
44158
|
return new highlight_1.Highlight(this.reg).listWritePositions(textDocument);
|
|
44683
44159
|
}
|
|
44684
|
-
dumpStatementFlows(textDocument) {
|
|
44685
|
-
const file = _lsp_utils_1.LSPUtils.getABAPFile(this.reg, textDocument.uri);
|
|
44686
|
-
if (file === undefined) {
|
|
44687
|
-
return "file not found";
|
|
44688
|
-
}
|
|
44689
|
-
const obj = this.reg.findObjectForFile(file);
|
|
44690
|
-
if (obj === undefined) {
|
|
44691
|
-
return "obj not found";
|
|
44692
|
-
}
|
|
44693
|
-
const stru = file.getStructure();
|
|
44694
|
-
if (stru === undefined) {
|
|
44695
|
-
return "empty structure";
|
|
44696
|
-
}
|
|
44697
|
-
const graphs = new statement_flow_1.StatementFlow().build(stru, obj);
|
|
44698
|
-
const wiz = graphs.map(g => g.toDigraph());
|
|
44699
|
-
return JSON.stringify(wiz);
|
|
44700
|
-
}
|
|
44701
44160
|
}
|
|
44702
44161
|
exports.LanguageServer = LanguageServer;
|
|
44703
44162
|
//# sourceMappingURL=language_server.js.map
|
|
@@ -46654,6 +46113,37 @@ exports.BusinessObjectType = BusinessObjectType;
|
|
|
46654
46113
|
|
|
46655
46114
|
/***/ }),
|
|
46656
46115
|
|
|
46116
|
+
/***/ "./node_modules/@abaplint/core/build/src/objects/cds_entity_buffer.js":
|
|
46117
|
+
/*!****************************************************************************!*\
|
|
46118
|
+
!*** ./node_modules/@abaplint/core/build/src/objects/cds_entity_buffer.js ***!
|
|
46119
|
+
\****************************************************************************/
|
|
46120
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
46121
|
+
|
|
46122
|
+
"use strict";
|
|
46123
|
+
|
|
46124
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
46125
|
+
exports.CDSEntityBuffer = void 0;
|
|
46126
|
+
const _abstract_object_1 = __webpack_require__(/*! ./_abstract_object */ "./node_modules/@abaplint/core/build/src/objects/_abstract_object.js");
|
|
46127
|
+
class CDSEntityBuffer extends _abstract_object_1.AbstractObject {
|
|
46128
|
+
getType() {
|
|
46129
|
+
return "DTEB";
|
|
46130
|
+
}
|
|
46131
|
+
getAllowedNaming() {
|
|
46132
|
+
return {
|
|
46133
|
+
maxLength: 30,
|
|
46134
|
+
allowNamespace: true,
|
|
46135
|
+
};
|
|
46136
|
+
}
|
|
46137
|
+
getDescription() {
|
|
46138
|
+
// todo
|
|
46139
|
+
return undefined;
|
|
46140
|
+
}
|
|
46141
|
+
}
|
|
46142
|
+
exports.CDSEntityBuffer = CDSEntityBuffer;
|
|
46143
|
+
//# sourceMappingURL=cds_entity_buffer.js.map
|
|
46144
|
+
|
|
46145
|
+
/***/ }),
|
|
46146
|
+
|
|
46657
46147
|
/***/ "./node_modules/@abaplint/core/build/src/objects/cds_metadata_extension.js":
|
|
46658
46148
|
/*!*********************************************************************************!*\
|
|
46659
46149
|
!*** ./node_modules/@abaplint/core/build/src/objects/cds_metadata_extension.js ***!
|
|
@@ -49194,6 +48684,7 @@ __exportStar(__webpack_require__(/*! ./behavior_definition */ "./node_modules/@a
|
|
|
49194
48684
|
__exportStar(__webpack_require__(/*! ./brf_plus_system_application */ "./node_modules/@abaplint/core/build/src/objects/brf_plus_system_application.js"), exports);
|
|
49195
48685
|
__exportStar(__webpack_require__(/*! ./bsp_application */ "./node_modules/@abaplint/core/build/src/objects/bsp_application.js"), exports);
|
|
49196
48686
|
__exportStar(__webpack_require__(/*! ./business_add_in_implementation */ "./node_modules/@abaplint/core/build/src/objects/business_add_in_implementation.js"), exports);
|
|
48687
|
+
__exportStar(__webpack_require__(/*! ./cds_entity_buffer */ "./node_modules/@abaplint/core/build/src/objects/cds_entity_buffer.js"), exports);
|
|
49197
48688
|
__exportStar(__webpack_require__(/*! ./business_catalog_app_assignment */ "./node_modules/@abaplint/core/build/src/objects/business_catalog_app_assignment.js"), exports);
|
|
49198
48689
|
__exportStar(__webpack_require__(/*! ./business_catalog */ "./node_modules/@abaplint/core/build/src/objects/business_catalog.js"), exports);
|
|
49199
48690
|
__exportStar(__webpack_require__(/*! ./business_configuration_maintenance_object */ "./node_modules/@abaplint/core/build/src/objects/business_configuration_maintenance_object.js"), exports);
|
|
@@ -52284,7 +51775,7 @@ class Table extends _abstract_object_1.AbstractObject {
|
|
|
52284
51775
|
}
|
|
52285
51776
|
getAllowedNaming() {
|
|
52286
51777
|
let length = 30;
|
|
52287
|
-
const regex = /^((\/[A-Z_\d]{3,8}\/)|[a-zA-Z0-9]{3})\w+$/;
|
|
51778
|
+
const regex = /^((\/[A-Z_\d]{3,8}\/)|[a-zA-Z0-9]{3}|CI_)\w+$/;
|
|
52288
51779
|
if (this.getTableCategory() === TableCategory.Transparent) {
|
|
52289
51780
|
length = 16;
|
|
52290
51781
|
}
|
|
@@ -52589,6 +52080,11 @@ class TableType extends _abstract_object_1.AbstractObject {
|
|
|
52589
52080
|
this.parseXML();
|
|
52590
52081
|
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.ddtext;
|
|
52591
52082
|
}
|
|
52083
|
+
getRowType() {
|
|
52084
|
+
var _a;
|
|
52085
|
+
this.parseXML();
|
|
52086
|
+
return (_a = this.parsedXML) === null || _a === void 0 ? void 0 : _a.rowtype;
|
|
52087
|
+
}
|
|
52592
52088
|
setDirty() {
|
|
52593
52089
|
this.parsedXML = undefined;
|
|
52594
52090
|
super.setDirty();
|
|
@@ -53893,7 +53389,7 @@ class Registry {
|
|
|
53893
53389
|
}
|
|
53894
53390
|
static abaplintVersion() {
|
|
53895
53391
|
// magic, see build script "version.sh"
|
|
53896
|
-
return "2.113.
|
|
53392
|
+
return "2.113.210";
|
|
53897
53393
|
}
|
|
53898
53394
|
getDDICReferences() {
|
|
53899
53395
|
return this.ddicReferences;
|
|
@@ -56597,6 +56093,7 @@ class CheckCommentsConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
|
56597
56093
|
super(...arguments);
|
|
56598
56094
|
/** Allows the use of end-of-line comments. */
|
|
56599
56095
|
this.allowEndOfLine = false;
|
|
56096
|
+
this.maxIssuesPerFile = 10;
|
|
56600
56097
|
}
|
|
56601
56098
|
}
|
|
56602
56099
|
exports.CheckCommentsConf = CheckCommentsConf;
|
|
@@ -56642,6 +56139,10 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#put-comment
|
|
|
56642
56139
|
if (this.conf.allowEndOfLine === true) {
|
|
56643
56140
|
return [];
|
|
56644
56141
|
}
|
|
56142
|
+
let max = this.getConfig().maxIssuesPerFile;
|
|
56143
|
+
if (max === undefined || max < 1) {
|
|
56144
|
+
max = 10;
|
|
56145
|
+
}
|
|
56645
56146
|
const commentRows = [];
|
|
56646
56147
|
for (let i = 0; i < rows.length; i++) {
|
|
56647
56148
|
const row = rows[i];
|
|
@@ -56658,6 +56159,9 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#put-comment
|
|
|
56658
56159
|
continue;
|
|
56659
56160
|
}
|
|
56660
56161
|
issues.push(issue_1.Issue.atStatement(file, statement, this.getDescription(IssueType.EndOfLine), this.getMetadata().key, this.conf.severity));
|
|
56162
|
+
if (issues.length >= max) {
|
|
56163
|
+
break;
|
|
56164
|
+
}
|
|
56661
56165
|
}
|
|
56662
56166
|
}
|
|
56663
56167
|
return issues;
|
|
@@ -57546,9 +57050,13 @@ class CloudTypes {
|
|
|
57546
57050
|
|| obj instanceof Objects.BusinessCatalogAppAssignment
|
|
57547
57051
|
|| obj instanceof Objects.CDSMetadataExtension
|
|
57548
57052
|
|| obj instanceof Objects.Class
|
|
57053
|
+
|| obj instanceof Objects.CDSType
|
|
57054
|
+
|| obj instanceof Objects.ChangeDocument
|
|
57055
|
+
|| obj instanceof Objects.CDSEntityBuffer
|
|
57549
57056
|
|| obj instanceof Objects.ApplicationLogObject
|
|
57550
57057
|
|| obj instanceof Objects.CommunicationScenario
|
|
57551
57058
|
|| obj instanceof Objects.DataControl
|
|
57059
|
+
|| obj instanceof Objects.KnowledgeTransferDocument
|
|
57552
57060
|
|| obj instanceof Objects.DataDefinition
|
|
57553
57061
|
|| obj instanceof Objects.DataElement
|
|
57554
57062
|
|| obj instanceof Objects.Domain
|
|
@@ -62201,7 +61709,7 @@ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./
|
|
|
62201
61709
|
const Structures = __webpack_require__(/*! ../abap/3_structures/structures */ "./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js");
|
|
62202
61710
|
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
62203
61711
|
const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
62204
|
-
const
|
|
61712
|
+
const stuff_1 = __webpack_require__(/*! ../stuff */ "./node_modules/@abaplint/core/build/src/stuff.js");
|
|
62205
61713
|
class EmptyEventConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
62206
61714
|
}
|
|
62207
61715
|
exports.EmptyEventConf = EmptyEventConf;
|
|
@@ -62245,7 +61753,7 @@ START-OF-SELECTION.
|
|
|
62245
61753
|
let currentEvent = undefined;
|
|
62246
61754
|
let children = [];
|
|
62247
61755
|
for (const s of stru.getChildren() || []) {
|
|
62248
|
-
if (
|
|
61756
|
+
if (stuff_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
62249
61757
|
if (currentEvent !== undefined && children.length === 0) {
|
|
62250
61758
|
issues.push(issue_1.Issue.atStatement(file, currentEvent, "Empty event", this.getMetadata().key, this.getConfig().severity));
|
|
62251
61759
|
}
|
|
@@ -62255,7 +61763,7 @@ START-OF-SELECTION.
|
|
|
62255
61763
|
else if (s.get() instanceof Structures.Normal) {
|
|
62256
61764
|
const stru = s;
|
|
62257
61765
|
// ignore declaration stuff
|
|
62258
|
-
if (
|
|
61766
|
+
if (stuff_1.DECLARATION_STUFF.some(d => { var _a; return ((_a = stru.getFirstStatement()) === null || _a === void 0 ? void 0 : _a.get()) instanceof d; })) {
|
|
62259
61767
|
continue;
|
|
62260
61768
|
}
|
|
62261
61769
|
children.push(s);
|
|
@@ -64668,7 +64176,7 @@ const Structures = __webpack_require__(/*! ../abap/3_structures/structures */ ".
|
|
|
64668
64176
|
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
64669
64177
|
const objects_1 = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
64670
64178
|
const nodes_1 = __webpack_require__(/*! ../abap/nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
64671
|
-
const
|
|
64179
|
+
const stuff_1 = __webpack_require__(/*! ../stuff */ "./node_modules/@abaplint/core/build/src/stuff.js");
|
|
64672
64180
|
class ImplicitStartOfSelectionConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
64673
64181
|
}
|
|
64674
64182
|
exports.ImplicitStartOfSelectionConf = ImplicitStartOfSelectionConf;
|
|
@@ -64711,7 +64219,7 @@ START-OF-SELECTION.
|
|
|
64711
64219
|
let inEvent = false;
|
|
64712
64220
|
let collected = [];
|
|
64713
64221
|
for (const s of stru.getChildren() || []) {
|
|
64714
|
-
if (
|
|
64222
|
+
if (stuff_1.SELECTION_EVENTS.some(f => s.get() instanceof f)) {
|
|
64715
64223
|
if (inEvent === false && collected.length > 0) {
|
|
64716
64224
|
// implicit START-OF-SELECTION
|
|
64717
64225
|
let first = collected[0];
|
|
@@ -64726,7 +64234,7 @@ START-OF-SELECTION.
|
|
|
64726
64234
|
else if (s.get() instanceof Structures.Normal) {
|
|
64727
64235
|
const stru = s;
|
|
64728
64236
|
// ignore declaration stuff
|
|
64729
|
-
if (
|
|
64237
|
+
if (stuff_1.DECLARATION_STUFF.some(d => { var _a; return ((_a = stru.getFirstStatement()) === null || _a === void 0 ? void 0 : _a.get()) instanceof d; })) {
|
|
64730
64238
|
continue;
|
|
64731
64239
|
}
|
|
64732
64240
|
collected.push(s);
|
|
@@ -64918,6 +64426,7 @@ class IndentationConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
|
64918
64426
|
this.globalClassSkipFirst = false;
|
|
64919
64427
|
this.ignoreGlobalClassDefinition = false;
|
|
64920
64428
|
this.ignoreGlobalInterface = false;
|
|
64429
|
+
this.maxIssuesPerFile = 10;
|
|
64921
64430
|
}
|
|
64922
64431
|
}
|
|
64923
64432
|
exports.IndentationConf = IndentationConf;
|
|
@@ -64960,7 +64469,10 @@ ENDCLASS.`,
|
|
|
64960
64469
|
}
|
|
64961
64470
|
runParsed(file, obj) {
|
|
64962
64471
|
var _a, _b;
|
|
64963
|
-
|
|
64472
|
+
let max = this.getConfig().maxIssuesPerFile;
|
|
64473
|
+
if (max === undefined || max < 1) {
|
|
64474
|
+
max = 10;
|
|
64475
|
+
}
|
|
64964
64476
|
let skip = false;
|
|
64965
64477
|
if (file.getStructure() === undefined) {
|
|
64966
64478
|
return []; // syntax error in file
|
|
@@ -65032,7 +64544,7 @@ ENDCLASS.`,
|
|
|
65032
64544
|
const message = "Indentation problem, expected " + expected + " spaces";
|
|
65033
64545
|
const issue = issue_1.Issue.atPosition(file, position, message, this.getMetadata().key, this.conf.severity, fix);
|
|
65034
64546
|
ret.push(issue);
|
|
65035
|
-
if (ret.length >=
|
|
64547
|
+
if (ret.length >= max) {
|
|
65036
64548
|
break;
|
|
65037
64549
|
}
|
|
65038
64550
|
}
|
|
@@ -65702,6 +65214,7 @@ class KeywordCaseConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
|
65702
65214
|
this.ignoreGlobalClassBoundaries = false;
|
|
65703
65215
|
/** A list of keywords to be ignored */
|
|
65704
65216
|
this.ignoreKeywords = [];
|
|
65217
|
+
this.maxIssuesPerFile = 10;
|
|
65705
65218
|
}
|
|
65706
65219
|
}
|
|
65707
65220
|
exports.KeywordCaseConf = KeywordCaseConf;
|
|
@@ -65812,6 +65325,10 @@ class KeywordCase extends _abap_rule_1.ABAPRule {
|
|
|
65812
65325
|
return [];
|
|
65813
65326
|
}
|
|
65814
65327
|
}
|
|
65328
|
+
let max = this.getConfig().maxIssuesPerFile;
|
|
65329
|
+
if (max === undefined || max < 1) {
|
|
65330
|
+
max = 10;
|
|
65331
|
+
}
|
|
65815
65332
|
const skip = new Skip(this.getConfig());
|
|
65816
65333
|
let prev = undefined;
|
|
65817
65334
|
for (const statement of file.getStatements()) {
|
|
@@ -65834,6 +65351,9 @@ class KeywordCase extends _abap_rule_1.ABAPRule {
|
|
|
65834
65351
|
}
|
|
65835
65352
|
prev = result[0].token;
|
|
65836
65353
|
}
|
|
65354
|
+
if (issues.length >= max) {
|
|
65355
|
+
break;
|
|
65356
|
+
}
|
|
65837
65357
|
}
|
|
65838
65358
|
return issues;
|
|
65839
65359
|
}
|
|
@@ -66101,6 +65621,7 @@ class LineLengthConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
|
66101
65621
|
super(...arguments);
|
|
66102
65622
|
/** Maximum line length in characters, trailing whitespace ignored */
|
|
66103
65623
|
this.length = 120;
|
|
65624
|
+
this.maxIssuesPerFile = 10;
|
|
66104
65625
|
}
|
|
66105
65626
|
}
|
|
66106
65627
|
exports.LineLengthConf = LineLengthConf;
|
|
@@ -66129,6 +65650,10 @@ https://docs.abapopenchecks.org/checks/04/`,
|
|
|
66129
65650
|
const issues = [];
|
|
66130
65651
|
// maximum line length in abap files
|
|
66131
65652
|
const maxLineLength = 255;
|
|
65653
|
+
let max = this.getConfig().maxIssuesPerFile;
|
|
65654
|
+
if (max === undefined || max < 1) {
|
|
65655
|
+
max = 10;
|
|
65656
|
+
}
|
|
66132
65657
|
const array = file.getRawRows();
|
|
66133
65658
|
for (let rowIndex = 0; rowIndex < array.length; rowIndex++) {
|
|
66134
65659
|
const row = array[rowIndex].replace("\r", "");
|
|
@@ -66140,6 +65665,9 @@ https://docs.abapopenchecks.org/checks/04/`,
|
|
|
66140
65665
|
const message = `Reduce line length to max ${this.conf.length}, currently ${row.length}`;
|
|
66141
65666
|
issues.push(issue_1.Issue.atRow(file, rowIndex + 1, message, this.getMetadata().key, this.conf.severity));
|
|
66142
65667
|
}
|
|
65668
|
+
if (issues.length >= max) {
|
|
65669
|
+
break;
|
|
65670
|
+
}
|
|
66143
65671
|
}
|
|
66144
65672
|
return issues;
|
|
66145
65673
|
}
|
|
@@ -68584,6 +68112,7 @@ class NoPrefixesConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
|
68584
68112
|
/** importing, exporting, returning and changing parameters, case insensitive regex */
|
|
68585
68113
|
this.methodParameters = "^[ICER].?_";
|
|
68586
68114
|
this.allowIsPrefixBoolean = true;
|
|
68115
|
+
this.maxIssuesPerFile = 10;
|
|
68587
68116
|
// todo, public localClass: string = "";
|
|
68588
68117
|
// todo, public localInterface: string = "";
|
|
68589
68118
|
// todo, public functionModuleParameters: string = "";
|
|
@@ -68630,21 +68159,40 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/sub-sections/AvoidEncodi
|
|
|
68630
68159
|
// syntax error, skip
|
|
68631
68160
|
return [];
|
|
68632
68161
|
}
|
|
68162
|
+
let max = config.maxIssuesPerFile;
|
|
68163
|
+
if (max === undefined || max < 1) {
|
|
68164
|
+
max = 10;
|
|
68165
|
+
}
|
|
68633
68166
|
if (config.data !== undefined && config.data !== "") {
|
|
68634
68167
|
ret.push(...this.checkData(structure, new RegExp(config.data, "i"), file));
|
|
68635
68168
|
}
|
|
68169
|
+
if (ret.length >= max) {
|
|
68170
|
+
return ret;
|
|
68171
|
+
}
|
|
68636
68172
|
if (config.statics !== undefined && config.statics !== "") {
|
|
68637
68173
|
ret.push(...this.checkStatics(structure, new RegExp(config.statics, "i"), file));
|
|
68638
68174
|
}
|
|
68175
|
+
if (ret.length >= max) {
|
|
68176
|
+
return ret;
|
|
68177
|
+
}
|
|
68639
68178
|
if (config.fieldSymbols !== undefined && config.fieldSymbols !== "") {
|
|
68640
68179
|
ret.push(...this.checkFieldSymbols(structure, new RegExp(config.fieldSymbols, "i"), file));
|
|
68641
68180
|
}
|
|
68181
|
+
if (ret.length >= max) {
|
|
68182
|
+
return ret;
|
|
68183
|
+
}
|
|
68642
68184
|
if (config.constants !== undefined && config.constants !== "") {
|
|
68643
68185
|
ret.push(...this.checkConstants(structure, new RegExp(config.constants, "i"), file));
|
|
68644
68186
|
}
|
|
68187
|
+
if (ret.length >= max) {
|
|
68188
|
+
return ret;
|
|
68189
|
+
}
|
|
68645
68190
|
if (config.types !== undefined && config.types !== "") {
|
|
68646
68191
|
ret.push(...this.checkTypes(structure, new RegExp(config.types, "i"), file));
|
|
68647
68192
|
}
|
|
68193
|
+
if (ret.length >= max) {
|
|
68194
|
+
return ret;
|
|
68195
|
+
}
|
|
68648
68196
|
if (config.methodParameters !== undefined && config.methodParameters !== "") {
|
|
68649
68197
|
ret.push(...this.checkMethodParameters(structure, new RegExp(config.methodParameters, "i"), file));
|
|
68650
68198
|
}
|
|
@@ -73153,16 +72701,22 @@ class SQLEscapeHostVariables extends _abap_rule_1.ABAPRule {
|
|
|
73153
72701
|
return [];
|
|
73154
72702
|
}
|
|
73155
72703
|
for (const s of file.getStatements()) {
|
|
73156
|
-
|
|
73157
|
-
|
|
73158
|
-
||
|
|
73159
|
-
||
|
|
73160
|
-
||
|
|
73161
|
-
||
|
|
72704
|
+
const get = s.get();
|
|
72705
|
+
if (get instanceof Statements.UpdateDatabase
|
|
72706
|
+
|| get instanceof Statements.ModifyDatabase
|
|
72707
|
+
|| get instanceof Statements.Select
|
|
72708
|
+
|| get instanceof Statements.SelectLoop
|
|
72709
|
+
|| get instanceof Statements.InsertDatabase
|
|
72710
|
+
|| get instanceof Statements.DeleteDatabase) {
|
|
73162
72711
|
for (const o of s.findAllExpressionsMulti([Expressions.SQLSource, Expressions.SQLSourceSimple])) {
|
|
73163
72712
|
const first = o.getFirstChild();
|
|
73164
72713
|
if (((first === null || first === void 0 ? void 0 : first.get()) instanceof Expressions.Source && first.getChildren()[0].get() instanceof Expressions.FieldChain)
|
|
73165
72714
|
|| ((first === null || first === void 0 ? void 0 : first.get()) instanceof Expressions.SimpleSource3 && first.getChildren()[0].get() instanceof Expressions.FieldChain)) {
|
|
72715
|
+
if (get instanceof Statements.ModifyDatabase
|
|
72716
|
+
&& first.getFirstToken().getStr().toUpperCase().startsWith("LS_")) {
|
|
72717
|
+
// heuristic, might not be correct in all cases
|
|
72718
|
+
continue;
|
|
72719
|
+
}
|
|
73166
72720
|
const message = "Escape SQL host variables";
|
|
73167
72721
|
const firstToken = o.getFirstChild().getFirstToken();
|
|
73168
72722
|
const fix = edit_helper_1.EditHelper.replaceToken(file, firstToken, "@" + (firstToken === null || firstToken === void 0 ? void 0 : firstToken.getStr()));
|
|
@@ -74570,6 +74124,10 @@ const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/c
|
|
|
74570
74124
|
const edit_helper_1 = __webpack_require__(/*! ../edit_helper */ "./node_modules/@abaplint/core/build/src/edit_helper.js");
|
|
74571
74125
|
const _statement_1 = __webpack_require__(/*! ../abap/2_statements/statements/_statement */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/_statement.js");
|
|
74572
74126
|
class UnnecessaryChainingConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
74127
|
+
constructor() {
|
|
74128
|
+
super(...arguments);
|
|
74129
|
+
this.maxIssuesPerFile = 10;
|
|
74130
|
+
}
|
|
74573
74131
|
}
|
|
74574
74132
|
exports.UnnecessaryChainingConf = UnnecessaryChainingConf;
|
|
74575
74133
|
class UnnecessaryChaining extends _abap_rule_1.ABAPRule {
|
|
@@ -74596,6 +74154,10 @@ class UnnecessaryChaining extends _abap_rule_1.ABAPRule {
|
|
|
74596
74154
|
}
|
|
74597
74155
|
runParsed(file) {
|
|
74598
74156
|
const issues = [];
|
|
74157
|
+
let max = this.getConfig().maxIssuesPerFile;
|
|
74158
|
+
if (max === undefined || max < 1) {
|
|
74159
|
+
max = 10;
|
|
74160
|
+
}
|
|
74599
74161
|
const statements = file.getStatements();
|
|
74600
74162
|
for (let i = 0; i < statements.length; i++) {
|
|
74601
74163
|
const colon = statements[i].getColon();
|
|
@@ -74626,6 +74188,9 @@ class UnnecessaryChaining extends _abap_rule_1.ABAPRule {
|
|
|
74626
74188
|
const message = "Unnecessary chaining";
|
|
74627
74189
|
const issue = issue_1.Issue.atToken(file, colon, message, this.getMetadata().key, this.conf.severity, fix);
|
|
74628
74190
|
issues.push(issue);
|
|
74191
|
+
if (issues.length >= max) {
|
|
74192
|
+
break;
|
|
74193
|
+
}
|
|
74629
74194
|
}
|
|
74630
74195
|
return issues;
|
|
74631
74196
|
}
|
|
@@ -77040,6 +76605,48 @@ exports.SkipLogic = SkipLogic;
|
|
|
77040
76605
|
|
|
77041
76606
|
/***/ }),
|
|
77042
76607
|
|
|
76608
|
+
/***/ "./node_modules/@abaplint/core/build/src/stuff.js":
|
|
76609
|
+
/*!********************************************************!*\
|
|
76610
|
+
!*** ./node_modules/@abaplint/core/build/src/stuff.js ***!
|
|
76611
|
+
\********************************************************/
|
|
76612
|
+
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
76613
|
+
|
|
76614
|
+
"use strict";
|
|
76615
|
+
|
|
76616
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
76617
|
+
exports.DECLARATION_STUFF = exports.SELECTION_EVENTS = void 0;
|
|
76618
|
+
const Statements = __webpack_require__(/*! ./abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
76619
|
+
exports.SELECTION_EVENTS = [
|
|
76620
|
+
Statements.StartOfSelection,
|
|
76621
|
+
Statements.AtSelectionScreen,
|
|
76622
|
+
Statements.AtLineSelection,
|
|
76623
|
+
Statements.AtPF,
|
|
76624
|
+
Statements.AtUserCommand,
|
|
76625
|
+
Statements.EndOfSelection,
|
|
76626
|
+
Statements.Initialization,
|
|
76627
|
+
Statements.TopOfPage,
|
|
76628
|
+
Statements.LoadOfProgram,
|
|
76629
|
+
Statements.EndOfPage,
|
|
76630
|
+
];
|
|
76631
|
+
exports.DECLARATION_STUFF = [
|
|
76632
|
+
Statements.Type,
|
|
76633
|
+
Statements.TypeBegin,
|
|
76634
|
+
Statements.TypeEnum,
|
|
76635
|
+
Statements.TypeEnumBegin,
|
|
76636
|
+
Statements.Data,
|
|
76637
|
+
Statements.DataBegin,
|
|
76638
|
+
Statements.Constant,
|
|
76639
|
+
Statements.ConstantBegin,
|
|
76640
|
+
Statements.Tables,
|
|
76641
|
+
Statements.Include, // this is not super correct, but anyhow
|
|
76642
|
+
Statements.Parameter,
|
|
76643
|
+
Statements.SelectionScreen,
|
|
76644
|
+
Statements.Define,
|
|
76645
|
+
];
|
|
76646
|
+
//# sourceMappingURL=stuff.js.map
|
|
76647
|
+
|
|
76648
|
+
/***/ }),
|
|
76649
|
+
|
|
77043
76650
|
/***/ "./node_modules/@abaplint/core/build/src/utils/cyclomatic_complexity_stats.js":
|
|
77044
76651
|
/*!************************************************************************************!*\
|
|
77045
76652
|
!*** ./node_modules/@abaplint/core/build/src/utils/cyclomatic_complexity_stats.js ***!
|
|
@@ -84626,6 +84233,7 @@ class ClassImplementationTranspiler {
|
|
|
84626
84233
|
}
|
|
84627
84234
|
const scope = traversal.findCurrentScopeByToken(token);
|
|
84628
84235
|
return new chunk_1.Chunk().append(ret + ` {
|
|
84236
|
+
static STATIC_SUPER = ${traversal_1.Traversal.escapeNamespace(def?.getSuperClass()?.toLowerCase())};
|
|
84629
84237
|
static INTERNAL_TYPE = 'CLAS';
|
|
84630
84238
|
static INTERNAL_NAME = '${traversal.buildInternalName(token.getStr(), def)}';
|
|
84631
84239
|
static IMPLEMENTED_INTERFACES = [${this.findImplementedByClass(traversal, def, scope).map(e => `"` + e.toUpperCase() + `"`).join(",")}];
|
|
@@ -88692,7 +88300,10 @@ function escapeRegExp(string) {
|
|
|
88692
88300
|
// TODO: currently SELECT into are always handled as CORRESPONDING
|
|
88693
88301
|
class SelectTranspiler {
|
|
88694
88302
|
transpile(node, traversal, targetOverride) {
|
|
88695
|
-
if (node.findDirectTokenByText("
|
|
88303
|
+
if (node.findDirectTokenByText("UNION") !== undefined) {
|
|
88304
|
+
return new chunk_1.Chunk(`throw new Error("SELECT UNION, not supported, transpiler, todo");`);
|
|
88305
|
+
}
|
|
88306
|
+
else if (node.findDirectTokenByText("ALL") !== undefined) {
|
|
88696
88307
|
throw new Error("SelectTranspiler, UNION ALL todo");
|
|
88697
88308
|
}
|
|
88698
88309
|
else if (node.findDirectTokenByText("DISTINCT") !== undefined) {
|
|
@@ -90765,6 +90376,7 @@ class InterfaceTranspiler {
|
|
|
90765
90376
|
ret += `static INTERNAL_NAME = '${traversal.buildInternalName(token.getStr(), def)}';\n`;
|
|
90766
90377
|
ret += `static ATTRIBUTES = {${Array.from(traversal.buildAttributes(def, scope)).join(",\n")}};\n`;
|
|
90767
90378
|
ret += `static METHODS = {${traversal.buildMethods(def, scope).join(",\n")}};\n`;
|
|
90379
|
+
// todo, add IMPLEMENTED_INTERFACES ?
|
|
90768
90380
|
}
|
|
90769
90381
|
else if (c instanceof abaplint.Nodes.StatementNode && c.get() instanceof abaplint.Statements.EndInterface) {
|
|
90770
90382
|
ret += "}\n";
|