@abaplint/transpiler-cli 2.7.120 → 2.7.121

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.
Files changed (2) hide show
  1. package/build/bundle.js +95 -67
  2. package/package.json +4 -4
package/build/bundle.js CHANGED
@@ -49047,7 +49047,7 @@ class Registry {
49047
49047
  }
49048
49048
  static abaplintVersion() {
49049
49049
  // magic, see build script "version.sh"
49050
- return "2.102.60";
49050
+ return "2.102.61";
49051
49051
  }
49052
49052
  getDDICReferences() {
49053
49053
  return this.ddicReferences;
@@ -51611,7 +51611,7 @@ class CheckSubrc extends _abap_rule_1.ABAPRule {
51611
51611
 
51612
51612
  If sy-dbcnt is checked after database statements, it is considered okay.
51613
51613
 
51614
- "SELECT SINGLE @abap_true FROM " is considered as an existence check
51614
+ "SELECT SINGLE @abap_true FROM " is considered as an existence check, also "SELECT COUNT( * )" is considered okay
51615
51615
 
51616
51616
  If IS ASSIGNED is checked after assigning, it is considered okay.
51617
51617
 
@@ -51662,6 +51662,8 @@ FIND statement with MATCH COUNT is considered okay if subrc is not checked`,
51662
51662
  else if (config.selectTable === true
51663
51663
  && statement.get() instanceof Statements.Select
51664
51664
  && statement.concatTokens().toUpperCase().startsWith("SELECT SINGLE ") === false
51665
+ && statement.concatTokens().toUpperCase().startsWith("SELECT COUNT( * ) ") === false
51666
+ && statement.concatTokens().toUpperCase().startsWith("SELECT COUNT(*) ") === false
51665
51667
  && this.isChecked(i, statements) === false
51666
51668
  && this.checksDbcnt(i, statements) === false) {
51667
51669
  issues.push(issue_1.Issue.atStatement(file, statement, message, this.getMetadata().key, this.conf.severity));
@@ -78607,6 +78609,7 @@ exports.MessageTranspiler = MessageTranspiler;
78607
78609
 
78608
78610
  Object.defineProperty(exports, "__esModule", ({ value: true }));
78609
78611
  exports.MethodImplementationTranspiler = void 0;
78612
+ /* eslint-disable max-len */
78610
78613
  const abaplint = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js");
78611
78614
  const transpile_types_1 = __webpack_require__(/*! ../transpile_types */ "./node_modules/@abaplint/transpiler/build/src/transpile_types.js");
78612
78615
  const traversal_1 = __webpack_require__(/*! ../traversal */ "./node_modules/@abaplint/transpiler/build/src/traversal.js");
@@ -78615,7 +78618,7 @@ const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/tr
78615
78618
  const unique_identifier_1 = __webpack_require__(/*! ../unique_identifier */ "./node_modules/@abaplint/transpiler/build/src/unique_identifier.js");
78616
78619
  class MethodImplementationTranspiler {
78617
78620
  transpile(node, traversal) {
78618
- var _a, _b;
78621
+ var _a, _b, _c;
78619
78622
  const token = node.findFirstExpression(abaplint.Expressions.MethodName).getFirstToken();
78620
78623
  let methodName = token.getStr();
78621
78624
  const scope = traversal.findCurrentScopeByToken(token);
@@ -78647,13 +78650,27 @@ class MethodImplementationTranspiler {
78647
78650
  unique = "INPUT";
78648
78651
  }
78649
78652
  const parameterDefault = methodDef === null || methodDef === void 0 ? void 0 : methodDef.getParameterDefault(varName);
78650
- // const isOptional = methodDef?.getOptional().includes(varName.toUpperCase());
78653
+ const isOptional = methodDef === null || methodDef === void 0 ? void 0 : methodDef.getOptional().includes(varName.toUpperCase());
78651
78654
  const passByValue = identifier.getMeta().includes("pass_by_value" /* abaplint.IdentifierMeta.PassByValue */);
78652
78655
  const type = identifier.getType();
78653
78656
  if (identifier.getMeta().includes("exporting" /* abaplint.IdentifierMeta.MethodExporting */)) {
78654
78657
  after += `let ${varName} = ${unique}?.${varName} || ${new transpile_types_1.TranspileTypes().toType(identifier.getType())};\n`;
78658
+ // begin new
78659
+ }
78660
+ else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */)
78661
+ && parameterDefault === undefined
78662
+ && passByValue === false
78663
+ && isOptional === false
78664
+ && type.isGeneric() === false) {
78665
+ after += `let ${varName} = ${unique}?.${varName};\n`;
78666
+ if (identifier.getType().getQualifiedName() !== undefined && identifier.getType().getQualifiedName() !== "") {
78667
+ after += `if (${varName}.getQualifiedName() !== "${(_a = identifier.getType().getQualifiedName()) === null || _a === void 0 ? void 0 : _a.toUpperCase()}") { ${varName} = undefined; }\n`;
78668
+ }
78669
+ after += `if (${varName} === undefined) { ${varName} = ${new transpile_types_1.TranspileTypes().toType(identifier.getType())}.set(${unique}.${varName}); }\n`;
78670
+ // end new
78655
78671
  }
78656
- else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */) && type.isGeneric() === false) {
78672
+ else if (identifier.getMeta().includes("importing" /* abaplint.IdentifierMeta.MethodImporting */)
78673
+ && type.isGeneric() === false) {
78657
78674
  after += new transpile_types_1.TranspileTypes().declare(identifier) + "\n";
78658
78675
  // note: it might be nessesary to do a type conversion, eg char is passed to xstring parameter
78659
78676
  after += "if (" + unique + " && " + unique + "." + varName + ") {" + varName + ".set(" + unique + "." + varName + ");}\n";
@@ -78663,67 +78680,7 @@ class MethodImplementationTranspiler {
78663
78680
  after += "if (" + unique + " && " + unique + "." + varName + ") {" + varName + " = " + unique + "." + varName + ";}\n";
78664
78681
  }
78665
78682
  if (parameterDefault) {
78666
- let val = "";
78667
- if (parameterDefault.get() instanceof abaplint.Expressions.Constant) {
78668
- val = new expressions_1.ConstantTranspiler().transpile(parameterDefault, traversal).getCode();
78669
- }
78670
- else if (parameterDefault.get() instanceof abaplint.Expressions.FieldChain) {
78671
- if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_true") {
78672
- val = "abap.builtin.abap_true";
78673
- }
78674
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_false") {
78675
- val = "abap.builtin.abap_false";
78676
- }
78677
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "abap_undefined") {
78678
- val = "abap.builtin.abap_undefined";
78679
- }
78680
- else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "space") {
78681
- val = "abap.builtin.space";
78682
- }
78683
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-langu") {
78684
- val = "abap.builtin.sy.get().langu";
78685
- }
78686
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-mandt") {
78687
- val = "abap.builtin.sy.get().mandt";
78688
- }
78689
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-uname") {
78690
- val = "abap.builtin.sy.get().uname";
78691
- }
78692
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-sysid") {
78693
- val = "abap.builtin.sy.get().sysid";
78694
- }
78695
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgid") {
78696
- val = "abap.builtin.sy.get().msgid";
78697
- }
78698
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgty") {
78699
- val = "abap.builtin.sy.get().msgty";
78700
- }
78701
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgno") {
78702
- val = "abap.builtin.sy.get().msgno";
78703
- }
78704
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv1") {
78705
- val = "abap.builtin.sy.get().msgv1";
78706
- }
78707
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv2") {
78708
- val = "abap.builtin.sy.get().msgv2";
78709
- }
78710
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv3") {
78711
- val = "abap.builtin.sy.get().msgv3";
78712
- }
78713
- else if (parameterDefault.concatTokens().toLowerCase() === "sy-msgv4") {
78714
- val = "abap.builtin.sy.get().msgv4";
78715
- }
78716
- else {
78717
- // note: this can be difficult, the "def" might be from an interface, ie. a different scope than the method
78718
- val = new expressions_1.FieldChainTranspiler().transpile(parameterDefault, traversal, true, methodDef === null || methodDef === void 0 ? void 0 : methodDef.getFilename(), true).getCode();
78719
- if (val.startsWith(parameterDefault.getFirstToken().getStr().toLowerCase()) === true) {
78720
- val = "this." + val;
78721
- }
78722
- }
78723
- }
78724
- else {
78725
- throw new Error("MethodImplementationTranspiler, unknown default param type");
78726
- }
78683
+ const val = this.buildDefault(parameterDefault, traversal, methodDef === null || methodDef === void 0 ? void 0 : methodDef.getFilename());
78727
78684
  if (passByValue === true || identifier.getMeta().includes("changing" /* abaplint.IdentifierMeta.MethodChanging */)) {
78728
78685
  after += "if (" + unique + " === undefined || " + unique + "." + varName + " === undefined) {" + varName + ".set(" + val + ");}\n";
78729
78686
  }
@@ -78756,7 +78713,7 @@ class MethodImplementationTranspiler {
78756
78713
  }
78757
78714
  if (method && method.isStatic()) {
78758
78715
  // in ABAP static methods can be called with instance arrows, "->"
78759
- const className = (_b = (_a = scope.getParent()) === null || _a === void 0 ? void 0 : _a.getIdentifier().sname) === null || _b === void 0 ? void 0 : _b.toLowerCase();
78716
+ const className = (_c = (_b = scope.getParent()) === null || _b === void 0 ? void 0 : _b.getIdentifier().sname) === null || _c === void 0 ? void 0 : _c.toLowerCase();
78760
78717
  staticMethod = "async " + traversal_1.Traversal.escapeNamespace(methodName) + "(" + unique + ") {\n" +
78761
78718
  "return " + traversal_1.Traversal.escapeNamespace(className) + "." + traversal_1.Traversal.escapeNamespace(methodName) + "(" + unique + ");\n" +
78762
78719
  "}\n" + "static ";
@@ -78766,6 +78723,77 @@ class MethodImplementationTranspiler {
78766
78723
  return new chunk_1.Chunk().append(str, node, traversal);
78767
78724
  }
78768
78725
  /////////////////////////////
78726
+ buildDefault(parameterDefault, traversal, filename) {
78727
+ let val = "";
78728
+ if (parameterDefault.get() instanceof abaplint.Expressions.Constant) {
78729
+ val = new expressions_1.ConstantTranspiler().transpile(parameterDefault, traversal).getCode();
78730
+ }
78731
+ else if (parameterDefault.get() instanceof abaplint.Expressions.FieldChain) {
78732
+ val = this.buildDefaultFallback(parameterDefault, traversal, filename);
78733
+ }
78734
+ else {
78735
+ throw new Error("MethodImplementationTranspiler, unknown default param type");
78736
+ }
78737
+ return val;
78738
+ }
78739
+ buildDefaultFallback(parameterDefault, traversal, filename) {
78740
+ let val = "";
78741
+ const firstTokenLower = parameterDefault.getFirstToken().getStr().toLowerCase();
78742
+ const concat = parameterDefault.concatTokens().toLowerCase();
78743
+ if (firstTokenLower === "abap_true") {
78744
+ val = "abap.builtin.abap_true";
78745
+ }
78746
+ else if (firstTokenLower === "abap_false") {
78747
+ val = "abap.builtin.abap_false";
78748
+ }
78749
+ else if (firstTokenLower === "abap_undefined") {
78750
+ val = "abap.builtin.abap_undefined";
78751
+ }
78752
+ else if (firstTokenLower === "space") {
78753
+ val = "abap.builtin.space";
78754
+ }
78755
+ else if (concat === "sy-langu") {
78756
+ val = "abap.builtin.sy.get().langu";
78757
+ }
78758
+ else if (concat === "sy-mandt") {
78759
+ val = "abap.builtin.sy.get().mandt";
78760
+ }
78761
+ else if (concat === "sy-uname") {
78762
+ val = "abap.builtin.sy.get().uname";
78763
+ }
78764
+ else if (concat === "sy-sysid") {
78765
+ val = "abap.builtin.sy.get().sysid";
78766
+ }
78767
+ else if (concat === "sy-msgid") {
78768
+ val = "abap.builtin.sy.get().msgid";
78769
+ }
78770
+ else if (concat === "sy-msgty") {
78771
+ val = "abap.builtin.sy.get().msgty";
78772
+ }
78773
+ else if (concat === "sy-msgno") {
78774
+ val = "abap.builtin.sy.get().msgno";
78775
+ }
78776
+ else if (concat === "sy-msgv1") {
78777
+ val = "abap.builtin.sy.get().msgv1";
78778
+ }
78779
+ else if (concat === "sy-msgv2") {
78780
+ val = "abap.builtin.sy.get().msgv2";
78781
+ }
78782
+ else if (concat === "sy-msgv3") {
78783
+ val = "abap.builtin.sy.get().msgv3";
78784
+ }
78785
+ else if (concat === "sy-msgv4") {
78786
+ val = "abap.builtin.sy.get().msgv4";
78787
+ }
78788
+ else {
78789
+ // note: this can be difficult, the "def" might be from an interface, ie. a different scope than the method
78790
+ val = new expressions_1.FieldChainTranspiler().transpile(parameterDefault, traversal, true, filename, true).getCode();
78791
+ if (val.startsWith(parameterDefault.getFirstToken().getStr().toLowerCase()) === true) {
78792
+ val = "this." + val;
78793
+ }
78794
+ }
78795
+ return val;
78796
+ }
78769
78797
  findMethod(name, cdef, traversal) {
78770
78798
  var _a, _b;
78771
78799
  if (cdef === undefined) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "2.7.120",
3
+ "version": "2.7.121",
4
4
  "description": "Transpiler - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -26,12 +26,12 @@
26
26
  "author": "abaplint",
27
27
  "license": "MIT",
28
28
  "devDependencies": {
29
- "@abaplint/transpiler": "^2.7.120",
29
+ "@abaplint/transpiler": "^2.7.121",
30
30
  "@types/glob": "^7.2.0",
31
31
  "glob": "=7.2.0",
32
32
  "@types/progress": "^2.0.6",
33
- "@types/node": "^20.8.7",
34
- "@abaplint/core": "^2.102.60",
33
+ "@types/node": "^20.8.8",
34
+ "@abaplint/core": "^2.102.61",
35
35
  "progress": "^2.0.3",
36
36
  "webpack": "^5.89.0",
37
37
  "webpack-cli": "^5.1.4",