@abaplint/cli 2.113.39 → 2.113.41

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 +99 -40
  2. package/package.json +3 -3
package/build/cli.js CHANGED
@@ -5947,6 +5947,7 @@ __exportStar(__webpack_require__(/*! ./sql_for_all_entries */ "./node_modules/@a
5947
5947
  __exportStar(__webpack_require__(/*! ./sql_from_source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_from_source.js"), exports);
5948
5948
  __exportStar(__webpack_require__(/*! ./sql_from */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_from.js"), exports);
5949
5949
  __exportStar(__webpack_require__(/*! ./sql_function */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function.js"), exports);
5950
+ __exportStar(__webpack_require__(/*! ./sql_function_input */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js"), exports);
5950
5951
  __exportStar(__webpack_require__(/*! ./sql_group_by */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_group_by.js"), exports);
5951
5952
  __exportStar(__webpack_require__(/*! ./sql_having */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_having.js"), exports);
5952
5953
  __exportStar(__webpack_require__(/*! ./sql_hints */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_hints.js"), exports);
@@ -8381,37 +8382,29 @@ exports.SQLFromSource = SQLFromSource;
8381
8382
 
8382
8383
  Object.defineProperty(exports, "__esModule", ({ value: true }));
8383
8384
  exports.SQLFunction = void 0;
8384
- const constant_1 = __webpack_require__(/*! ./constant */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/constant.js");
8385
8385
  const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
8386
8386
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
8387
8387
  const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
8388
8388
  const integer_1 = __webpack_require__(/*! ./integer */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/integer.js");
8389
- const sql_alias_field_1 = __webpack_require__(/*! ./sql_alias_field */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_alias_field.js");
8390
- const sql_field_name_1 = __webpack_require__(/*! ./sql_field_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_field_name.js");
8391
- const simple_source3_1 = __webpack_require__(/*! ./simple_source3 */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/simple_source3.js");
8392
- const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/source.js");
8393
- const sql_aggregation_1 = __webpack_require__(/*! ./sql_aggregation */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_aggregation.js");
8389
+ const sql_function_input_1 = __webpack_require__(/*! ./sql_function_input */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js");
8394
8390
  class SQLFunction extends combi_1.Expression {
8395
8391
  getRunnable() {
8396
- const paren = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), source_1.Source, (0, combi_1.tok)(tokens_1.WParenRightW));
8397
- const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.altPrio)(simple_source3_1.SimpleSource3, paren)));
8398
- const param = (0, combi_1.altPrio)(SQLFunction, sql_aggregation_1.SQLAggregation, sql_field_name_1.SQLFieldName, sql_alias_field_1.SQLAliasField, constant_1.Constant, at);
8399
8392
  const castTypes = (0, combi_1.altPrio)((0, combi_1.seq)("CHAR", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.seq)("DEC", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, ",", integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), "FLTP", "NUMC", "INT8");
8400
- const commaParam = (0, combi_1.seq)(",", param);
8393
+ const commaParam = (0, combi_1.seq)(",", sql_function_input_1.SQLFunctionInput);
8401
8394
  // note: the function names are not keywords, they are usually in lower case
8402
- const abs = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^abs$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8403
- const cast = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^cast$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, "AS", castTypes, (0, combi_1.tok)(tokens_1.WParenRightW)));
8404
- const ceil = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^ceil$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8405
- const coalesce = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^coalesce$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, (0, combi_1.optPrio)(commaParam), (0, combi_1.tok)(tokens_1.WParenRightW)));
8406
- const concat = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^concat$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8407
- const div = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^div$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8408
- const floor = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^floor$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8409
- const length = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^length$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8410
- const lower = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^lower$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8411
- const mod = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^mod$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8412
- const replace = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^replace$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8413
- const round = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^round$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8414
- const upper = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^upper$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), param, (0, combi_1.tok)(tokens_1.WParenRightW)));
8395
+ const abs = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^abs$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8396
+ const cast = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^cast$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, "AS", castTypes, (0, combi_1.tok)(tokens_1.WParenRightW)));
8397
+ const ceil = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^ceil$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8398
+ const coalesce = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^coalesce$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.optPrio)(commaParam), (0, combi_1.tok)(tokens_1.WParenRightW)));
8399
+ const concat = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^concat$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8400
+ const div = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^div$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8401
+ const floor = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^floor$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8402
+ const length = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^length$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8403
+ const lower = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^lower$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8404
+ const mod = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^mod$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8405
+ const replace = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^replace$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8406
+ const round = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^round$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
8407
+ const upper = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.regex)(/^upper$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
8415
8408
  const uuid = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)((0, combi_1.regex)(/^uuid$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), (0, combi_1.tok)(tokens_1.WParenRightW)));
8416
8409
  return (0, combi_1.altPrio)(uuid, abs, ceil, floor, cast, div, mod, coalesce, concat, replace, length, lower, upper, round);
8417
8410
  }
@@ -8421,6 +8414,40 @@ exports.SQLFunction = SQLFunction;
8421
8414
 
8422
8415
  /***/ }),
