@abaplint/cli 2.101.31 → 2.101.33

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/cli.js +41 -2
  2. package/package.json +3 -3
package/build/cli.js CHANGED
@@ -48465,7 +48465,7 @@ class Registry {
48465
48465
  }
48466
48466
  static abaplintVersion() {
48467
48467
  // magic, see build script "version.sh"
48468
- return "2.101.31";
48468
+ return "2.101.33";
48469
48469
  }
48470
48470
  getDDICReferences() {
48471
48471
  return this.ddicReferences;
@@ -53465,6 +53465,10 @@ Make sure to test the downported code, it might not always be completely correct
53465
53465
  if (found) {
53466
53466
  return found;
53467
53467
  }
53468
+ found = this.downportSelectExistence(low, high, lowFile, highSyntax);
53469
+ if (found) {
53470
+ return found;
53471
+ }
53468
53472
  found = this.downportSQLExtras(low, high, lowFile, highSyntax);
53469
53473
  if (found) {
53470
53474
  return found;
@@ -53594,6 +53598,7 @@ Make sure to test the downported code, it might not always be completely correct
53594
53598
  return undefined;
53595
53599
  }
53596
53600
  //////////////////////////////////////////
53601
+ /** removes @'s */
53597
53602
  downportSQLExtras(low, high, lowFile, highSyntax) {
53598
53603
  if (!(low.get() instanceof _statement_1.Unknown)) {
53599
53604
  return undefined;
@@ -53666,6 +53671,35 @@ Make sure to test the downported code, it might not always be completely correct
53666
53671
  }
53667
53672
  return undefined;
53668
53673
  }
53674
+ downportSelectExistence(low, high, lowFile, highSyntax) {
53675
+ var _a, _b, _c, _d;
53676
+ if (!(low.get() instanceof _statement_1.Unknown)) {
53677
+ return undefined;
53678
+ }
53679
+ else if (!(high.get() instanceof Statements.Select)) {
53680
+ return undefined;
53681
+ }
53682
+ const fieldList = high.findFirstExpression(Expressions.SQLFieldList);
53683
+ if ((fieldList === null || fieldList === void 0 ? void 0 : fieldList.concatTokens().toUpperCase()) !== "@ABAP_TRUE") {
53684
+ return undefined;
53685
+ }
53686
+ const fieldName = (_b = (_a = high.findFirstExpression(Expressions.SQLCond)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(Expressions.SQLFieldName)) === null || _b === void 0 ? void 0 : _b.concatTokens();
53687
+ if (fieldName === undefined) {
53688
+ return undefined;
53689
+ }
53690
+ const into = high.findFirstExpression(Expressions.SQLIntoStructure);
53691
+ if (into === undefined) {
53692
+ return undefined;
53693
+ }
53694
+ const intoName = (_d = (_c = into.findFirstExpression(Expressions.SQLTarget)) === null || _c === void 0 ? void 0 : _c.findFirstExpression(Expressions.Target)) === null || _d === void 0 ? void 0 : _d.concatTokens();
53695
+ const uniqueName = this.uniqueName(high.getFirstToken().getStart(), lowFile.getFilename(), highSyntax);
53696
+ const fix1 = edit_helper_1.EditHelper.replaceRange(lowFile, fieldList.getFirstToken().getStart(), fieldList.getLastToken().getEnd(), fieldName);
53697
+ const fix2 = edit_helper_1.EditHelper.replaceRange(lowFile, into === null || into === void 0 ? void 0 : into.getFirstToken().getStart(), into === null || into === void 0 ? void 0 : into.getLastToken().getEnd(), `INTO @DATA(${uniqueName})`);
53698
+ let fix = edit_helper_1.EditHelper.merge(fix2, fix1);
53699
+ const fix3 = edit_helper_1.EditHelper.insertAt(lowFile, high.getLastToken().getEnd(), `\nCLEAR ${intoName}.\nIF sy-subrc = 0.\n ${intoName} = abap_true\nENDIF.`);
53700
+ fix = edit_helper_1.EditHelper.merge(fix, fix3);
53701
+ return issue_1.Issue.atToken(lowFile, low.getFirstToken(), "SQL, refactor existence check", this.getMetadata().key, this.conf.severity, fix);
53702
+ }
53669
53703
  downportSelectInline(low, high, lowFile, highSyntax) {
53670
53704
  if (!(low.get() instanceof _statement_1.Unknown)) {
53671
53705
  return undefined;
@@ -64876,7 +64910,9 @@ class SelectSingleFullKey {
64876
64910
  key: "select_single_full_key",
64877
64911
  title: "Detect SELECT SINGLE which are possibily not unique",
64878
64912
  shortDescription: `Detect SELECT SINGLE which are possibily not unique`,
64879
- extendedInformation: `Table definitions must be known, ie. inside the errorNamespace`,
64913
+ extendedInformation: `Table definitions must be known, ie. inside the errorNamespace
64914
+
64915
+ If the statement contains a JOIN it is not checked`,
64880
64916
  pseudoComment: "EC CI_NOORDER",
64881
64917
  tags: [],
64882
64918
  };
@@ -64917,6 +64953,9 @@ class SelectSingleFullKey {
64917
64953
  if (!(s.get() instanceof __1.Statements.Select)) {
64918
64954
  continue;
64919
64955
  }
64956
+ else if (s.findFirstExpression(__1.Expressions.SQLJoin)) {
64957
+ continue;
64958
+ }
64920
64959
  else if (s.findTokenSequencePosition("SELECT", "SINGLE") === undefined) {
64921
64960
  continue;
64922
64961
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.101.31",
3
+ "version": "2.101.33",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -38,12 +38,12 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.101.31",
41
+ "@abaplint/core": "^2.101.33",
42
42
  "@types/chai": "^4.3.5",
43
43
  "@types/glob": "^7.2.0",
44
44
  "@types/minimist": "^1.2.2",
45
45
  "@types/mocha": "^10.0.1",
46
- "@types/node": "^20.3.3",
46
+ "@types/node": "^20.4.1",
47
47
  "@types/progress": "^2.0.5",
48
48
  "chai": "^4.3.7",
49
49
  "chalk": "^5.3.0",