@abaplint/transpiler-cli 2.13.14 → 2.13.16
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 +168 -34
- package/package.json +3 -3
package/build/bundle.js
CHANGED
|
@@ -7548,7 +7548,9 @@ class SQLFunction extends combi_1.Expression {
|
|
|
7548
7548
|
const dats_add_months = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^dats_add_months$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7549
7549
|
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)));
|
|
7550
7550
|
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)));
|
|
7551
|
-
|
|
7551
|
+
const right = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^right$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7552
|
+
const left = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^left$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
|
|
7553
|
+
return (0, combi_1.altPrio)(uuid, abs, ceil, floor, cast, div, mod, coalesce, concat, replace, length, lower, upper, round, concat_with_space, ltrim, rtrim, right, left, substring, dats_is_valid, dats_days_between, dats_add_days, dats_add_months);
|
|
7552
7554
|
}
|
|
7553
7555
|
}
|
|
7554
7556
|
exports.SQLFunction = SQLFunction;
|
|
@@ -22439,6 +22441,8 @@ var ScopeType;
|
|
|
22439
22441
|
(function (ScopeType) {
|
|
22440
22442
|
ScopeType["BuiltIn"] = "_builtin";
|
|
22441
22443
|
ScopeType["Dummy"] = "_dummy";
|
|
22444
|
+
// definitions inside this one are local
|
|
22445
|
+
ScopeType["SelectionEvent"] = "selection_event";
|
|
22442
22446
|
ScopeType["Global"] = "_global";
|
|
22443
22447
|
ScopeType["Program"] = "_program";
|
|
22444
22448
|
ScopeType["TypePool"] = "_type_pool";
|
|
@@ -22920,7 +22924,15 @@ class TypeUtils {
|
|
|
22920
22924
|
}
|
|
22921
22925
|
}
|
|
22922
22926
|
else if (source instanceof basic_1.TableType) {
|
|
22923
|
-
if (
|
|
22927
|
+
if (source.getRowType() instanceof basic_1.AnyType) {
|
|
22928
|
+
// then its a generic table, todo: add top level generic table type?
|
|
22929
|
+
return true;
|
|
22930
|
+
}
|
|
22931
|
+
else if (target instanceof basic_1.TableType && target.getRowType() instanceof basic_1.AnyType) {
|
|
22932
|
+
// then its a generic table, todo: add top level generic table type?
|
|
22933
|
+
return true;
|
|
22934
|
+
}
|
|
22935
|
+
else if (target instanceof basic_1.TableType) {
|
|
22924
22936
|
const sourceKeyType = source.getOptions().keyType;
|
|
22925
22937
|
const targetKeyType = target.getOptions().keyType;
|
|
22926
22938
|
if (sourceKeyType !== targetKeyType
|
|
@@ -27500,7 +27512,7 @@ class Select {
|
|
|
27500
27512
|
if (type === undefined) {
|
|
27501
27513
|
return basic_1.VoidType.get("SELECT_todo6");
|
|
27502
27514
|
}
|
|
27503
|
-
components.push({ name: field.code, type });
|
|
27515
|
+
components.push({ name: field.as || field.code, type });
|
|
27504
27516
|
}
|
|
27505
27517
|
return new basic_1.TableType(new basic_1.StructureType(components), tableOptions, undefined);
|
|
27506
27518
|
}
|
|
@@ -27512,6 +27524,9 @@ class Select {
|
|
|
27512
27524
|
const ret = [];
|
|
27513
27525
|
if (node.get() instanceof Expressions.SelectLoop) {
|
|
27514
27526
|
expr = node.findFirstExpression(Expressions.SQLFieldListLoop);
|
|
27527
|
+
if (expr === undefined) {
|
|
27528
|
+
expr = node;
|
|
27529
|
+
}
|
|
27515
27530
|
}
|
|
27516
27531
|
else {
|
|
27517
27532
|
expr = node.findFirstExpression(Expressions.SQLFieldList);
|
|
@@ -27519,7 +27534,8 @@ class Select {
|
|
|
27519
27534
|
if (((_a = expr === null || expr === void 0 ? void 0 : expr.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Dynamic) {
|
|
27520
27535
|
dynamic_1.Dynamic.runSyntax(expr.getFirstChild(), input);
|
|
27521
27536
|
}
|
|
27522
|
-
|
|
27537
|
+
// eslint-disable-next-line max-len
|
|
27538
|
+
for (const field of (expr === null || expr === void 0 ? void 0 : expr.findDirectExpressionsMulti([Expressions.SQLField, Expressions.SQLFieldName, Expressions.SQLAggregation])) || []) {
|
|
27523
27539
|
let code = field.concatTokens().toUpperCase();
|
|
27524
27540
|
const as = ((_b = field.findDirectExpression(Expressions.SQLAsName)) === null || _b === void 0 ? void 0 : _b.concatTokens()) || "";
|
|
27525
27541
|
if (as !== "") {
|
|
@@ -27608,6 +27624,7 @@ const assert_error_1 = __webpack_require__(/*! ../assert_error */ "./node_module
|
|
|
27608
27624
|
// TODO: refactor all these method parameters to objects, this is getting messy
|
|
27609
27625
|
class Source {
|
|
27610
27626
|
static runSyntax(node, input, targetType, writeReference = false, allowGenericDeference = false) {
|
|
27627
|
+
var _a;
|
|
27611
27628
|
if (node === undefined) {
|
|
27612
27629
|
return undefined;
|
|
27613
27630
|
}
|
|
@@ -27685,12 +27702,13 @@ class Source {
|
|
|
27685
27702
|
{
|
|
27686
27703
|
const foundType = this.determineType(node, input, targetType);
|
|
27687
27704
|
const bodyType = conv_body_1.ConvBody.runSyntax(node.findDirectExpression(Expressions.ConvBody), input);
|
|
27705
|
+
const inferred = (_a = node.findDirectExpression(Expressions.TypeNameOrInfer)) === null || _a === void 0 ? void 0 : _a.concatTokens();
|
|
27688
27706
|
if (new _type_utils_1.TypeUtils(input.scope).isConvable(foundType, bodyType) === false) {
|
|
27689
27707
|
const message = `CONV: Types not compatible, ${foundType === null || foundType === void 0 ? void 0 : foundType.constructor.name}, ${bodyType === null || bodyType === void 0 ? void 0 : bodyType.constructor.name}`;
|
|
27690
27708
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
27691
27709
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
27692
27710
|
}
|
|
27693
|
-
else if (foundType === null || foundType === void 0 ? void 0 : foundType.isGeneric()) {
|
|
27711
|
+
else if ((foundType === null || foundType === void 0 ? void 0 : foundType.isGeneric()) && inferred !== "#") {
|
|
27694
27712
|
const message = "Cannot CONV to generic type";
|
|
27695
27713
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
27696
27714
|
return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
|
|
@@ -31706,6 +31724,42 @@ exports.GetParameter = GetParameter;
|
|
|
31706
31724
|
|
|
31707
31725
|
/***/ },
|
|
31708
31726
|
|
|
31727
|
+
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_pf_status.js"
|
|
31728
|
+
/*!*****************************************************************************************!*\
|
|
31729
|
+
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_pf_status.js ***!
|
|
31730
|
+
\*****************************************************************************************/
|
|
31731
|
+
(__unused_webpack_module, exports, __webpack_require__) {
|
|
31732
|
+
|
|
31733
|
+
"use strict";
|
|
31734
|
+
|
|
31735
|
+
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
31736
|
+
exports.GetPFStatus = void 0;
|
|
31737
|
+
const Expressions = __webpack_require__(/*! ../../2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
31738
|
+
const source_1 = __webpack_require__(/*! ../expressions/source */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js");
|
|
31739
|
+
const target_1 = __webpack_require__(/*! ../expressions/target */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/target.js");
|
|
31740
|
+
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
31741
|
+
const inline_data_1 = __webpack_require__(/*! ../expressions/inline_data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/inline_data.js");
|
|
31742
|
+
class GetPFStatus {
|
|
31743
|
+
runSyntax(node, input) {
|
|
31744
|
+
for (const s of node.findDirectExpressions(Expressions.Source)) {
|
|
31745
|
+
source_1.Source.runSyntax(s, input);
|
|
31746
|
+
}
|
|
31747
|
+
for (const t of node.findDirectExpressions(Expressions.Target)) {
|
|
31748
|
+
const inline = t === null || t === void 0 ? void 0 : t.findDirectExpression(Expressions.InlineData);
|
|
31749
|
+
if (inline) {
|
|
31750
|
+
inline_data_1.InlineData.runSyntax(inline, input, basic_1.VoidType.get("GET_PF_STATUS"));
|
|
31751
|
+
}
|
|
31752
|
+
else {
|
|
31753
|
+
target_1.Target.runSyntax(t, input);
|
|
31754
|
+
}
|
|
31755
|
+
}
|
|
31756
|
+
}
|
|
31757
|
+
}
|
|
31758
|
+
exports.GetPFStatus = GetPFStatus;
|
|
31759
|
+
//# sourceMappingURL=get_pf_status.js.map
|
|
31760
|
+
|
|
31761
|
+
/***/ },
|
|
31762
|
+
|
|
31709
31763
|
/***/ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_reference.js"
|
|
31710
31764
|
/*!*****************************************************************************************!*\
|
|
31711
31765
|
!*** ./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_reference.js ***!
|
|
@@ -32996,16 +33050,21 @@ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modu
|
|
|
32996
33050
|
const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
32997
33051
|
class Parameter {
|
|
32998
33052
|
runSyntax(node, input) {
|
|
32999
|
-
|
|
33000
|
-
|
|
33053
|
+
const nameExpression = node.findFirstExpression(Expressions.FieldSub);
|
|
33054
|
+
if (nameExpression === undefined) {
|
|
33055
|
+
return;
|
|
33056
|
+
}
|
|
33057
|
+
let nameToken = nameExpression.getFirstToken();
|
|
33058
|
+
// FieldSub can include dashes and optional length, eg p-tcode or p_table(4).
|
|
33059
|
+
if (nameExpression.getChildren().length > 1) {
|
|
33060
|
+
const fullName = nameExpression.concatTokens().replace(/\(.+$/, "").replace(/\[\]$/, "");
|
|
33061
|
+
nameToken = new tokens_1.Identifier(nameToken.getStart(), fullName);
|
|
33062
|
+
}
|
|
33001
33063
|
if (nameToken && nameToken.getStr().length > 8) {
|
|
33002
33064
|
const message = "Parameter name too long, " + nameToken.getStr();
|
|
33003
33065
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
33004
33066
|
return;
|
|
33005
33067
|
}
|
|
33006
|
-
else if (nameToken === undefined) {
|
|
33007
|
-
return;
|
|
33008
|
-
}
|
|
33009
33068
|
if (node.findDirectTokenByText("RADIOBUTTON") && node.findDirectTokenByText("LENGTH")) {
|
|
33010
33069
|
const message = "RADIOBUTTON and LENGTH not possible together";
|
|
33011
33070
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
|
|
@@ -33812,23 +33871,28 @@ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modu
|
|
|
33812
33871
|
const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
|
|
33813
33872
|
class SelectOption {
|
|
33814
33873
|
runSyntax(node, input) {
|
|
33815
|
-
|
|
33816
|
-
|
|
33874
|
+
const nameExpression = node.findFirstExpression(Expressions.FieldSub);
|
|
33875
|
+
if (nameExpression === undefined) {
|
|
33876
|
+
return;
|
|
33877
|
+
}
|
|
33878
|
+
let nameToken = nameExpression.getFirstToken();
|
|
33879
|
+
// FieldSub can include dashes and optional length, eg s-matnr or s_name(10).
|
|
33880
|
+
if (nameExpression.getChildren().length > 1) {
|
|
33881
|
+
const fullName = nameExpression.concatTokens().replace(/\(.+$/, "").replace(/\[\]$/, "");
|
|
33882
|
+
nameToken = new tokens_1.Identifier(nameToken.getStart(), fullName);
|
|
33883
|
+
}
|
|
33817
33884
|
if (nameToken && nameToken.getStr().length > 8) {
|
|
33818
33885
|
const message = "Select-option name too long, " + nameToken.getStr();
|
|
33819
33886
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, nameToken, message));
|
|
33820
33887
|
return;
|
|
33821
33888
|
}
|
|
33822
|
-
else if (nameToken === undefined) {
|
|
33823
|
-
return;
|
|
33824
|
-
}
|
|
33825
33889
|
for (const d of node.findDirectExpressions(Expressions.Dynamic)) {
|
|
33826
33890
|
dynamic_1.Dynamic.runSyntax(d, input);
|
|
33827
33891
|
input.scope.addIdentifier(new _typed_identifier_1.TypedIdentifier(nameToken, input.filename, basic_1.VoidType.get("DYNAMIC_SELECT_OPTION")));
|
|
33828
33892
|
return;
|
|
33829
33893
|
}
|
|
33830
|
-
const
|
|
33831
|
-
let found = new basic_types_1.BasicTypes(input).resolveLikeName(
|
|
33894
|
+
const nameChain = node.findFirstExpression(Expressions.FieldChain);
|
|
33895
|
+
let found = new basic_types_1.BasicTypes(input).resolveLikeName(nameChain);
|
|
33832
33896
|
if (found) {
|
|
33833
33897
|
if (found instanceof basic_1.StructureType) {
|
|
33834
33898
|
let length = 0;
|
|
@@ -34751,6 +34815,7 @@ const Expressions = __webpack_require__(/*! ../../2_statements/expressions */ ".
|
|
|
34751
34815
|
const basic_1 = __webpack_require__(/*! ../../types/basic */ "./node_modules/@abaplint/core/build/src/abap/types/basic/index.js");
|
|
34752
34816
|
const inline_data_1 = __webpack_require__(/*! ../expressions/inline_data */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/inline_data.js");
|
|
34753
34817
|
const target_1 = __webpack_require__(/*! ../expressions/target */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/target.js");
|
|
34818
|
+
const _reference_1 = __webpack_require__(/*! ../_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js");
|
|
34754
34819
|
const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
34755
34820
|
class WhenType {
|
|
34756
34821
|
runSyntax(node, input) {
|
|
@@ -34760,19 +34825,21 @@ class WhenType {
|
|
|
34760
34825
|
return undefined;
|
|
34761
34826
|
}
|
|
34762
34827
|
let type = undefined;
|
|
34763
|
-
const className = nameToken.getStr();
|
|
34764
|
-
const found = input.scope.
|
|
34765
|
-
if (found ===
|
|
34828
|
+
const className = nameToken.getStr().toUpperCase();
|
|
34829
|
+
const found = input.scope.existsObject(className);
|
|
34830
|
+
if (found === null || found === void 0 ? void 0 : found.id) {
|
|
34831
|
+
type = new basic_1.ObjectReferenceType(found.id);
|
|
34832
|
+
input.scope.addReference(nameToken, found.id, _reference_1.ReferenceType.ObjectOrientedReference, input.filename);
|
|
34833
|
+
}
|
|
34834
|
+
else if (input.scope.getDDIC().inErrorNamespace(className) === false) {
|
|
34766
34835
|
type = basic_1.VoidType.get(className);
|
|
34836
|
+
input.scope.addReference(nameToken, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename, { ooName: className, ooType: "Void" });
|
|
34767
34837
|
}
|
|
34768
|
-
else
|
|
34838
|
+
else {
|
|
34769
34839
|
const message = "Class " + className + " not found";
|
|
34770
34840
|
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, nameToken, message));
|
|
34771
34841
|
return;
|
|
34772
34842
|
}
|
|
34773
|
-
else {
|
|
34774
|
-
type = new basic_1.ObjectReferenceType(found);
|
|
34775
|
-
}
|
|
34776
34843
|
const target = node === null || node === void 0 ? void 0 : node.findDirectExpression(Expressions.Target);
|
|
34777
34844
|
const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
|
|
34778
34845
|
if (inline) {
|
|
@@ -35523,6 +35590,7 @@ const read_report_1 = __webpack_require__(/*! ./statements/read_report */ "./nod
|
|
|
35523
35590
|
const authority_check_1 = __webpack_require__(/*! ./statements/authority_check */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/authority_check.js");
|
|
35524
35591
|
const insert_report_1 = __webpack_require__(/*! ./statements/insert_report */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/insert_report.js");
|
|
35525
35592
|
const get_reference_1 = __webpack_require__(/*! ./statements/get_reference */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_reference.js");
|
|
35593
|
+
const get_pf_status_1 = __webpack_require__(/*! ./statements/get_pf_status */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/get_pf_status.js");
|
|
35526
35594
|
const insert_database_1 = __webpack_require__(/*! ./statements/insert_database */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/insert_database.js");
|
|
35527
35595
|
const delete_database_1 = __webpack_require__(/*! ./statements/delete_database */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/delete_database.js");
|
|
35528
35596
|
const import_dynpro_1 = __webpack_require__(/*! ./statements/import_dynpro */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/import_dynpro.js");
|
|
@@ -35591,6 +35659,7 @@ const commit_entities_1 = __webpack_require__(/*! ./statements/commit_entities *
|
|
|
35591
35659
|
const _syntax_input_1 = __webpack_require__(/*! ./_syntax_input */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/_syntax_input.js");
|
|
35592
35660
|
const assert_error_1 = __webpack_require__(/*! ./assert_error */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/assert_error.js");
|
|
35593
35661
|
const field_group_1 = __webpack_require__(/*! ./statements/field_group */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/field_group.js");
|
|
35662
|
+
const stuff_1 = __webpack_require__(/*! ../../stuff */ "./node_modules/@abaplint/core/build/src/stuff.js");
|
|
35594
35663
|
// -----------------------------------
|
|
35595
35664
|
const map = {};
|
|
35596
35665
|
function addToMap(handler) {
|
|
@@ -35676,6 +35745,7 @@ if (Object.keys(map).length === 0) {
|
|
|
35676
35745
|
addToMap(new if_1.If());
|
|
35677
35746
|
addToMap(new log_point_1.LogPoint());
|
|
35678
35747
|
addToMap(new while_1.While());
|
|
35748
|
+
addToMap(new get_pf_status_1.GetPFStatus());
|
|
35679
35749
|
addToMap(new with_1.With());
|
|
35680
35750
|
addToMap(new with_loop_1.WithLoop());
|
|
35681
35751
|
addToMap(new call_transformation_1.CallTransformation());
|
|
@@ -35844,6 +35914,9 @@ class SyntaxLogic {
|
|
|
35844
35914
|
updateScopeStructure(node) {
|
|
35845
35915
|
const filename = this.currentFile.getFilename();
|
|
35846
35916
|
const stru = node.get();
|
|
35917
|
+
if (this.scope.getType() === _scope_type_1.ScopeType.SelectionEvent && this.isSelectionEventBoundaryStructure(stru)) {
|
|
35918
|
+
this.scope.pop(node.getFirstToken().getStart());
|
|
35919
|
+
}
|
|
35847
35920
|
const input = {
|
|
35848
35921
|
scope: this.scope,
|
|
35849
35922
|
filename,
|
|
@@ -35883,6 +35956,7 @@ class SyntaxLogic {
|
|
|
35883
35956
|
updateScopeStatement(node) {
|
|
35884
35957
|
const filename = this.currentFile.getFilename();
|
|
35885
35958
|
const s = node.get();
|
|
35959
|
+
this.updateSelectionEventScope(node);
|
|
35886
35960
|
const input = {
|
|
35887
35961
|
scope: this.scope,
|
|
35888
35962
|
filename,
|
|
@@ -35928,6 +36002,28 @@ class SyntaxLogic {
|
|
|
35928
36002
|
}
|
|
35929
36003
|
}
|
|
35930
36004
|
}
|
|
36005
|
+
updateSelectionEventScope(node) {
|
|
36006
|
+
const statement = node.get();
|
|
36007
|
+
if (this.scope.getType() === _scope_type_1.ScopeType.SelectionEvent && this.isSelectionEventBoundary(statement)) {
|
|
36008
|
+
this.scope.pop(node.getFirstToken().getStart());
|
|
36009
|
+
}
|
|
36010
|
+
if (this.opensSelectionEventScope(statement)) {
|
|
36011
|
+
this.scope.push(_scope_type_1.ScopeType.SelectionEvent, statement.constructor.name, node.getFirstToken().getStart(), this.currentFile.getFilename());
|
|
36012
|
+
}
|
|
36013
|
+
}
|
|
36014
|
+
opensSelectionEventScope(statement) {
|
|
36015
|
+
return statement instanceof Statements.AtSelectionScreen;
|
|
36016
|
+
}
|
|
36017
|
+
isSelectionEventBoundary(statement) {
|
|
36018
|
+
return stuff_1.SELECTION_EVENTS.some(event => statement instanceof event)
|
|
36019
|
+
|| statement instanceof Statements.Form
|
|
36020
|
+
|| statement instanceof Statements.Module
|
|
36021
|
+
|| statement instanceof Statements.FunctionModule;
|
|
36022
|
+
}
|
|
36023
|
+
isSelectionEventBoundaryStructure(structure) {
|
|
36024
|
+
return structure instanceof Structures.ClassDefinition
|
|
36025
|
+
|| structure instanceof Structures.Interface;
|
|
36026
|
+
}
|
|
35931
36027
|
}
|
|
35932
36028
|
exports.SyntaxLogic = SyntaxLogic;
|
|
35933
36029
|
//# sourceMappingURL=syntax.js.map
|
|
@@ -39252,7 +39348,7 @@ class ClassDefinition extends _identifier_1.Identifier {
|
|
|
39252
39348
|
input.scope.addReference(token, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename);
|
|
39253
39349
|
}
|
|
39254
39350
|
else {
|
|
39255
|
-
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, name.toUpperCase() + " does not exist"));
|
|
39351
|
+
input.issues.push((0, _syntax_input_1.syntaxIssue)(input, token, "Friend class " + name.toUpperCase() + " does not exist"));
|
|
39256
39352
|
}
|
|
39257
39353
|
result.push(name);
|
|
39258
39354
|
}
|
|
@@ -55053,7 +55149,7 @@ class Registry {
|
|
|
55053
55149
|
}
|
|
55054
55150
|
static abaplintVersion() {
|
|
55055
55151
|
// magic, see build script "version.sh"
|
|
55056
|
-
return "2.119.
|
|
55152
|
+
return "2.119.10";
|
|
55057
55153
|
}
|
|
55058
55154
|
getDDICReferences() {
|
|
55059
55155
|
return this.ddicReferences;
|
|
@@ -67589,6 +67685,7 @@ const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./
|
|
|
67589
67685
|
const _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ "./node_modules/@abaplint/core/build/src/rules/_abap_rule.js");
|
|
67590
67686
|
const Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
67591
67687
|
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
67688
|
+
const edit_helper_1 = __webpack_require__(/*! ../edit_helper */ "./node_modules/@abaplint/core/build/src/edit_helper.js");
|
|
67592
67689
|
class KeepSingleParameterCallsOnOneLineConf extends _basic_rule_config_1.BasicRuleConfig {
|
|
67593
67690
|
constructor() {
|
|
67594
67691
|
super(...arguments);
|
|
@@ -67608,7 +67705,7 @@ class KeepSingleParameterCallsOnOneLine extends _abap_rule_1.ABAPRule {
|
|
|
67608
67705
|
title: "Keep single parameters on one line",
|
|
67609
67706
|
shortDescription: `Keep single parameter calls on one line`,
|
|
67610
67707
|
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-single-parameter-calls-on-one-line`,
|
|
67611
|
-
tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
|
|
67708
|
+
tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Quickfix],
|
|
67612
67709
|
badExample: `call_method(\n 2 ).`,
|
|
67613
67710
|
goodExample: `call_method( 2 ).`,
|
|
67614
67711
|
};
|
|
@@ -67684,7 +67781,8 @@ class KeepSingleParameterCallsOnOneLine extends _abap_rule_1.ABAPRule {
|
|
|
67684
67781
|
}
|
|
67685
67782
|
}
|
|
67686
67783
|
const message = "Keep single parameter on one line";
|
|
67687
|
-
|
|
67784
|
+
const fix = edit_helper_1.EditHelper.replaceRange(file, c.getFirstToken().getStart(), c.getLastToken().getEnd(), c.concatTokens());
|
|
67785
|
+
return [issue_1.Issue.atToken(file, c.getFirstToken(), message, this.getMetadata().key, this.conf.severity, fix)];
|
|
67688
67786
|
}
|
|
67689
67787
|
return [];
|
|
67690
67788
|
}
|
|
@@ -68775,6 +68873,7 @@ const issue_1 = __webpack_require__(/*! ../issue */ "./node_modules/@abaplint/co
|
|
|
68775
68873
|
const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js");
|
|
68776
68874
|
const Objects = __webpack_require__(/*! ../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
|
|
68777
68875
|
const _abap_object_1 = __webpack_require__(/*! ../objects/_abap_object */ "./node_modules/@abaplint/core/build/src/objects/_abap_object.js");
|
|
68876
|
+
const _irule_1 = __webpack_require__(/*! ./_irule */ "./node_modules/@abaplint/core/build/src/rules/_irule.js");
|
|
68778
68877
|
const Statements = __webpack_require__(/*! ../abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
|
|
68779
68878
|
const Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
|
|
68780
68879
|
const position_1 = __webpack_require__(/*! ../position */ "./node_modules/@abaplint/core/build/src/position.js");
|
|
@@ -68792,6 +68891,7 @@ class MainFileContents {
|
|
|
68792
68891
|
key: "main_file_contents",
|
|
68793
68892
|
title: "Main file contents",
|
|
68794
68893
|
shortDescription: `Checks related to report declarations.`,
|
|
68894
|
+
tags: [_irule_1.RuleTag.Syntax],
|
|
68795
68895
|
extendedInformation: `Does not run if the target version is Cloud
|
|
68796
68896
|
|
|
68797
68897
|
* PROGs must begin with "REPORT <name>." or "PROGRAM <name>.
|
|
@@ -72552,6 +72652,19 @@ This rule makes sure the spaces are consistently required across the language.`,
|
|
|
72552
72652
|
return issues;
|
|
72553
72653
|
}
|
|
72554
72654
|
missingSpace(statement) {
|
|
72655
|
+
{
|
|
72656
|
+
const tokens = statement.getTokens();
|
|
72657
|
+
for (let i = 1; i < tokens.length; i++) {
|
|
72658
|
+
const prev = tokens[i - 1];
|
|
72659
|
+
const current = tokens[i];
|
|
72660
|
+
if (prev.getStr() === ")"
|
|
72661
|
+
&& current.getStr() === "="
|
|
72662
|
+
&& prev.getRow() === current.getRow()
|
|
72663
|
+
&& prev.getEnd().getCol() === current.getStart().getCol()) {
|
|
72664
|
+
return current.getStart();
|
|
72665
|
+
}
|
|
72666
|
+
}
|
|
72667
|
+
}
|
|
72555
72668
|
const found = statement.findAllExpressionsMulti([
|
|
72556
72669
|
Expressions.CondSub, Expressions.SQLCond, Expressions.ValueBodyLine,
|
|
72557
72670
|
Expressions.NewObject, Expressions.Cond, Expressions.ComponentCond,
|
|
@@ -81963,8 +82076,8 @@ class CorrespondingBodyTranspiler {
|
|
|
81963
82076
|
const type = new type_name_or_infer_1.TypeNameOrInfer().findType(typ, traversal);
|
|
81964
82077
|
let target = transpile_types_1.TranspileTypes.toType(type);
|
|
81965
82078
|
let source;
|
|
82079
|
+
const isTableType = type instanceof core_1.BasicTypes.TableType;
|
|
81966
82080
|
const mapping = [];
|
|
81967
|
-
const mappingRow = { componentName: undefined, componentChain: undefined };
|
|
81968
82081
|
for (const child of body.getChildren()) {
|
|
81969
82082
|
const c = child.get();
|
|
81970
82083
|
if (c instanceof core_1.Expressions.Source && child instanceof core_1.Nodes.ExpressionNode) {
|
|
@@ -81975,6 +82088,7 @@ class CorrespondingBodyTranspiler {
|
|
|
81975
82088
|
target = `abap.statements.moveCorresponding(${source.getCode()}, ${target})`;
|
|
81976
82089
|
}
|
|
81977
82090
|
else if (c instanceof core_1.Expressions.CorrespondingBodyMapping && child instanceof core_1.Nodes.ExpressionNode) {
|
|
82091
|
+
let mappingRow = { componentName: undefined, componentChain: undefined };
|
|
81978
82092
|
for (const cc of child.getChildren()) {
|
|
81979
82093
|
if (cc.get() instanceof core_1.Expressions.ComponentName) {
|
|
81980
82094
|
mappingRow.componentName = cc;
|
|
@@ -81982,6 +82096,7 @@ class CorrespondingBodyTranspiler {
|
|
|
81982
82096
|
else if (cc.get() instanceof core_1.Expressions.ComponentChain) {
|
|
81983
82097
|
mappingRow.componentChain = cc;
|
|
81984
82098
|
mapping.push(mappingRow);
|
|
82099
|
+
mappingRow = { componentName: undefined, componentChain: undefined };
|
|
81985
82100
|
}
|
|
81986
82101
|
}
|
|
81987
82102
|
}
|
|
@@ -81991,13 +82106,32 @@ class CorrespondingBodyTranspiler {
|
|
|
81991
82106
|
}
|
|
81992
82107
|
const ret = new chunk_1.Chunk();
|
|
81993
82108
|
const id = unique_identifier_1.UniqueIdentifier.get();
|
|
82109
|
+
const sourceId = unique_identifier_1.UniqueIdentifier.get();
|
|
81994
82110
|
ret.appendString("(await (async () => {\n");
|
|
81995
82111
|
ret.appendString(`const ${id} = ${target};\n`);
|
|
81996
|
-
ret.appendString(`
|
|
81997
|
-
|
|
81998
|
-
const
|
|
81999
|
-
const
|
|
82000
|
-
|
|
82112
|
+
ret.appendString(`const ${sourceId} = ${source.getCode()};\n`);
|
|
82113
|
+
if (isTableType) {
|
|
82114
|
+
const rowTargetType = transpile_types_1.TranspileTypes.toType(type.getRowType());
|
|
82115
|
+
const sourceRowId = unique_identifier_1.UniqueIdentifier.get();
|
|
82116
|
+
const targetRowId = unique_identifier_1.UniqueIdentifier.get();
|
|
82117
|
+
ret.appendString(`for (const ${sourceRowId} of ${sourceId}.array()) {\n`);
|
|
82118
|
+
ret.appendString(`const ${targetRowId} = ${rowTargetType};\n`);
|
|
82119
|
+
ret.appendString(`abap.statements.moveCorresponding(${sourceRowId}, ${targetRowId});\n`);
|
|
82120
|
+
for (const map of mapping) {
|
|
82121
|
+
const componentName = map.componentName.concatTokens().toLowerCase();
|
|
82122
|
+
const chain = new component_chain_1.ComponentChainTranspiler().transpile(map.componentChain, traversal).getCode();
|
|
82123
|
+
ret.appendString(`${targetRowId}.get().${componentName}.set(${sourceRowId}.get().${chain});\n`);
|
|
82124
|
+
}
|
|
82125
|
+
ret.appendString(`abap.statements.insertInternal({table: ${id}, data: ${targetRowId}});\n`);
|
|
82126
|
+
ret.appendString("}\n");
|
|
82127
|
+
}
|
|
82128
|
+
else {
|
|
82129
|
+
ret.appendString(`abap.statements.moveCorresponding(${sourceId}, ${id});\n`);
|
|
82130
|
+
for (const map of mapping) {
|
|
82131
|
+
const componentName = map.componentName.concatTokens().toLowerCase();
|
|
82132
|
+
const chain = new component_chain_1.ComponentChainTranspiler().transpile(map.componentChain, traversal).getCode();
|
|
82133
|
+
ret.appendString(`${id}.get().${componentName}.set(${sourceId}.get().${chain});\n`);
|
|
82134
|
+
}
|
|
82001
82135
|
}
|
|
82002
82136
|
ret.appendString("return " + id + ";\n");
|
|
82003
82137
|
ret.appendString("})())");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler-cli",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.16",
|
|
4
4
|
"description": "Transpiler - Command Line Interface",
|
|
5
5
|
"funding": "https://github.com/sponsors/larshp",
|
|
6
6
|
"bin": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"author": "abaplint",
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@abaplint/core": "^2.119.
|
|
31
|
-
"@abaplint/transpiler": "^2.13.
|
|
30
|
+
"@abaplint/core": "^2.119.10",
|
|
31
|
+
"@abaplint/transpiler": "^2.13.16",
|
|
32
32
|
"@types/glob": "^8.1.0",
|
|
33
33
|
"@types/node": "^24.12.2",
|
|
34
34
|
"@types/progress": "^2.0.7",
|