8423
8416
 
8417
+ /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js":
8418
+ /*!***************************************************************************************************!*\
8419
+ !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function_input.js ***!
8420
+ \***************************************************************************************************/
8421
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8422
+
8423
+ "use strict";
8424
+
8425
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8426
+ exports.SQLFunctionInput = void 0;
8427
+ const constant_1 = __webpack_require__(/*! ./constant */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/constant.js");
8428
+ const version_1 = __webpack_require__(/*! ../../../version */ "./node_modules/@abaplint/core/build/src/version.js");
8429
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "./node_modules/@abaplint/core/build/src/abap/1_lexer/tokens/index.js");
8430
+ const combi_1 = __webpack_require__(/*! ../combi */ "./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js");
8431
+ const sql_alias_field_1 = __webpack_require__(/*! ./sql_alias_field */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_alias_field.js");
8432
+ const sql_field_name_1 = __webpack_require__(/*! ./sql_field_name */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_field_name.js");
8433
+ const simple_source3_1 = __webpack_require__(/*! ./simple_source3 */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/simple_source3.js");
8434
+ const source_1 = __webpack_require__(/*! ./source */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/source.js");
8435
+ const sql_aggregation_1 = __webpack_require__(/*! ./sql_aggregation */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_aggregation.js");
8436
+ const sql_function_1 = __webpack_require__(/*! ./sql_function */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_function.js");
8437
+ class SQLFunctionInput extends combi_1.Expression {
8438
+ getRunnable() {
8439
+ const paren = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), source_1.Source, (0, combi_1.tok)(tokens_1.WParenRightW));
8440
+ const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.altPrio)(simple_source3_1.SimpleSource3, paren)));
8441
+ const param = (0, combi_1.altPrio)(sql_function_1.SQLFunction, sql_aggregation_1.SQLAggregation, sql_field_name_1.SQLFieldName, sql_alias_field_1.SQLAliasField, constant_1.Constant, at);
8442
+ const operator = (0, combi_1.altPrio)("+", "-", "*", "/", "&&");
8443
+ return (0, combi_1.seq)(param, (0, combi_1.starPrio)((0, combi_1.seq)(operator, param)));
8444
+ }
8445
+ }
8446
+ exports.SQLFunctionInput = SQLFunctionInput;
8447
+ //# sourceMappingURL=sql_function_input.js.map
8448
+
8449
+ /***/ }),
8450
+
8424
8451
  /***/ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_group_by.js":
