@abaplint/transpiler-cli 2.13.46 → 2.13.48
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 +356 -67
- package/package.json +4 -4
package/build/bundle.js
CHANGED
|
@@ -4244,7 +4244,7 @@ class Compare extends combi_1.Expression {
|
|
|
4244
4244
|
const inn = (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), "IN", (0, combi_1.altPrio)(_1.Source, list));
|
|
4245
4245
|
const sopt = (0, combi_1.seq)("IS", (0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)("SUPPLIED", "BOUND", (0, combi_1.ver)(version_1.Release.v750, (0, combi_1.seq)("INSTANCE OF", _1.ClassName), { also: combi_1.AlsoIn.OpenABAP }), "REQUESTED", "INITIAL"));
|
|
4246
4246
|
const between = (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), "BETWEEN", _1.Source, "AND", _1.Source);
|
|
4247
|
-
// https://help.sap.com/doc/
|
|
4247
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-740_sp08-expressions.html
|
|
4248
4248
|
// but also seems to work in v740sp05, blah
|
|
4249
4249
|
const predicate = (0, combi_1.ver)(version_1.Release.v740sp08, _1.MethodCallChain, { also: combi_1.AlsoIn.OpenABAP });
|
|
4250
4250
|
const rett = (0, combi_1.seq)(_1.Source, (0, combi_1.altPrio)((0, combi_1.seq)(_1.CompareOperator, _1.Source), inn, between, sopt));
|
|
@@ -7441,10 +7441,10 @@ exports.PerformTables = PerformTables;
|
|
|
7441
7441
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
7442
7442
|
exports.PerformUsing = void 0;
|
|
7443
7443
|
const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
|
|
7444
|
-
const
|
|
7444
|
+
const simple_source3_1 = __webpack_require__(/*! ./simple_source3 */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/simple_source3.js");
|
|
7445
7445
|
class PerformUsing extends combi_1.Expression {
|
|
7446
7446
|
getRunnable() {
|
|
7447
|
-
const using = (0, combi_1.seq)("USING", (0, combi_1.plus)(
|
|
7447
|
+
const using = (0, combi_1.seq)("USING", (0, combi_1.plus)(simple_source3_1.SimpleSource3));
|
|
7448
7448
|
return using;
|
|
7449
7449
|
}
|
|
7450
7450
|
}
|
|
@@ -10770,7 +10770,7 @@ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@a
|
|
|
10770
10770
|
const dynamic_1 = __webpack_require__(/*! ./dynamic */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/dynamic.js");
|
|
10771
10771
|
class StringTemplateFormatting extends combi_1.Expression {
|
|
10772
10772
|
getRunnable() {
|
|
10773
|
-
// https://help.sap.com/doc/
|
|
10773
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapcompute_string_format_options.html
|
|
10774
10774
|
const alphaOptions = (0, combi_1.altPrio)("OUT", "RAW", "IN", _1.Source);
|
|
10775
10775
|
const alignOptions = (0, combi_1.altPrio)("LEFT", "RIGHT", "CENTER", _1.Source, dynamic_1.Dynamic);
|
|
10776
10776
|
const dateTimeOptions = (0, combi_1.altPrio)("RAW", "ISO", "USER", "ENVIRONMENT", _1.Source, dynamic_1.Dynamic);
|
|
@@ -18179,7 +18179,8 @@ class ReadEntities {
|
|
|
18179
18179
|
const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
|
|
18180
18180
|
const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
|
|
18181
18181
|
const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
|
|
18182
|
-
const
|
|
18182
|
+
const execute = (0, combi_1.seq)("EXECUTE", expressions_1.SimpleName, from);
|
|
18183
|
+
const foo = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.EMLEntityPath)), (0, combi_1.alt)(fields, from, all, execute), (0, combi_1.optPrio)(result));
|
|
18183
18184
|
const entity = (0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.plus)(foo));
|
|
18184
18185
|
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)));
|
|
18185
18186
|
const byall = (0, combi_1.seq)("BY", expressions_1.EMLEntityPath, all);
|
|
@@ -25523,7 +25524,7 @@ class BuiltIn {
|
|
|
25523
25524
|
const sy = new _typed_identifier_1.TypedIdentifier(id1, BuiltIn.filename, type, ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
25524
25525
|
const id2 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "syst");
|
|
25525
25526
|
const syst = new _typed_identifier_1.TypedIdentifier(id2, BuiltIn.filename, type, ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
25526
|
-
// https://help.sap.com/doc/
|
|
25527
|
+
// https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-610-system.html
|
|
25527
25528
|
const id3 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "sy-repid");
|
|
25528
25529
|
const syrepid = new _typed_identifier_1.TypedIdentifier(id3, BuiltIn.filename, new basic_1.CharacterType(40, { qualifiedName: "sy-repid" }), ["read_only" /* IdentifierMeta.ReadOnly */, "built-in" /* IdentifierMeta.BuiltIn */]);
|
|
25529
25530
|
const id4 = new tokens_1.Identifier(new position_1.Position(this.row++, 1), "syst-repid");
|
|
@@ -28134,7 +28135,7 @@ class TypeUtils {
|
|
|
28134
28135
|
}
|
|
28135
28136
|
}
|
|
28136
28137
|
else if (source instanceof basic_1.IntegerType) {
|
|
28137
|
-
if (target instanceof basic_1.StringType) {
|
|
28138
|
+
if (target instanceof basic_1.StringType || target instanceof basic_1.DateType) {
|
|
28138
28139
|
return false;
|
|
28139
28140
|
}
|
|
28140
28141
|
else if (target instanceof basic_1.Integer8Type || target instanceof basic_1.PackedType) {
|
|
@@ -31845,6 +31846,10 @@ class InlineData {
|
|
|
31845
31846
|
static runSyntax(node, input, type) {
|
|
31846
31847
|
var _a;
|
|
31847
31848
|
const token = (_a = node.findFirstExpression(Expressions.TargetField)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
31849
|
+
if (token && token.getStr().length > 30) {
|
|
31850
|
+
const message = "DATA name too long, " + token.getStr();
|
|
31851
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, message));
|
|
31852
|
+
}
|
|
31848
31853
|
if (token && type) {
|
|
31849
31854
|
if (type instanceof basic_1.CSequenceType || type instanceof basic_1.CLikeType) {
|
|
31850
31855
|
type = basic_1.StringType.get();
|
|
@@ -32016,10 +32021,16 @@ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expr
|
|
|
32016
32021
|
const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
|
|
32017
32022
|
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
32018
32023
|
const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
|
|
32024
|
+
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
32019
32025
|
class InlineFS {
|
|
32020
32026
|
static runSyntax(node, input, type) {
|
|
32021
32027
|
var _a;
|
|
32022
32028
|
const token = (_a = node.findFirstExpression(Expressions.TargetFieldSymbol)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
32029
|
+
const fs = node.findFirstExpression(Expressions.FieldSymbol);
|
|
32030
|
+
if (fs && fs.concatTokens().length > 30) {
|
|
32031
|
+
const message = "FIELD-SYMBOLS name too long, " + fs.concatTokens();
|
|
32032
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, fs.getFirstToken(), message));
|
|
32033
|
+
}
|
|
32023
32034
|
if (token && type) {
|
|
32024
32035
|
const identifier = new _typed_identifier_1.TypedIdentifier(token, input.filename, type, ["inline" /* IdentifierMeta.InlineDefinition */]);
|
|
32025
32036
|
input.scope.addIdentifier(identifier);
|
|
@@ -37154,6 +37165,75 @@ exports.Assign = Assign;
|
|
|
37154
37165
|
|
|
37155
37166
|
/***/ },
|
|
37156
37167
|
|
|
37168
|
+
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/at_selection_screen.js"
|
|
37169
|
+
/*!***********************************************************************************************!*\
|
|
37170
|
+
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/at_selection_screen.js ***!
|
|
37171
|
+
\***********************************************************************************************/
|
|
37172
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
37173
|
+
|
|
37174
|
+
"use strict";
|
|
37175
|
+
|
|
37176
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
37177
|
+
if (k2 === undefined) k2 = k;
|
|
37178
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
37179
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
37180
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
37181
|
+
}
|
|
37182
|
+
Object.defineProperty(o, k2, desc);
|
|
37183
|
+
}) : (function(o, m, k, k2) {
|
|
37184
|
+
if (k2 === undefined) k2 = k;
|
|
37185
|
+
o[k2] = m[k];
|
|
37186
|
+
}));
|
|
37187
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
37188
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
37189
|
+
}) : function(o, v) {
|
|
37190
|
+
o["default"] = v;
|
|
37191
|
+
});
|
|
37192
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37193
|
+
var ownKeys = function(o) {
|
|
37194
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
37195
|
+
var ar = [];
|
|
37196
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
37197
|
+
return ar;
|
|
37198
|
+
};
|
|
37199
|
+
return ownKeys(o);
|
|
37200
|
+
};
|
|
37201
|
+
return function (mod) {
|
|
37202
|
+
if (mod && mod.__esModule) return mod;
|
|
37203
|
+
var result = {};
|
|
37204
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37205
|
+
__setModuleDefault(result, mod);
|
|
37206
|
+
return result;
|
|
37207
|
+
};
|
|
37208
|
+
})();
|
|
37209
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
37210
|
+
exports.AtSelectionScreen = void 0;
|
|
37211
|
+
const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
37212
|
+
const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
|
|
37213
|
+
const source_field_1 = __webpack_require__(/*! ../expressions/source_field */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source_field.js");
|
|
37214
|
+
class AtSelectionScreen {
|
|
37215
|
+
runSyntax(node, input) {
|
|
37216
|
+
// "AT SELECTION-SCREEN ON <field>", "ON VALUE-REQUEST FOR <field>",
|
|
37217
|
+
// "ON HELP-REQUEST FOR <field>" and "ON END OF <field>" all reference
|
|
37218
|
+
// a parameter or select-option, register these as read references so
|
|
37219
|
+
// they are not reported as unused.
|
|
37220
|
+
const fields = [
|
|
37221
|
+
...node.findDirectExpressions(Expressions.FieldSub),
|
|
37222
|
+
...node.findDirectExpressions(Expressions.Field),
|
|
37223
|
+
];
|
|
37224
|
+
for (const field of fields) {
|
|
37225
|
+
const token = field.getFirstToken();
|
|
37226
|
+
if (input.scope.findVariable(token.getStr()) !== undefined) {
|
|
37227
|
+
source_field_1.SourceField.runSyntax(field, input, _reference_1.ReferenceType.DataReadReference, false);
|
|
37228
|
+
}
|
|
37229
|
+
}
|
|
37230
|
+
}
|
|
37231
|
+
}
|
|
37232
|
+
exports.AtSelectionScreen = AtSelectionScreen;
|
|
37233
|
+
//# sourceMappingURL=at_selection_screen.js.map
|
|
37234
|
+
|
|
37235
|
+
/***/ },
|
|
37236
|
+
|
|
37157
37237
|
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/authority_check.js"
|
|
37158
37238
|
/*!*******************************************************************************************!*\
|
|
37159
37239
|
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/authority_check.js ***!
|
|
@@ -40341,14 +40421,19 @@ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expr
|
|
|
40341
40421
|
const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
|
|
40342
40422
|
const basic_types_1 = __webpack_require__(/*! ../basic_types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js");
|
|
40343
40423
|
const unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ "./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js");
|
|
40424
|
+
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
40344
40425
|
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
40345
40426
|
class FieldSymbol {
|
|
40346
40427
|
runSyntax(node, input) {
|
|
40347
|
-
|
|
40348
|
-
const fsname =
|
|
40349
|
-
if (fsname === undefined) {
|
|
40428
|
+
const fs = node.findFirstExpression(Expressions.FieldSymbol);
|
|
40429
|
+
const fsname = fs === null || fs === void 0 ? void 0 : fs.getFirstToken();
|
|
40430
|
+
if (fs === undefined || fsname === undefined) {
|
|
40350
40431
|
return;
|
|
40351
40432
|
}
|
|
40433
|
+
if (fs.concatTokens().length > 30) {
|
|
40434
|
+
const message = "FIELD-SYMBOLS name too long, " + fs.concatTokens();
|
|
40435
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, fsname, message));
|
|
40436
|
+
}
|
|
40352
40437
|
if (node.getChildren().length === 5) {
|
|
40353
40438
|
// no type specified
|
|
40354
40439
|
input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(fsname, input.filename, basic_1.VoidType.get("FS-SIMPLE")));
|
|
@@ -43476,7 +43561,7 @@ class Perform {
|
|
|
43476
43561
|
}
|
|
43477
43562
|
}
|
|
43478
43563
|
for (const u of node.findDirectExpressions(Expressions.PerformUsing)) {
|
|
43479
|
-
for (const s of u.findDirectExpressions(Expressions.
|
|
43564
|
+
for (const s of u.findDirectExpressions(Expressions.SimpleSource3)) {
|
|
43480
43565
|
source_1.Source.runSyntax(s, input);
|
|
43481
43566
|
}
|
|
43482
43567
|
}
|
|
@@ -43761,10 +43846,15 @@ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expr
|
|
|
43761
43846
|
const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
|
|
43762
43847
|
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
43763
43848
|
const basic_types_1 = __webpack_require__(/*! ../basic_types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js");
|
|
43849
|
+
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
43764
43850
|
const assert_error_1 = __webpack_require__(/*! ../assert_error */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/assert_error.js");
|
|
43765
43851
|
class Ranges {
|
|
43766
43852
|
runSyntax(node, input) {
|
|
43767
43853
|
var _a;
|
|
43854
|
+
if (input.scope.isAnyOO()) {
|
|
43855
|
+
const message = "RANGES is not allowed within classes";
|
|
43856
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
43857
|
+
}
|
|
43768
43858
|
const nameToken = (_a = node.findFirstExpression(Expressions.DefinitionName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
43769
43859
|
const typeExpression = node.findFirstExpression(Expressions.SimpleFieldChain2);
|
|
43770
43860
|
if (typeExpression === undefined) {
|
|
@@ -47546,6 +47636,117 @@ exports.TypeEnum = TypeEnum;
|
|
|
47546
47636
|
|
|
47547
47637
|
/***/ },
|
|
47548
47638
|
|
|
47639
|
+
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_mesh.js"
|
|
47640
|
+
/*!*************************************************************************************!*\
|
|
47641
|
+
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_mesh.js ***!
|
|
47642
|
+
\*************************************************************************************/
|
|
47643
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
47644
|
+
|
|
47645
|
+
"use strict";
|
|
47646
|
+
|
|
47647
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
47648
|
+
if (k2 === undefined) k2 = k;
|
|
47649
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
47650
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
47651
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
47652
|
+
}
|
|
47653
|
+
Object.defineProperty(o, k2, desc);
|
|
47654
|
+
}) : (function(o, m, k, k2) {
|
|
47655
|
+
if (k2 === undefined) k2 = k;
|
|
47656
|
+
o[k2] = m[k];
|
|
47657
|
+
}));
|
|
47658
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
47659
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
47660
|
+
}) : function(o, v) {
|
|
47661
|
+
o["default"] = v;
|
|
47662
|
+
});
|
|
47663
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
47664
|
+
var ownKeys = function(o) {
|
|
47665
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
47666
|
+
var ar = [];
|
|
47667
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
47668
|
+
return ar;
|
|
47669
|
+
};
|
|
47670
|
+
return ownKeys(o);
|
|
47671
|
+
};
|
|
47672
|
+
return function (mod) {
|
|
47673
|
+
if (mod && mod.__esModule) return mod;
|
|
47674
|
+
var result = {};
|
|
47675
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
47676
|
+
__setModuleDefault(result, mod);
|
|
47677
|
+
return result;
|
|
47678
|
+
};
|
|
47679
|
+
})();
|
|
47680
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
47681
|
+
exports.TypeMesh = void 0;
|
|
47682
|
+
const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js"));
|
|
47683
|
+
const Statements = __importStar(__webpack_require__(/*! ../../2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js"));
|
|
47684
|
+
const nodes_1 = __webpack_require__(/*! ../../nodes */ "./node_modules/@abaplint/core/build/src/abap/nodes/index.js");
|
|
47685
|
+
const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js");
|
|
47686
|
+
const Basic = __importStar(__webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js"));
|
|
47687
|
+
const basic_types_1 = __webpack_require__(/*! ../basic_types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js");
|
|
47688
|
+
const type_1 = __webpack_require__(/*! ../statements/type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/type.js");
|
|
47689
|
+
const _scope_type_1 = __webpack_require__(/*! ../_scope_type */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js");
|
|
47690
|
+
class TypeMesh {
|
|
47691
|
+
runSyntax(node, input) {
|
|
47692
|
+
var _a;
|
|
47693
|
+
const begin = node.findDirectStatement(Statements.TypeMeshBegin);
|
|
47694
|
+
if (begin === undefined) {
|
|
47695
|
+
return undefined;
|
|
47696
|
+
}
|
|
47697
|
+
const name = (_a = begin.findFirstExpression(Expressions.NamespaceSimpleName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
47698
|
+
if (name === undefined) {
|
|
47699
|
+
return undefined;
|
|
47700
|
+
}
|
|
47701
|
+
const components = [];
|
|
47702
|
+
for (const c of node.getChildren()) {
|
|
47703
|
+
if (!(c instanceof nodes_1.StatementNode)) {
|
|
47704
|
+
continue;
|
|
47705
|
+
}
|
|
47706
|
+
const ctyp = c.get();
|
|
47707
|
+
if (ctyp instanceof Statements.Type) {
|
|
47708
|
+
const found = new type_1.Type().runSyntax(c, input, name.getStr() + "-");
|
|
47709
|
+
if (found) {
|
|
47710
|
+
components.push({ name: found.getName(), type: found.getType() });
|
|
47711
|
+
}
|
|
47712
|
+
}
|
|
47713
|
+
else if (ctyp instanceof Statements.TypeMesh) {
|
|
47714
|
+
const found = this.runMeshNode(c, input);
|
|
47715
|
+
if (found) {
|
|
47716
|
+
components.push({ name: found.getName(), type: found.getType() });
|
|
47717
|
+
}
|
|
47718
|
+
}
|
|
47719
|
+
}
|
|
47720
|
+
let qualifiedName = name.getStr();
|
|
47721
|
+
if (input.scope.getType() === _scope_type_1.ScopeType.ClassDefinition
|
|
47722
|
+
|| input.scope.getType() === _scope_type_1.ScopeType.Interface) {
|
|
47723
|
+
qualifiedName = input.scope.getName() + "=>" + qualifiedName;
|
|
47724
|
+
}
|
|
47725
|
+
return new _typed_identifier_1.TypedIdentifier(name, input.filename, new Basic.StructureType(components, qualifiedName));
|
|
47726
|
+
}
|
|
47727
|
+
////////////////////
|
|
47728
|
+
runMeshNode(node, input) {
|
|
47729
|
+
var _a;
|
|
47730
|
+
const nameToken = (_a = node.findFirstExpression(Expressions.NamespaceSimpleName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
|
|
47731
|
+
if (nameToken === undefined) {
|
|
47732
|
+
return undefined;
|
|
47733
|
+
}
|
|
47734
|
+
const typeName = node.findFirstExpression(Expressions.TypeName);
|
|
47735
|
+
let type = new basic_types_1.BasicTypes(input).resolveTypeName(typeName);
|
|
47736
|
+
if (type === undefined) {
|
|
47737
|
+
type = new Basic.UnknownType("Mesh node, unknown type " + (typeName === null || typeName === void 0 ? void 0 : typeName.concatTokens()));
|
|
47738
|
+
}
|
|
47739
|
+
else if (node.concatTokens().toUpperCase().includes(" TYPE REF TO ")) {
|
|
47740
|
+
type = new Basic.DataReference(type);
|
|
47741
|
+
}
|
|
47742
|
+
return new _typed_identifier_1.TypedIdentifier(nameToken, input.filename, type);
|
|
47743
|
+
}
|
|
47744
|
+
}
|
|
47745
|
+
exports.TypeMesh = TypeMesh;
|
|
47746
|
+
//# sourceMappingURL=type_mesh.js.map
|
|
47747
|
+
|
|
47748
|
+
/***/ },
|
|
47749
|
+
|
|
47549
47750
|
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js"
|
|
47550
47751
|
/*!*********************************************************************************!*\
|
|
47551
47752
|
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js ***!
|
|
@@ -47707,6 +47908,7 @@ const objects_1 = __webpack_require__(/*! ../../objects */ "./node_modules/@abap
|
|
|
47707
47908
|
const position_1 = __webpack_require__(/*! ../../position */ "./node_modules/@abaplint/core/build/src/position.js");
|
|
47708
47909
|
const data_1 = __webpack_require__(/*! ./structures/data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/data.js");
|
|
47709
47910
|
const type_enum_1 = __webpack_require__(/*! ./structures/type_enum */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_enum.js");
|
|
47911
|
+
const type_mesh_1 = __webpack_require__(/*! ./structures/type_mesh */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_mesh.js");
|
|
47710
47912
|
const types_1 = __webpack_require__(/*! ./structures/types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js");
|
|
47711
47913
|
const statics_1 = __webpack_require__(/*! ./structures/statics */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/statics.js");
|
|
47712
47914
|
const constants_1 = __webpack_require__(/*! ./structures/constants */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/constants.js");
|
|
@@ -47751,6 +47953,7 @@ const if_1 = __webpack_require__(/*! ./statements/if */ "./node_modules/@abaplin
|
|
|
47751
47953
|
const else_if_1 = __webpack_require__(/*! ./statements/else_if */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/else_if.js");
|
|
47752
47954
|
const append_1 = __webpack_require__(/*! ./statements/append */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/append.js");
|
|
47753
47955
|
const selection_screen_1 = __webpack_require__(/*! ./statements/selection_screen */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/selection_screen.js");
|
|
47956
|
+
const at_selection_screen_1 = __webpack_require__(/*! ./statements/at_selection_screen */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/at_selection_screen.js");
|
|
47754
47957
|
const ranges_1 = __webpack_require__(/*! ./statements/ranges */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/ranges.js");
|
|
47755
47958
|
const write_1 = __webpack_require__(/*! ./statements/write */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/write.js");
|
|
47756
47959
|
const case_1 = __webpack_require__(/*! ./statements/case */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/case.js");
|
|
@@ -47958,6 +48161,7 @@ if (Object.keys(map).length === 0) {
|
|
|
47958
48161
|
addToMap(new authority_check_1.AuthorityCheck());
|
|
47959
48162
|
addToMap(new insert_report_1.InsertReport());
|
|
47960
48163
|
addToMap(new selection_screen_1.SelectionScreen());
|
|
48164
|
+
addToMap(new at_selection_screen_1.AtSelectionScreen());
|
|
47961
48165
|
addToMap(new ranges_1.Ranges());
|
|
47962
48166
|
addToMap(new add_1.Add());
|
|
47963
48167
|
addToMap(new raise_event_1.RaiseEvent());
|
|
@@ -48139,6 +48343,13 @@ class SyntaxLogic {
|
|
|
48139
48343
|
this.scope.addIdentifier(new statics_1.Statics().runSyntax(node, input));
|
|
48140
48344
|
return true;
|
|
48141
48345
|
}
|
|
48346
|
+
else if (stru instanceof Structures.TypeMesh) {
|
|
48347
|
+
const found = new type_mesh_1.TypeMesh().runSyntax(node, input);
|
|
48348
|
+
if (found) {
|
|
48349
|
+
this.scope.addType(found);
|
|
48350
|
+
}
|
|
48351
|
+
return true;
|
|
48352
|
+
}
|
|
48142
48353
|
else if (stru instanceof Structures.TypeEnum) {
|
|
48143
48354
|
const values = new type_enum_1.TypeEnum().runSyntax(node, input).values;
|
|
48144
48355
|
this.scope.addList(values);
|
|
@@ -51277,6 +51488,7 @@ const data_1 = __webpack_require__(/*! ../5_syntax/statements/data */ "./node_mo
|
|
|
51277
51488
|
const constant_1 = __webpack_require__(/*! ../5_syntax/statements/constant */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/constant.js");
|
|
51278
51489
|
const data_2 = __webpack_require__(/*! ../5_syntax/structures/data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/data.js");
|
|
51279
51490
|
const type_enum_1 = __webpack_require__(/*! ../5_syntax/structures/type_enum */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_enum.js");
|
|
51491
|
+
const type_mesh_1 = __webpack_require__(/*! ../5_syntax/structures/type_mesh */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_mesh.js");
|
|
51280
51492
|
const constants_1 = __webpack_require__(/*! ../5_syntax/structures/constants */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/constants.js");
|
|
51281
51493
|
const type_definitions_1 = __webpack_require__(/*! ./type_definitions */ "./node_modules/@abaplint/core/build/src/abap/types/type_definitions.js");
|
|
51282
51494
|
const types_1 = __webpack_require__(/*! ../5_syntax/structures/types */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js");
|
|
@@ -51437,6 +51649,13 @@ class Attributes {
|
|
|
51437
51649
|
// scope.addIdentifier(attr);
|
|
51438
51650
|
}
|
|
51439
51651
|
}
|
|
51652
|
+
else if (ctyp instanceof Structures.TypeMesh) {
|
|
51653
|
+
const res = new type_mesh_1.TypeMesh().runSyntax(c, input);
|
|
51654
|
+
if (res) {
|
|
51655
|
+
input.scope.addType(res);
|
|
51656
|
+
this.tlist.push({ type: res, visibility });
|
|
51657
|
+
}
|
|
51658
|
+
}
|
|
51440
51659
|
else if (ctyp instanceof Structures.Types) {
|
|
51441
51660
|
const res = new types_1.Types().runSyntax(c, input);
|
|
51442
51661
|
if (res) {
|
|
@@ -51657,6 +51876,7 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
51657
51876
|
this.createVisibilityValue = visibility_1.Visibility.Public;
|
|
51658
51877
|
}
|
|
51659
51878
|
// perform checks after everything has been initialized
|
|
51879
|
+
this.checkInterfaceVisibility(input, node);
|
|
51660
51880
|
this.checkMethodsFromSuperClasses(input);
|
|
51661
51881
|
this.checkMethodNameLength(input);
|
|
51662
51882
|
this.checkClassConstructorStatic(input);
|
|
@@ -51730,6 +51950,17 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
51730
51950
|
}
|
|
51731
51951
|
}
|
|
51732
51952
|
}
|
|
51953
|
+
checkInterfaceVisibility(input, node) {
|
|
51954
|
+
const sections = [
|
|
51955
|
+
node.findDirectStructure(Structures.ProtectedSection),
|
|
51956
|
+
node.findDirectStructure(Structures.PrivateSection),
|
|
51957
|
+
];
|
|
51958
|
+
for (const section of sections) {
|
|
51959
|
+
for (const statement of (section === null || section === void 0 ? void 0 : section.findAllStatements(Statements.InterfaceDef)) || []) {
|
|
51960
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, statement.getFirstToken(), "INTERFACES can only be declared in public sections"));
|
|
51961
|
+
}
|
|
51962
|
+
}
|
|
51963
|
+
}
|
|
51733
51964
|
checkMethodsFromSuperClasses(input) {
|
|
51734
51965
|
var _a;
|
|
51735
51966
|
const scope = input.scope;
|
|
@@ -69492,7 +69723,7 @@ class Registry {
|
|
|
69492
69723
|
}
|
|
69493
69724
|
static abaplintVersion() {
|
|
69494
69725
|
// magic, see build script "version.js"
|
|
69495
|
-
return "2.120.
|
|
69726
|
+
return "2.120.9";
|
|
69496
69727
|
}
|
|
69497
69728
|
getDDICReferences() {
|
|
69498
69729
|
return this.ddicReferences;
|
|
@@ -69836,7 +70067,7 @@ class SevenBitAscii {
|
|
|
69836
70067
|
shortDescription: `Only allow characters from the 7bit ASCII set.`,
|
|
69837
70068
|
extendedInformation: `https://docs.abapopenchecks.org/checks/05/
|
|
69838
70069
|
|
|
69839
|
-
https://help.sap.com/doc/
|
|
70070
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abencharacter_set_guidl.html
|
|
69840
70071
|
|
|
69841
70072
|
Checkes files with extensions ".abap" and ".asddls"`,
|
|
69842
70073
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
@@ -71454,7 +71685,7 @@ class AvoidUse extends _abap_rule_1.ABAPRule {
|
|
|
71454
71685
|
shortDescription: `Detects usage of certain statements.`,
|
|
71455
71686
|
extendedInformation: `DEFAULT KEY: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-default-key
|
|
71456
71687
|
|
|
71457
|
-
Macros: https://help.sap.com/doc/
|
|
71688
|
+
Macros: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html
|
|
71458
71689
|
|
|
71459
71690
|
STATICS: use CLASS-DATA instead
|
|
71460
71691
|
|
|
@@ -72188,7 +72419,7 @@ class CDSCommentStyle {
|
|
|
72188
72419
|
|
|
72189
72420
|
Comments starting with "--" are considered obsolete
|
|
72190
72421
|
|
|
72191
|
-
https://help.sap.com/doc/
|
|
72422
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abencds_general_syntax_rules.html`,
|
|
72192
72423
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
72193
72424
|
badExample: "-- this is a comment",
|
|
72194
72425
|
goodExample: "// this is a comment",
|
|
@@ -72717,7 +72948,7 @@ class ChainMainlyDeclarations extends _abap_rule_1.ABAPRule {
|
|
|
72717
72948
|
extendedInformation: `
|
|
72718
72949
|
https://docs.abapopenchecks.org/checks/23/
|
|
72719
72950
|
|
|
72720
|
-
https://help.sap.com/doc/
|
|
72951
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenchained_statements_guidl.html
|
|
72721
72952
|
`,
|
|
72722
72953
|
tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
72723
72954
|
badExample: `CALL METHOD: bar.`,
|
|
@@ -74241,7 +74472,7 @@ before reading it, so a leftover value is not accidentally used.
|
|
|
74241
74472
|
|
|
74242
74473
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#clear-or-overwrite-exporting-reference-parameters
|
|
74243
74474
|
|
|
74244
|
-
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenref_transf_output_param_guidl.
|
|
74475
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenref_transf_output_param_guidl.html
|
|
74245
74476
|
|
|
74246
74477
|
Note: EXPORTING parameters passed by VALUE are always initialized and are therefore not reported.
|
|
74247
74478
|
Reading and writing the parameter in the same statement (e.g. "ev_result = ev_result + 1") is reported,
|
|
@@ -74940,7 +75171,7 @@ class ConstructorVisibilityPublic {
|
|
|
74940
75171
|
This only applies to global classes.
|
|
74941
75172
|
|
|
74942
75173
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#if-your-global-class-is-create-private-leave-the-constructor-public
|
|
74943
|
-
https://help.sap.com/doc/
|
|
75174
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abeninstance_constructor_guidl.html`,
|
|
74944
75175
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
74945
75176
|
badExample: `CLASS zcl_foo DEFINITION PUBLIC CREATE PRIVATE.
|
|
74946
75177
|
PRIVATE SECTION.
|
|
@@ -79975,8 +80206,8 @@ class ExitOrCheck extends _abap_rule_1.ABAPRule {
|
|
|
79975
80206
|
title: "Find EXIT or CHECK outside loops",
|
|
79976
80207
|
shortDescription: `Detects usages of EXIT or CHECK statements outside of loops.
|
|
79977
80208
|
Use RETURN to leave procesing blocks instead.`,
|
|
79978
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
79979
|
-
https://help.sap.com/doc/
|
|
80209
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenleave_processing_blocks.html
|
|
80210
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapcheck_processing_blocks.html
|
|
79980
80211
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#check-vs-return`,
|
|
79981
80212
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
79982
80213
|
badExample: `CHECK is_valid = abap_true.
|
|
@@ -80066,7 +80297,7 @@ class ExpandMacros extends _abap_rule_1.ABAPRule {
|
|
|
80066
80297
|
key: "expand_macros",
|
|
80067
80298
|
title: "Expand Macros",
|
|
80068
80299
|
shortDescription: `Allows expanding macro calls with quick fixes`,
|
|
80069
|
-
extendedInformation: `Macros: https://help.sap.com/doc/
|
|
80300
|
+
extendedInformation: `Macros: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html
|
|
80070
80301
|
|
|
80071
80302
|
Note that macros/DEFINE cannot be used in the ABAP Cloud programming model`,
|
|
80072
80303
|
badExample: `DEFINE _hello.
|
|
@@ -80280,7 +80511,7 @@ class FMGlobalParametersObsolete {
|
|
|
80280
80511
|
key: "fm_global_parameters_obsolete",
|
|
80281
80512
|
title: "FM Global Parameters Obsolete",
|
|
80282
80513
|
shortDescription: `Check for function modules with global parameters`,
|
|
80283
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
80514
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenglobal_parameters_obsolete.html`,
|
|
80284
80515
|
tags: [],
|
|
80285
80516
|
};
|
|
80286
80517
|
}
|
|
@@ -80765,7 +80996,7 @@ class FormTablesObsolete extends _abap_rule_1.ABAPRule {
|
|
|
80765
80996
|
key: "form_tables_obsolete",
|
|
80766
80997
|
title: "TABLES parameters are obsolete",
|
|
80767
80998
|
shortDescription: `Checks for TABLES parameters in forms.`,
|
|
80768
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
80999
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapform_tables.html`,
|
|
80769
81000
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
80770
81001
|
badExample: `FORM update_items TABLES items.
|
|
80771
81002
|
ENDFORM.`,
|
|
@@ -82726,7 +82957,7 @@ class ImplicitStartOfSelection extends _abap_rule_1.ABAPRule {
|
|
|
82726
82957
|
shortDescription: `Add explicit selection screen event handling`,
|
|
82727
82958
|
extendedInformation: `Only runs for executable programs
|
|
82728
82959
|
|
|
82729
|
-
https://help.sap.com/doc/
|
|
82960
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapstart-of-selection.html`,
|
|
82730
82961
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
82731
82962
|
badExample: `REPORT zfoo.
|
|
82732
82963
|
WRITE 'hello'.`,
|
|
@@ -86167,7 +86398,7 @@ class MethodOverwritesBuiltIn extends _abap_rule_1.ABAPRule {
|
|
|
86167
86398
|
key: "method_overwrites_builtin",
|
|
86168
86399
|
title: "Method name overwrites builtin function",
|
|
86169
86400
|
shortDescription: `Checks Method names that overwrite builtin SAP functions`,
|
|
86170
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
86401
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abenbuilt_in_functions_overview.html
|
|
86171
86402
|
|
|
86172
86403
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-obscuring-built-in-functions
|
|
86173
86404
|
|
|
@@ -86409,7 +86640,7 @@ class MixReturning extends _abap_rule_1.ABAPRule {
|
|
|
86409
86640
|
shortDescription: `Checks that methods don't have a mixture of returning and exporting/changing parameters`,
|
|
86410
86641
|
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#use-either-returning-or-exporting-or-changing-but-not-a-combination
|
|
86411
86642
|
|
|
86412
|
-
This syntax is not allowed on versions earlier than 740sp02, https://help.sap.com/doc/
|
|
86643
|
+
This syntax is not allowed on versions earlier than 740sp02, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abennews-740-abap_objects.html#!ABAP_MODIFICATION_1@1@`,
|
|
86413
86644
|
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Syntax],
|
|
86414
86645
|
badExample: `CLASS lcl DEFINITION.
|
|
86415
86646
|
PUBLIC SECTION.
|
|
@@ -87740,7 +87971,7 @@ class NoMacros extends _abap_rule_1.ABAPRule {
|
|
|
87740
87971
|
shortDescription: `Checks that macros are not used`,
|
|
87741
87972
|
extendedInformation: `Macros reduce readability and are difficult to debug, use methods or form routines instead.
|
|
87742
87973
|
|
|
87743
|
-
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.
|
|
87974
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenmacros_guidl.html`,
|
|
87744
87975
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
87745
87976
|
badExample: `DEFINE _macro.
|
|
87746
87977
|
WRITE 'hello'.
|
|
@@ -87998,13 +88229,13 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/sub-sections/AvoidEncodi
|
|
|
87998
88229
|
return ret;
|
|
87999
88230
|
}
|
|
88000
88231
|
checkMethodParameters(topNode, regex, file) {
|
|
88001
|
-
var _a, _b;
|
|
88232
|
+
var _a, _b, _c;
|
|
88002
88233
|
const ret = [];
|
|
88003
88234
|
for (const method of topNode.findAllStatements(Statements.MethodDef)) {
|
|
88004
88235
|
for (const param of method.findAllExpressionsMulti([Expressions.MethodDefReturning, Expressions.MethodParam])) {
|
|
88005
88236
|
const nameToken = param === null || param === void 0 ? void 0 : param.findFirstExpression(Expressions.MethodParamName);
|
|
88006
|
-
const
|
|
88007
|
-
if (this.getConfig().allowIsPrefixBoolean === true &&
|
|
88237
|
+
const typeName = (_c = (_b = (_a = param === null || param === void 0 ? void 0 : param.findFirstExpression(Expressions.TypeParam)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(Expressions.TypeNameOrInfer)) === null || _b === void 0 ? void 0 : _b.concatTokens()) === null || _c === void 0 ? void 0 : _c.toUpperCase();
|
|
88238
|
+
if (this.getConfig().allowIsPrefixBoolean === true && typeName === "ABAP_BOOL") {
|
|
88008
88239
|
continue;
|
|
88009
88240
|
}
|
|
88010
88241
|
const name = nameToken === null || nameToken === void 0 ? void 0 : nameToken.concatTokens();
|
|
@@ -88664,44 +88895,44 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#prefer-func
|
|
|
88664
88895
|
|
|
88665
88896
|
https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#avoid-obsolete-language-elements
|
|
88666
88897
|
|
|
88667
|
-
SET EXTENDED CHECK: https://help.sap.com/doc/
|
|
88898
|
+
SET EXTENDED CHECK: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapset_extended_check.html
|
|
88668
88899
|
|
|
88669
|
-
IS REQUESTED: https://help.sap.com/doc/
|
|
88900
|
+
IS REQUESTED: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenlogexp_requested.html
|
|
88670
88901
|
|
|
88671
|
-
WITH HEADER LINE: https://help.sap.com/doc/
|
|
88902
|
+
WITH HEADER LINE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapdata_header_line.html
|
|
88672
88903
|
|
|
88673
|
-
FIELD-SYMBOLS STRUCTURE: https://help.sap.com/doc/
|
|
88904
|
+
FIELD-SYMBOLS STRUCTURE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapfield-symbols_obsolete_typing.html
|
|
88674
88905
|
|
|
88675
|
-
TYPE-POOLS: from 702, https://help.sap.com/doc/
|
|
88906
|
+
TYPE-POOLS: from 702, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-71-program_load.html
|
|
88676
88907
|
|
|
88677
|
-
LOAD addition: from 702, https://help.sap.com/doc/
|
|
88908
|
+
LOAD addition: from 702, https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abennews-71-program_load.html
|
|
88678
88909
|
|
|
88679
|
-
COMMUICATION: https://help.sap.com/doc/
|
|
88910
|
+
COMMUICATION: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapcommunication.html
|
|
88680
88911
|
|
|
88681
|
-
OCCURS: https://help.sap.com/doc/
|
|
88912
|
+
OCCURS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapdata_occurs.html
|
|
88682
88913
|
|
|
88683
|
-
PARAMETER: https://help.sap.com/doc/
|
|
88914
|
+
PARAMETER: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapparameter.html
|
|
88684
88915
|
|
|
88685
|
-
RANGES: https://help.sap.com/doc/
|
|
88916
|
+
RANGES: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapranges.html
|
|
88686
88917
|
|
|
88687
|
-
PACK: https://help.sap.com/doc/
|
|
88918
|
+
PACK: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abappack.html
|
|
88688
88919
|
|
|
88689
|
-
MOVE: https://help.sap.com/doc/
|
|
88920
|
+
MOVE: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapmove_obs.html
|
|
88690
88921
|
|
|
88691
|
-
SELECT without INTO: https://help.sap.com/doc/
|
|
88922
|
+
SELECT without INTO: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapselect_obsolete.html
|
|
88692
88923
|
SELECT COUNT(*) is considered okay
|
|
88693
88924
|
|
|
88694
|
-
FREE MEMORY: https://help.sap.com/doc/
|
|
88925
|
+
FREE MEMORY: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abapfree_mem_id_obsolete.html
|
|
88695
88926
|
|
|
88696
|
-
SORT BY FS: https://help.sap.com/doc/
|
|
88927
|
+
SORT BY FS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapsort_itab_obsolete.html
|
|
88697
88928
|
|
|
88698
|
-
CALL TRANSFORMATION OBJECTS: https://help.sap.com/doc/
|
|
88929
|
+
CALL TRANSFORMATION OBJECTS: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapcall_transformation_objects.html
|
|
88699
88930
|
|
|
88700
|
-
POSIX REGEX: https://help.sap.com/doc/
|
|
88931
|
+
POSIX REGEX: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENREGEX_MIGRATING_POSIX.html
|
|
88701
88932
|
|
|
88702
88933
|
OCCURENCES: check for OCCURENCES vs OCCURRENCES
|
|
88703
88934
|
|
|
88704
|
-
CLIENT SPECIFIED, from 754: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/
|
|
88935
|
+
CLIENT SPECIFIED, from 754: https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapselect_client_obsolete.html`,
|
|
88705
88936
|
badExample: `REFRESH itab.
|
|
88706
88937
|
|
|
88707
88938
|
COMPUTE foo = 2 + 2.
|
|
@@ -90150,7 +90381,7 @@ class PragmaStyle extends _abap_rule_1.ABAPRule {
|
|
|
90150
90381
|
title: "Pragma Style",
|
|
90151
90382
|
shortDescription: `Check pragmas placement and case`,
|
|
90152
90383
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
90153
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
90384
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENPRAGMA.html`,
|
|
90154
90385
|
badExample: `DATA field ##NO_TEXT TYPE i.`,
|
|
90155
90386
|
goodExample: `DATA field TYPE i ##NO_TEXT.`,
|
|
90156
90387
|
};
|
|
@@ -92388,7 +92619,7 @@ class RFCErrorHandling extends _abap_rule_1.ABAPRule {
|
|
|
92388
92619
|
title: "RFC error handling",
|
|
92389
92620
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
92390
92621
|
shortDescription: `Checks that exceptions 'system_failure' and 'communication_failure' are handled in RFC calls`,
|
|
92391
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
92622
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abenrfc_exception.html`,
|
|
92392
92623
|
badExample: `CALL FUNCTION 'ZRFC'
|
|
92393
92624
|
DESTINATION lv_rfc.`,
|
|
92394
92625
|
goodExample: `CALL FUNCTION 'ZRFC'
|
|
@@ -94382,9 +94613,9 @@ class StrictSQL extends _abap_rule_1.ABAPRule {
|
|
|
94382
94613
|
key: "strict_sql",
|
|
94383
94614
|
title: "Strict SQL",
|
|
94384
94615
|
shortDescription: `Strict SQL`,
|
|
94385
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
94616
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abapinto_clause.html
|
|
94386
94617
|
|
|
94387
|
-
https://help.sap.com/doc/
|
|
94618
|
+
https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/ABENABAP_SQL_STRICT_MODES.html
|
|
94388
94619
|
|
|
94389
94620
|
Also see separate rule sql_escape_host_variables
|
|
94390
94621
|
|
|
@@ -94772,7 +95003,7 @@ class SyModification extends _abap_rule_1.ABAPRule {
|
|
|
94772
95003
|
key: "sy_modification",
|
|
94773
95004
|
title: "Modification of SY fields",
|
|
94774
95005
|
shortDescription: `Finds modification of sy fields`,
|
|
94775
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
95006
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-US/abensystem_fields.html
|
|
94776
95007
|
|
|
94777
95008
|
Changes to SY-TVAR* fields are not reported
|
|
94778
95009
|
|
|
@@ -95100,7 +95331,7 @@ class TablesDeclaredLocally extends _abap_rule_1.ABAPRule {
|
|
|
95100
95331
|
key: "tables_declared_locally",
|
|
95101
95332
|
title: "Check for locally declared TABLES",
|
|
95102
95333
|
shortDescription: `TABLES are always global, so declare them globally`,
|
|
95103
|
-
extendedInformation: `https://help.sap.com/doc/
|
|
95334
|
+
extendedInformation: `https://help.sap.com/doc/abapdocu_latest_index_htm/latest/en-us/abaptables.html`,
|
|
95104
95335
|
tags: [_irule_1.RuleTag.SingleFile],
|
|
95105
95336
|
badExample: `FORM foo.
|
|
95106
95337
|
TABLES t100.
|
|
@@ -102092,7 +102323,7 @@ class ConstantTranspiler {
|
|
|
102092
102323
|
str = node.findDirectExpression(core_1.Expressions.TextElementString);
|
|
102093
102324
|
}
|
|
102094
102325
|
if (str) {
|
|
102095
|
-
|
|
102326
|
+
const res = str.getFirstToken().getStr();
|
|
102096
102327
|
if (res.startsWith("'") && this.addGet === false) {
|
|
102097
102328
|
const code = this.handleCharacter(res);
|
|
102098
102329
|
return new chunk_1.Chunk().append(code, node, traversal);
|
|
@@ -102102,10 +102333,7 @@ class ConstantTranspiler {
|
|
|
102102
102333
|
return new chunk_1.Chunk().append(code, node, traversal);
|
|
102103
102334
|
}
|
|
102104
102335
|
else {
|
|
102105
|
-
|
|
102106
|
-
res = "'" + res.substring(1, res.length - 1).trimEnd() + "'";
|
|
102107
|
-
}
|
|
102108
|
-
const code = ConstantTranspiler.escape(res);
|
|
102336
|
+
const code = ConstantTranspiler.escape(ConstantTranspiler.trimTextFieldLiteral(res));
|
|
102109
102337
|
return new chunk_1.Chunk().append(code, node, traversal);
|
|
102110
102338
|
}
|
|
102111
102339
|
}
|
|
@@ -102146,6 +102374,13 @@ class ConstantTranspiler {
|
|
|
102146
102374
|
// const code = "new abap.types.Character(" + length + ").set(" + ConstantTranspiler.escape(res) + ")";
|
|
102147
102375
|
return code;
|
|
102148
102376
|
}
|
|
102377
|
+
// text field literals are of type c, trailing blanks are not part of the value
|
|
102378
|
+
static trimTextFieldLiteral(str) {
|
|
102379
|
+
if (str.startsWith("'") && str.endsWith("'") && str.length >= 2) {
|
|
102380
|
+
return "'" + str.substring(1, str.length - 1).trimEnd() + "'";
|
|
102381
|
+
}
|
|
102382
|
+
return str;
|
|
102383
|
+
}
|
|
102149
102384
|
static escape(str) {
|
|
102150
102385
|
str = str.replace(/\\/g, "\\\\");
|
|
102151
102386
|
if (str.startsWith("'")) {
|
|
@@ -104577,14 +104812,34 @@ class SQLCondTranspiler {
|
|
|
104577
104812
|
return sourceWithComponents;
|
|
104578
104813
|
}
|
|
104579
104814
|
let ret = "";
|
|
104815
|
+
let hostExpression = false;
|
|
104580
104816
|
for (const child of node.getChildren()) {
|
|
104817
|
+
if (!(child instanceof abaplint.Nodes.ExpressionNode) && child.getFirstToken().getStr() === "@") {
|
|
104818
|
+
hostExpression = true;
|
|
104819
|
+
continue;
|
|
104820
|
+
}
|
|
104581
104821
|
if (ret !== "") {
|
|
104582
104822
|
ret += " ";
|
|
104583
104823
|
}
|
|
104584
|
-
if (
|
|
104824
|
+
if (hostExpression
|
|
104825
|
+
&& child instanceof abaplint.Nodes.ExpressionNode
|
|
104826
|
+
&& child.get() instanceof abaplint.Expressions.SimpleSource3) {
|
|
104827
|
+
const code = new simple_source3_1.SimpleSource3Transpiler(true).transpile(child, traversal).getCode();
|
|
104828
|
+
ret += `'" + ${code} + "'`;
|
|
104829
|
+
hostExpression = false;
|
|
104830
|
+
}
|
|
104831
|
+
else if ((child.get() instanceof abaplint.Expressions.SQLFieldName
|
|
104585
104832
|
|| child.get() instanceof abaplint.Expressions.SQLAliasField)
|
|
104586
104833
|
&& child instanceof abaplint.Nodes.ExpressionNode) {
|
|
104587
|
-
|
|
104834
|
+
if (hostExpression) {
|
|
104835
|
+
let name = traversal.prefixAndName(child.getFirstToken(), filename).replace("~", "$");
|
|
104836
|
+
name = traversal_1.Traversal.prefixVariable(traversal_1.Traversal.escapeNamespace(name));
|
|
104837
|
+
ret += `'" + ${name}.get() + "'`;
|
|
104838
|
+
hostExpression = false;
|
|
104839
|
+
}
|
|
104840
|
+
else {
|
|
104841
|
+
ret += new sql_field_name_1.SQLFieldNameTranspiler().transpile(child, traversal).getCode();
|
|
104842
|
+
}
|
|
104588
104843
|
}
|
|
104589
104844
|
else if (child.get() instanceof abaplint.Expressions.SQLSource
|
|
104590
104845
|
&& child instanceof abaplint.Nodes.ExpressionNode) {
|
|
@@ -110297,6 +110552,30 @@ const constant_1 = __webpack_require__(/*! ../expressions/constant */ "./node_mo
|
|
|
110297
110552
|
const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/@abaplint/transpiler/build/src/expressions/index.js");
|
|
110298
110553
|
const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
|
|
110299
110554
|
class DataTranspiler {
|
|
110555
|
+
skipLoopScoping;
|
|
110556
|
+
variableName = "";
|
|
110557
|
+
loopScoped = false;
|
|
110558
|
+
constructor(options) {
|
|
110559
|
+
this.skipLoopScoping = options?.skipLoopScoping === true;
|
|
110560
|
+
}
|
|
110561
|
+
/** name of the declared javascript variable, set by transpile() */
|
|
110562
|
+
getVariableName() {
|
|
110563
|
+
return this.variableName;
|
|
110564
|
+
}
|
|
110565
|
+
/** set by transpile(), true if the declaration is inside a loop */
|
|
110566
|
+
isLoopScoped() {
|
|
110567
|
+
return this.loopScoped;
|
|
110568
|
+
}
|
|
110569
|
+
/** DATA is scoped to the enclosing method/form/program, but when the statement is inside a
|
|
110570
|
+
* loop the generated declaration ends up inside the javascript block of the loop. Declaring
|
|
110571
|
+
* with "var" hoists it out of the block, and the guard makes sure its constructed only on the
|
|
110572
|
+
* first pass, ie. contents are kept across iterations, matching ABAP */
|
|
110573
|
+
static wrapLoopScoped(name, chunk) {
|
|
110574
|
+
return new chunk_1.Chunk()
|
|
110575
|
+
.appendString(`if (${name} === undefined) {\n`)
|
|
110576
|
+
.appendChunk(chunk)
|
|
110577
|
+
.appendString("\n}");
|
|
110578
|
+
}
|
|
110300
110579
|
transpile(node, traversal) {
|
|
110301
110580
|
const token = node.findFirstExpression(abaplint.Expressions.DefinitionName)?.getFirstToken();
|
|
110302
110581
|
if (token === undefined) {
|
|
@@ -110324,12 +110603,17 @@ class DataTranspiler {
|
|
|
110324
110603
|
value = "\n" + traversal_1.Traversal.prefixVariable(found.getName().toLowerCase()) + ".set(\"" + enumDefault + "\");";
|
|
110325
110604
|
}
|
|
110326
110605
|
}
|
|
110606
|
+
this.variableName = traversal_1.Traversal.prefixVariable(traversal_1.Traversal.escapeNamespace(found.getName().toLowerCase()));
|
|
110607
|
+
this.loopScoped = traversal.isInsideLoop(node);
|
|
110327
110608
|
const ret = new chunk_1.Chunk()
|
|
110328
|
-
.appendString("let ")
|
|
110329
|
-
.appendString(
|
|
110609
|
+
.appendString(this.loopScoped === true ? "var " : "let ")
|
|
110610
|
+
.appendString(this.variableName)
|
|
110330
110611
|
.appendString(" = " + transpile_types_1.TranspileTypes.toType(found.getType()))
|
|
110331
110612
|
.appendString(";")
|
|
110332
110613
|
.appendString(value);
|
|
110614
|
+
if (this.loopScoped === true && this.skipLoopScoping === false) {
|
|
110615
|
+
return DataTranspiler.wrapLoopScoped(this.variableName, ret);
|
|
110616
|
+
}
|
|
110333
110617
|
return ret;
|
|
110334
110618
|
}
|
|
110335
110619
|
static findEnumDefault(scope, _enumType) {
|
|
@@ -110361,7 +110645,7 @@ class DataTranspiler {
|
|
|
110361
110645
|
int = val.findFirstExpression(abaplint.Expressions.ConstantString);
|
|
110362
110646
|
}
|
|
110363
110647
|
if (int) {
|
|
110364
|
-
const escaped = constant_1.ConstantTranspiler.escape(int.concatTokens());
|
|
110648
|
+
const escaped = constant_1.ConstantTranspiler.escape(constant_1.ConstantTranspiler.trimTextFieldLiteral(int.concatTokens()));
|
|
110365
110649
|
value = "\n" + name + ".set(" + escaped + ");";
|
|
110366
110650
|
}
|
|
110367
110651
|
else if (val.getChildren()[1].get() instanceof abaplint.Expressions.SimpleFieldChain) {
|
|
@@ -114129,7 +114413,7 @@ class PerformTranspiler {
|
|
|
114129
114413
|
index++;
|
|
114130
114414
|
}
|
|
114131
114415
|
index = 0;
|
|
114132
|
-
for (const u of node.findDirectExpression(abaplint.Expressions.PerformUsing)?.findDirectExpressions(abaplint.Expressions.
|
|
114416
|
+
for (const u of node.findDirectExpression(abaplint.Expressions.PerformUsing)?.findDirectExpressions(abaplint.Expressions.SimpleSource3) || []) {
|
|
114133
114417
|
const name = def?.getUsingParameters()[index].getName().toLowerCase();
|
|
114134
114418
|
if (name === undefined) {
|
|
114135
114419
|
continue;
|
|
@@ -117919,13 +118203,18 @@ class DataTranspiler {
|
|
|
117919
118203
|
return new chunk_1.Chunk("");
|
|
117920
118204
|
}
|
|
117921
118205
|
const topName = begin.findDirectExpression(abaplint.Expressions.DefinitionName)?.concatTokens().toLowerCase();
|
|
117922
|
-
|
|
118206
|
+
// the component values are part of the declaration, so they must stay inside the loop guard
|
|
118207
|
+
const statement = new statements_1.DataTranspiler({ skipLoopScoping: true });
|
|
118208
|
+
let chunk = statement.transpile(begin, traversal).ensureStartMapping(begin, traversal);
|
|
117923
118209
|
for (const d of node.findDirectStatements(abaplint.Statements.Data)) {
|
|
117924
118210
|
const subName = d.findFirstExpression(abaplint.Expressions.DefinitionName)?.concatTokens().toLowerCase();
|
|
117925
118211
|
if (subName && topName) {
|
|
117926
118212
|
chunk.appendString(statements_1.DataTranspiler.buildValue(d, topName + ".get()." + subName, traversal));
|
|
117927
118213
|
}
|
|
117928
118214
|
}
|
|
118215
|
+
if (statement.isLoopScoped() === true) {
|
|
118216
|
+
chunk = statements_1.DataTranspiler.wrapLoopScoped(statement.getVariableName(), chunk);
|
|
118217
|
+
}
|
|
117929
118218
|
chunk.appendString("\n");
|
|
117930
118219
|
return chunk;
|
|
117931
118220
|
}
|
|
@@ -120149,7 +120438,7 @@ this.INTERNAL_ID = abap.internalIdCounter++;\n`;
|
|
|
120149
120438
|
}
|
|
120150
120439
|
const handle = (val, name) => {
|
|
120151
120440
|
if (typeof val === "string") {
|
|
120152
|
-
const e = expressions_1.ConstantTranspiler.escape(val);
|
|
120441
|
+
const e = expressions_1.ConstantTranspiler.escape(expressions_1.ConstantTranspiler.trimTextFieldLiteral(val));
|
|
120153
120442
|
ret += name + ".set(" + e + ");\n";
|
|
120154
120443
|
}
|
|
120155
120444
|
else if (typeof val === "object") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler-cli",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.48",
|
|
4
4
|
"description": "Transpiler - Command Line Interface",
|
|
5
5
|
"funding": "https://github.com/sponsors/larshp",
|
|
6
6
|
"bin": {
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"author": "abaplint",
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@abaplint/core": "^2.120.
|
|
31
|
-
"@abaplint/transpiler": "^2.13.
|
|
30
|
+
"@abaplint/core": "^2.120.9",
|
|
31
|
+
"@abaplint/transpiler": "^2.13.48",
|
|
32
32
|
"@types/glob": "^8.1.0",
|
|
33
|
-
"@types/node": "^24.
|
|
33
|
+
"@types/node": "^24.13.3",
|
|
34
34
|
"@types/progress": "^2.0.7",
|
|
35
35
|
"glob": "=7.2.0",
|
|
36
36
|
"p-limit": "^3.1.0",
|