@abaplint/cli 2.119.64 → 2.119.66

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 +34 -7
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -27576,7 +27576,8 @@ class TypeUtils {
27576
27576
  console.dir(target);
27577
27577
  console.dir(calculated);
27578
27578
  */
27579
- if (calculated && source instanceof basic_1.StringType && target instanceof basic_1.XStringType) {
27579
+ if (calculated && source instanceof basic_1.StringType
27580
+ && (target instanceof basic_1.XStringType || target instanceof basic_1.XSequenceType)) {
27580
27581
  return false;
27581
27582
  }
27582
27583
  if (calculated) {
@@ -27597,7 +27598,7 @@ class TypeUtils {
27597
27598
  }
27598
27599
  else if (target instanceof basic_1.XStringType) {
27599
27600
  if (((_c = source.getAbstractTypeData()) === null || _c === void 0 ? void 0 : _c.derivedFromConstant) === true) {
27600
- return true;
27601
+ return (node === null || node === void 0 ? void 0 : node.concatTokens()) !== "''";
27601
27602
  }
27602
27603
  return false;
27603
27604
  }
@@ -32289,6 +32290,7 @@ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expr
32289
32290
  const _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ "../core/build/src/abap/types/_typed_identifier.js");
32290
32291
  const basic_1 = __webpack_require__(/*! ../../types/basic */ "../core/build/src/abap/types/basic/index.js");
32291
32292
  const basic_types_1 = __webpack_require__(/*! ../basic_types */ "../core/build/src/abap/5_syntax/basic_types.js");
32293
+ const _syntax_input_1 = __webpack_require__(/*! ../_syntax_input */ "../core/build/src/abap/5_syntax/_syntax_input.js");
32292
32294
  const assert_error_1 = __webpack_require__(/*! ../assert_error */ "../core/build/src/abap/5_syntax/assert_error.js");
32293
32295
  class MethodDefReturning {
32294
32296
  static runSyntax(node, input, meta) {
@@ -32301,8 +32303,11 @@ class MethodDefReturning {
32301
32303
  throw new assert_error_1.AssertError("method_parameter.ts, unexpected structure");
32302
32304
  }
32303
32305
  let found = new basic_types_1.BasicTypes(input).parseType(type);
32304
- if ((found === null || found === void 0 ? void 0 : found.isGeneric()) === true) {
32305
- found = new basic_1.UnknownType("RETURNING parameter must be fully specified");
32306
+ const message = "RETURNING parameter must be fully specified";
32307
+ const typeText = type.concatTokens().toUpperCase();
32308
+ if ((found === null || found === void 0 ? void 0 : found.isGeneric()) === true || typeText === "TYPE X" || typeText === "TYPE C") {
32309
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, type.getFirstToken(), message));
32310
+ found = new basic_1.UnknownType(message);
32306
32311
  }
32307
32312
  if (found) {
32308
32313
  return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), input.filename, found, meta);
@@ -37994,6 +37999,11 @@ class Concatenate {
37994
37999
  runSyntax(node, input) {
37995
38000
  const byteMode = node.findDirectTokenByText("BYTE") !== undefined;
37996
38001
  const linesMode = node.findDirectTokenByText("LINES") !== undefined;
38002
+ if (node.findFirstExpression(Expressions.TableExpression) !== undefined) {
38003
+ const message = "CONCATENATE with table expression not possible";
38004
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
38005
+ return;
38006
+ }
37997
38007
  const target = node.findFirstExpression(Expressions.Target);
37998
38008
  const inline = target === null || target === void 0 ? void 0 : target.findDirectExpression(Expressions.InlineData);
37999
38009
  if (inline) {
@@ -68823,7 +68833,7 @@ class Registry {
68823
68833
  }
68824
68834
  static abaplintVersion() {
68825
68835
  // magic, see build script "version.js"
68826
- return "2.119.64";
68836
+ return "2.119.66";
68827
68837
  }
68828
68838
  getDDICReferences() {
68829
68839
  return this.ddicReferences;
@@ -75568,6 +75578,18 @@ Make sure to test the downported code, it might not always be completely correct
75568
75578
  }
75569
75579
  }
75570
75580
  }
75581
+ // INTO after WHERE parses as a valid SELECT in the low version, but is only allowed in
75582
+ // strict SQL syntax, so move it also when the statement is no longer Unknown
75583
+ if (ret.length === 0) {
75584
+ for (let i = 0; i < lowStatements.length; i++) {
75585
+ const low = lowStatements[i];
75586
+ const high = highStatements[i];
75587
+ const issue = this.downportSQLMoveInto(low, high, lowFile, highSyntax);
75588
+ if (issue) {
75589
+ ret.push(issue);
75590
+ }
75591
+ }
75592
+ }
75571
75593
  }
75572
75594
  return ret;
75573
75595
  }
@@ -75811,10 +75833,14 @@ Make sure to test the downported code, it might not always be completely correct
75811
75833
  return undefined;
75812
75834
  }
75813
75835
  //////////////////////////////////////////
75814
- /** move INTO from after WHERE to after FROM */
75836
+ /** move INTO from after WHERE to after FROM,
75837
+ * note that INTO after WHERE is only valid in strict SQL syntax, so it must be moved when
75838
+ * downporting; this can happen both while the statement is still Unknown(from the main loop)
75839
+ * and after the @ and FIELDS have been removed, leaving a SELECT that parses in the low version */
75815
75840
  downportSQLMoveInto(low, high, lowFile, _highSyntax) {
75816
75841
  var _a;
75817
- if (!(low.get() instanceof _statement_1.Unknown)) {
75842
+ if (!(high.get() instanceof Statements.Select)
75843
+ && !(high.get() instanceof Statements.SelectLoop)) {
75818
75844
  return undefined;
75819
75845
  }
75820
75846
  // note: SQLCond is also used in JOIN(FROM) conditions
@@ -75822,6 +75848,7 @@ Make sure to test the downported code, it might not always be completely correct
75822
75848
  if (where === undefined) {
75823
75849
  return undefined;
75824
75850
  }
75851
+ // the FIELDS list sits between FROM and WHERE, wait for it to be removed first
75825
75852
  if (high.findFirstExpression(Expressions.SQLFields) !== undefined) {
75826
75853
  return undefined;
75827
75854
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.119.64",
3
+ "version": "2.119.66",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "homepage": "https://abaplint.org",
41
41
  "devDependencies": {
42
- "@abaplint/core": "^2.119.64",
42
+ "@abaplint/core": "^2.119.66",
43
43
  "@types/chai": "^4.3.20",
44
44
  "@types/minimist": "^1.2.5",
45
45
  "@types/mocha": "^10.0.10",