8425
8452
  /*!*********************************************************************************************!*\
8426
8453
  !*** ./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/sql_group_by.js ***!
@@ -11586,7 +11613,8 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/
11586
11613
  class DataBegin {
11587
11614
  getMatcher() {
11588
11615
  const occurs = (0, combi_1.seq)("OCCURS", expressions_1.Integer);
11589
- const structure = (0, combi_1.seq)("BEGIN OF", (0, combi_1.opt)("COMMON PART"), expressions_1.DefinitionName, (0, combi_1.opt)("READ-ONLY"), (0, combi_1.opt)(occurs));
11616
+ const common = (0, combi_1.altPrio)((0, combi_1.seq)("COMMON PART", expressions_1.DefinitionName), "COMMON PART");
11617
+ const structure = (0, combi_1.seq)("BEGIN OF", (0, combi_1.altPrio)(common, (0, combi_1.seq)(expressions_1.DefinitionName, (0, combi_1.opt)("READ-ONLY"), (0, combi_1.opt)(occurs))));
11590
11618
  return (0, combi_1.seq)("DATA", structure);
11591
11619
  }
11592
11620
  }
@@ -31688,17 +31716,18 @@ class MethodImplementation {
31688
31716
  return;
31689
31717
  }
31690
31718
  const { method: methodDefinition } = helper.searchMethodName(classDefinition, methodName);
31691
- if (methodDefinition === undefined) {
31692
- const message = "Method definition \"" + methodName + "\" not found";
31693
- input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
31694
- return;
31695
- }
31696
31719
  const start = node.getFirstToken().getStart();
31697
- if (methodDefinition.isStatic() === false) {
31720
+ if ((methodDefinition === null || methodDefinition === void 0 ? void 0 : methodDefinition.isStatic()) === false) {
31698
31721
  input.scope.push(_scope_type_1.ScopeType.MethodInstance, methodName, start, input.filename);
31699
31722
  input.scope.addList(classDefinition.getAttributes().getInstance());
31700
31723
  }
31701
31724
  input.scope.push(_scope_type_1.ScopeType.Method, methodName, start, input.filename);
31725
+ // note: the scope must be pushed before returning
31726
+ if (methodDefinition === undefined) {
31727
+ const message = "Method definition \"" + methodName + "\" not found";
31728
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
31729
+ return;
31730
+ }
31702
31731
  input.scope.addReference(methodToken, methodDefinition, _reference_1.ReferenceType.MethodImplementationReference, input.filename);
31703
31732
  input.scope.addList(methodDefinition.getParameters().getAll());
31704
31733
  for (const i of helper.findInterfaces(classDefinition)) {
@@ -32499,7 +32528,7 @@ class ReadTable {
32499
32528
  if (indexSource) {
32500
32529
  const indexType = new source_1.Source().runSyntax(indexSource, input);
32501
32530
  if (new _type_utils_1.TypeUtils(input.scope).isAssignable(indexType, basic_1.IntegerType.get()) === false) {
32502
- const message = "READ TABLE, INDEX must be simple";
32531
+ const message = "READ TABLE, INDEX must be simple, got " + (indexType === null || indexType === void 0 ? void 0 : indexType.constructor.name);
32503
32532
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
32504
32533
  return;
32505
32534
  }
@@ -35334,6 +35363,7 @@ const Expressions = __webpack_require__(/*! ../2_statements/expressions */ "./no
35334
35363
  const flow_graph_1 = __webpack_require__(/*! ./flow_graph */ "./node_modules/@abaplint/core/build/src/abap/flow/flow_graph.js");
35335
35364
  const objects_1 = __webpack_require__(/*! ../../objects */ "./node_modules/@abaplint/core/build/src/objects/index.js");
35336
35365
  const selection_events_1 = __webpack_require__(/*! ./selection_events */ "./node_modules/@abaplint/core/build/src/abap/flow/selection_events.js");
35366
+ const virtual_position_1 = __webpack_require__(/*! ../../virtual_position */ "./node_modules/@abaplint/core/build/src/virtual_position.js");
35337
35367
  class StatementFlow {
35338
35368
  constructor() {
35339
35369
  this.counter = 0;
@@ -35422,6 +35452,7 @@ class StatementFlow {
35422
35452
  var _a;
35423
35453
  return ((_a = f.findDirectStructure(Structures.Body)) === null || _a === void 0 ? void 0 : _a.getChildren()) || [];
35424
35454
  }
35455
+ // note: it must handle macros and chained statements
35425
35456
  buildName(statement) {
35426
35457
  let token = undefined;
35427
35458
  const colon = statement.getColon();
@@ -35436,12 +35467,18 @@ class StatementFlow {
35436
35467
  }
35437
35468
  }
35438
35469
  }
35470
+ let extra = "";
35471
+ const tStart = token === null || token === void 0 ? void 0 : token.getStart();
35472
+ if (tStart instanceof virtual_position_1.VirtualPosition) {
35473
+ extra += "$" + tStart.vrow;
35474
+ extra += "," + tStart.vcol;
35475
+ }
35439
35476
  if (token === undefined) {
35440
35477
  return "tokenError";
35441
35478
  }
35442
35479
  return statement.get().constructor.name +
35443
35480
  ":" + token.getRow() +
35444
- "," + token.getCol();
35481
+ "," + token.getCol() + extra;
35445
35482
  }
35446
35483
  traverseBody(children, context) {
35447
35484
  const graph = new flow_graph_1.FlowGraph(this.counter++);
@@ -39743,9 +39780,19 @@ class CDSDetermineTypes {
39743
39780
  const components = [];
39744
39781
  for (const f of (parsedData === null || parsedData === void 0 ? void 0 : parsedData.fields) || []) {
39745
39782
  if (f.prefix !== "") {
39746
- let source = parsedData.sources.find((s) => { var _a; return ((_a = s.as) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === f.prefix.toUpperCase(); });
39783
+ const prefixUpper = f.prefix.toUpperCase();
39784
+ let source = parsedData.sources.find((s) => { var _a; return ((_a = s.as) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === prefixUpper; });
39747
39785
  if ((source === null || source === void 0 ? void 0 : source.name) === undefined) {
39748
- source = parsedData.sources.find((s) => s.name.toUpperCase() === f.prefix.toUpperCase());
39786
+ source = parsedData.sources.find((s) => s.name.toUpperCase() === prefixUpper);
39787
+ }
39788
+ if ((source === null || source === void 0 ? void 0 : source.name) === undefined
39789
+ && (parsedData.associations.find((s) => s.name.toUpperCase() === prefixUpper)
39790
+ || parsedData.associations.find((s) => { var _a; return ((_a = s.as) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === prefixUpper; }))) {
39791
+ components.push({
39792
+ name: f.name,
39793
+ type: new basic_1.VoidType("DDLS:association"),
39794
+ });
39795
+ continue;
39749
39796
  }
39750
39797
  if ((source === null || source === void 0 ? void 0 : source.name) === undefined) {
39751
39798
  components.push({
@@ -40302,7 +40349,7 @@ const combi_1 = __webpack_require__(/*! ../../abap/2_statements/combi */ "./node
40302
40349
  class CDSCast extends combi_1.Expression {
40303
40350
  getRunnable() {
40304
40351
  const name = (0, combi_1.seq)(_1.CDSName, (0, combi_1.opt)((0, combi_1.seq)(".", _1.CDSName)));
40305
- return (0, combi_1.seq)("CAST", "(", (0, combi_1.alt)(name, _1.CDSFunction, _1.CDSCase, CDSCast, _1.CDSString, _1.CDSArithmetics), "AS", _1.CDSType, (0, combi_1.opt)((0, combi_1.seq)("PRESERVING", "TYPE")), ")");
40352
+ return (0, combi_1.seq)("CAST", "(", (0, combi_1.alt)(name, _1.CDSFunction, _1.CDSCase, _1.CDSAggregate, CDSCast, _1.CDSString, _1.CDSArithmetics), "AS", _1.CDSType, (0, combi_1.opt)((0, combi_1.seq)("PRESERVING", "TYPE")), ")");
40306
40353
  }
40307
40354
  }
40308
40355
  exports.CDSCast = CDSCast;
@@ -43569,6 +43616,7 @@ const _lsp_utils_1 = __webpack_require__(/*! ./_lsp_utils */ "./node_modules/@ab
43569
43616
  const syntax_1 = __webpack_require__(/*! ../abap/5_syntax/syntax */ "./node_modules/@abaplint/core/build/src/abap/5_syntax/syntax.js");
43570
43617
  const _abap_object_1 = __webpack_require__(/*! ../objects/_abap_object */ "./node_modules/@abaplint/core/build/src/objects/_abap_object.js");
43571
43618
  const dump_scope_1 = __webpack_require__(/*! ./dump_scope */ "./node_modules/@abaplint/core/build/src/lsp/dump_scope.js");
43619
+ const virtual_position_1 = __webpack_require__(/*! ../virtual_position */ "./node_modules/@abaplint/core/build/src/virtual_position.js");
43572
43620
  class Help {
43573
43621
  static find(reg, textDocument, position) {
43574
43622
  const file = _lsp_utils_1.LSPUtils.getABAPFile(reg, textDocument.uri);
@@ -43743,13 +43791,24 @@ class Help {
43743
43791
  return ret + "</ul>";
43744
43792
  }
43745
43793
  static tokens(file) {
43746
- let inner = "<table><tr><td><b>String</b></td><td><b>Type</b></td><td><b>Row</b></td><td><b>Column</b></td></tr>";
43794
+ let inner = `<table><tr><td><b>String</b></td><td><b>Type</b></td>
43795
+ <td><b>Row</b></td><td><b>Column</b></td>
43796
+ <td><b>vRow</b></td><td><b>vColumn</b></td>
43797
+ </tr>`;
43747
43798
  for (const token of file.getTokens()) {
43748
- inner = inner + "<tr><td><tt>" +
43799
+ const tStart = token.getStart();
43800
+ inner += "<tr><td><tt>" +
43749
43801
  this.escape(token.getStr()) + "</tt></td><td>" +
43750
43802
  token.constructor.name + "</td><td align=\"right\">" +
43751
- token.getRow() + "</td><td align=\"right\">" +
43752
- token.getCol() + "</td></tr>";
43803
+ tStart.getRow() + "</td><td align=\"right\">" +
43804
+ tStart.getCol() + "</td>";
43805
+ if (tStart instanceof virtual_position_1.VirtualPosition) {
43806
+ inner += `<td>${tStart.vcol}</td><td>${tStart.vrow}</td>`;
43807
+ }
43808
+ else {
43809
+ inner += "<td></td><td></td>";
43810
+ }
43811
+ inner += "</tr>";
43753
43812
  }
43754
43813
  inner = inner + "</table>";
43755
43814
  return inner;
@@ -52974,7 +53033,7 @@ class Registry {
52974
53033
  }
52975
53034
  static abaplintVersion() {
52976
53035
  // magic, see build script "version.sh"
52977
- return "2.113.39";
53036
+ return "2.113.41";
52978
53037
  }
52979
53038
  getDDICReferences() {
52980
53039
  return this.ddicReferences;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.113.39",
3
+ "version": "2.113.41",
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.113.39",
41
+ "@abaplint/core": "^2.113.41",
42
42
  "@types/chai": "^4.3.20",
43
43
  "@types/glob": "^8.1.0",
44
44
  "@types/minimist": "^1.2.5",
45
45
  "@types/mocha": "^10.0.9",
46
- "@types/node": "^22.8.7",
46
+ "@types/node": "^22.9.0",
47
47
  "@types/progress": "^2.0.7",
48
48
  "chai": "^4.5.0",
49
49
  "chalk": "^5.3.0",