@abaplint/transpiler-cli 2.7.97 → 2.7.99

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 +120 -45
  2. package/package.json +4 -4
package/build/bundle.js CHANGED
@@ -20846,7 +20846,8 @@ class TypeUtils {
20846
20846
  }
20847
20847
  }
20848
20848
  else if (source instanceof basic_1.IntegerType) {
20849
- if (target instanceof basic_1.StringType) {
20849
+ if (target instanceof basic_1.StringType
20850
+ || target instanceof basic_1.PackedType) {
20850
20851
  return false;
20851
20852
  }
20852
20853
  else if (target instanceof basic_1.Integer8Type) {
@@ -25881,6 +25882,15 @@ class SpaghettiScopeNode extends ScopeData {
25881
25882
  }
25882
25883
  return ret;
25883
25884
  }
25885
+ listInterfaceDefinitions() {
25886
+ let search = this;
25887
+ const ret = [];
25888
+ while (search !== undefined) {
25889
+ ret.push(...Object.values(search.getData().idefs));
25890
+ search = search.getParent();
25891
+ }
25892
+ return ret;
25893
+ }
25884
25894
  findFormDefinition(name) {
25885
25895
  let search = this;
25886
25896
  const upper = name.toUpperCase();
@@ -35855,7 +35865,7 @@ class MethodDefinition extends _identifier_1.Identifier {
35855
35865
  this.exceptions.push(name);
35856
35866
  }
35857
35867
  this.visibility = visibility;
35858
- this.parameters = new method_parameters_1.MethodParameters(node, this.filename, scope);
35868
+ this.parameters = new method_parameters_1.MethodParameters(node, this.filename, scope, this.abstract);
35859
35869
  }
35860
35870
  getVisibility() {
35861
35871
  return this.visibility;
@@ -36013,7 +36023,7 @@ const _scope_type_1 = __webpack_require__(/*! ../5_syntax/_scope_type */ "./node
36013
36023
  // this.exceptions = [];
36014
36024
  // also consider RAISING vs EXCEPTIONS
36015
36025
  class MethodParameters {
36016
- constructor(node, filename, scope) {
36026
+ constructor(node, filename, scope, abstractMethod) {
36017
36027
  if (!(node.get() instanceof method_def_1.MethodDef)) {
36018
36028
  throw new Error("MethodDefinition, expected MethodDef as part of input node");
36019
36029
  }
@@ -36029,7 +36039,7 @@ class MethodParameters {
36029
36039
  // need the scope for LIKE typing inside method parameters
36030
36040
  const parentName = scope.getName();
36031
36041
  scope.push(_scope_type_1.ScopeType.MethodDefinition, "method definition", node.getStart(), filename);
36032
- this.parse(node, scope, filename, parentName);
36042
+ this.parse(node, scope, filename, parentName, abstractMethod);
36033
36043
  scope.pop(node.getEnd());
36034
36044
  }
36035
36045
  getFilename() {
@@ -36105,7 +36115,7 @@ class MethodParameters {
36105
36115
  return this.defaults[parameter.toUpperCase()];
36106
36116
  }
36107
36117
  ///////////////////
36108
- parse(node, scope, filename, parentName) {
36118
+ parse(node, scope, filename, parentName, abstractMethod) {
36109
36119
  var _a, _b;
36110
36120
  const handler = node.findFirstExpression(Expressions.EventHandler);
36111
36121
  if (handler) {
@@ -36145,7 +36155,7 @@ class MethodParameters {
36145
36155
  }
36146
36156
  const importing = node.findFirstExpression(Expressions.MethodDefImporting);
36147
36157
  if (importing) {
36148
- this.add(this.importing, importing, scope, ["importing" /* IdentifierMeta.MethodImporting */]);
36158
+ this.add(this.importing, importing, scope, ["importing" /* IdentifierMeta.MethodImporting */], abstractMethod);
36149
36159
  if (importing.concatTokens().toUpperCase().includes(" PREFERRED PARAMETER")) {
36150
36160
  this.preferred = importing.getLastToken().getStr().toUpperCase();
36151
36161
  if (this.preferred.startsWith("!")) {
@@ -36155,11 +36165,11 @@ class MethodParameters {
36155
36165
  }
36156
36166
  const exporting = node.findFirstExpression(Expressions.MethodDefExporting);
36157
36167
  if (exporting) {
36158
- this.add(this.exporting, exporting, scope, ["exporting" /* IdentifierMeta.MethodExporting */]);
36168
+ this.add(this.exporting, exporting, scope, ["exporting" /* IdentifierMeta.MethodExporting */], abstractMethod);
36159
36169
  }
36160
36170
  const changing = node.findFirstExpression(Expressions.MethodDefChanging);
36161
36171
  if (changing) {
36162
- this.add(this.changing, changing, scope, ["changing" /* IdentifierMeta.MethodChanging */]);
36172
+ this.add(this.changing, changing, scope, ["changing" /* IdentifierMeta.MethodChanging */], abstractMethod);
36163
36173
  }
36164
36174
  const returning = node.findFirstExpression(Expressions.MethodDefReturning);
36165
36175
  if (returning) {
@@ -36205,7 +36215,7 @@ class MethodParameters {
36205
36215
  this.importing.push(...tempImporting);
36206
36216
  }
36207
36217
  }
36208
- add(target, source, scope, meta) {
36218
+ add(target, source, scope, meta, abstractMethod) {
36209
36219
  var _a;
36210
36220
  for (const opt of source.findAllExpressions(Expressions.MethodParamOptional)) {
36211
36221
  const p = opt.findDirectExpression(Expressions.MethodParam);
@@ -36219,6 +36229,9 @@ class MethodParameters {
36219
36229
  else if (meta.includes("importing" /* IdentifierMeta.MethodImporting */)) {
36220
36230
  extraMeta.push("read_only" /* IdentifierMeta.ReadOnly */);
36221
36231
  }
36232
+ if (abstractMethod === true) {
36233
+ extraMeta.push("abstract" /* IdentifierMeta.Abstract */);
36234
+ }
36222
36235
  const id = new method_param_1.MethodParam().runSyntax(p, scope, this.filename, [...meta, ...extraMeta]);
36223
36236
  scope.addIdentifier(id);
36224
36237
  target.push(id);
@@ -39116,6 +39129,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
39116
39129
 
39117
39130
  Object.defineProperty(exports, "__esModule", ({ value: true }));
39118
39131
  exports.LSPLookup = void 0;
39132
+ /* eslint-disable max-len */
39119
39133
  const LServer = __webpack_require__(/*! vscode-languageserver-types */ "./node_modules/vscode-languageserver-types/lib/esm/main.js");
39120
39134
  const Statements = __webpack_require__(/*! ../abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
39121
39135
  const Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
@@ -39198,13 +39212,14 @@ class LSPLookup {
39198
39212
  }
39199
39213
  return { hover: hoverValue, definition: location, implementation: location, definitionId: variable, scope: bottomScope };
39200
39214
  }
39201
- for (const c of bottomScope.listClassDefinitions()) {
39215
+ // TODO: this can be optimized, no need to loop through all the defintions, the scope knows the name of the object?
39216
+ for (const c of [...bottomScope.listClassDefinitions(), ...bottomScope.listInterfaceDefinitions()]) {
39202
39217
  for (const m of ((_a = c.getMethodDefinitions()) === null || _a === void 0 ? void 0 : _a.getAll()) || []) {
39203
39218
  for (const p of ((_b = m.getParameters()) === null || _b === void 0 ? void 0 : _b.getAll()) || []) {
39204
39219
  if (p.getStart().equals(cursor.token.getStart())) {
39205
39220
  const found = _lsp_utils_1.LSPUtils.identiferToLocation(p);
39206
39221
  return {
39207
- hover: "Method Parameter, " + cursor.token.getStr(),
39222
+ hover: "Method Parameter: " + cursor.token.getStr().replace("!", ""),
39208
39223
  definition: found,
39209
39224
  definitionId: p,
39210
39225
  implementation: undefined,
@@ -39386,11 +39401,12 @@ class LSPLookup {
39386
39401
  };
39387
39402
  }
39388
39403
  static findMethodDefinition(found, scope) {
39389
- var _a, _b, _c, _d;
39404
+ var _a, _b, _c, _d, _e, _f, _g;
39390
39405
  if (scope === undefined) {
39391
39406
  return undefined;
39392
39407
  }
39393
- if (scope.getIdentifier().stype !== _scope_type_1.ScopeType.ClassDefinition
39408
+ if ((scope.getIdentifier().stype !== _scope_type_1.ScopeType.ClassDefinition
39409
+ && scope.getIdentifier().stype !== _scope_type_1.ScopeType.Interface)
39394
39410
  || !(found.snode.get() instanceof Statements.MethodDef)) {
39395
39411
  return undefined;
39396
39412
  }
@@ -39406,8 +39422,14 @@ class LSPLookup {
39406
39422
  || nameToken.getStart().getRow() !== found.token.getStart().getRow()) {
39407
39423
  return undefined;
39408
39424
  }
39409
- const def = (_d = (_c = (_b = scope.getParent()) === null || _b === void 0 ? void 0 : _b.findClassDefinition(scope.getIdentifier().sname)) === null || _c === void 0 ? void 0 : _c.getMethodDefinitions()) === null || _d === void 0 ? void 0 : _d.getByName(nameToken.getStr());
39410
- return def;
39425
+ if (scope.getIdentifier().stype === _scope_type_1.ScopeType.ClassDefinition) {
39426
+ const def = (_d = (_c = (_b = scope.getParent()) === null || _b === void 0 ? void 0 : _b.findClassDefinition(scope.getIdentifier().sname)) === null || _c === void 0 ? void 0 : _c.getMethodDefinitions()) === null || _d === void 0 ? void 0 : _d.getByName(nameToken.getStr());
39427
+ return def;
39428
+ }
39429
+ else {
39430
+ const def = (_g = (_f = (_e = scope.getParent()) === null || _e === void 0 ? void 0 : _e.findInterfaceDefinition(scope.getIdentifier().sname)) === null || _f === void 0 ? void 0 : _f.getMethodDefinitions()) === null || _g === void 0 ? void 0 : _g.getByName(nameToken.getStr());
39431
+ return def;
39432
+ }
39411
39433
  }
39412
39434
  static findFunctionModule(found) {
39413
39435
  if (!(found.snode.get() instanceof Statements.CallFunction)) {
@@ -47947,7 +47969,7 @@ class Registry {
47947
47969
  }
47948
47970
  static abaplintVersion() {
47949
47971
  // magic, see build script "version.sh"
47950
- return "2.102.41";
47972
+ return "2.102.44";
47951
47973
  }
47952
47974
  getDDICReferences() {
47953
47975
  return this.ddicReferences;
@@ -50615,7 +50637,8 @@ FIND statement with MATCH COUNT is considered okay if subrc is not checked`,
50615
50637
  if (statement.get() instanceof _statement_1.Comment) {
50616
50638
  continue;
50617
50639
  }
50618
- else if (statement.get() instanceof Statements.EndIf) {
50640
+ else if (statement.get() instanceof Statements.EndIf
50641
+ || statement.get() instanceof Statements.EndTestSeam) {
50619
50642
  continue;
50620
50643
  }
50621
50644
  else {
@@ -50642,7 +50665,8 @@ FIND statement with MATCH COUNT is considered okay if subrc is not checked`,
50642
50665
  return true;
50643
50666
  }
50644
50667
  }
50645
- else if (statement.get() instanceof Statements.EndIf) {
50668
+ else if (statement.get() instanceof Statements.EndIf
50669
+ || statement.get() instanceof Statements.EndTestSeam) {
50646
50670
  continue;
50647
50671
  }
50648
50672
  else {
@@ -51149,7 +51173,12 @@ class CloudTypes {
51149
51173
  }
51150
51174
  run(obj) {
51151
51175
  if (this.reg.getConfig().getVersion() !== version_1.Version.Cloud
51176
+ || obj instanceof Objects.ApplicationJobCatalogEntry
51177
+ || obj instanceof Objects.ApplicationJobTemplate
51152
51178
  || obj instanceof Objects.AssignmentServiceToAuthorizationGroup
51179
+ || obj instanceof Objects.ATCCheckCategory
51180
+ || obj instanceof Objects.ATCCheckObject
51181
+ || obj instanceof Objects.ATCCheckVariant
51153
51182
  || obj instanceof Objects.AuthorizationCheckField
51154
51183
  || obj instanceof Objects.AuthorizationObject
51155
51184
  || obj instanceof Objects.AuthorizationObjectExtension
@@ -51157,11 +51186,7 @@ class CloudTypes {
51157
51186
  || obj instanceof Objects.BusinessCatalog
51158
51187
  || obj instanceof Objects.BusinessCatalogAppAssignment
51159
51188
  || obj instanceof Objects.CDSMetadataExtension
51160
- || obj instanceof Objects.RestrictionField
51161
51189
  || obj instanceof Objects.Class
51162
- || obj instanceof Objects.OutboundService
51163
- || obj instanceof Objects.ApplicationJobCatalogEntry
51164
- || obj instanceof Objects.ApplicationJobTemplate
51165
51190
  || obj instanceof Objects.CommunicationScenario
51166
51191
  || obj instanceof Objects.DataControl
51167
51192
  || obj instanceof Objects.DataDefinition
@@ -51173,11 +51198,11 @@ class CloudTypes {
51173
51198
  || obj instanceof Objects.InboundService
51174
51199
  || obj instanceof Objects.Interface
51175
51200
  || obj instanceof Objects.LockObject
51176
- || obj instanceof Objects.ATCCheckCategory
51177
- || obj instanceof Objects.ATCCheckObject
51178
- || obj instanceof Objects.ATCCheckVariant
51179
51201
  || obj instanceof Objects.MessageClass
51202
+ || obj instanceof Objects.NumberRange
51203
+ || obj instanceof Objects.OutboundService
51180
51204
  || obj instanceof Objects.Package
51205
+ || obj instanceof Objects.RestrictionField
51181
51206
  || obj instanceof Objects.RestrictionType
51182
51207
  || obj instanceof Objects.ServiceBinding
51183
51208
  || obj instanceof Objects.ServiceDefinition
@@ -60236,7 +60261,9 @@ class MethodLength {
60236
60261
  key: "method_length",
60237
60262
  title: "Method/Form Length",
60238
60263
  shortDescription: `Checks relating to method/form length.`,
60239
- extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-methods-small`,
60264
+ extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-methods-small
60265
+
60266
+ Abstract methods without statements are considered okay.`,
60240
60267
  tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
60241
60268
  };
60242
60269
  }
@@ -60281,6 +60308,9 @@ class MethodLength {
60281
60308
  continue;
60282
60309
  }
60283
60310
  if (s.count === 0 && this.conf.errorWhenEmpty === true) {
60311
+ if (this.isAbstract(s)) {
60312
+ continue;
60313
+ }
60284
60314
  const issue = issue_1.Issue.atPosition(s.file, s.pos, this.getDescription(IssueType.EmptyMethod, "0", type), this.getMetadata().key, this.conf.severity);
60285
60315
  issues.push(issue);
60286
60316
  continue;
@@ -60293,6 +60323,10 @@ class MethodLength {
60293
60323
  }
60294
60324
  return issues;
60295
60325
  }
60326
+ isAbstract(result) {
60327
+ const cdef = result.file.getInfo().getClassDefinitionByName(result.className);
60328
+ return (cdef === null || cdef === void 0 ? void 0 : cdef.isAbstract) === true;
60329
+ }
60296
60330
  }
60297
60331
  exports.MethodLength = MethodLength;
60298
60332
  //# sourceMappingURL=method_length.js.map
@@ -67863,6 +67897,8 @@ class UnusedVariablesConf extends _basic_rule_config_1.BasicRuleConfig {
67863
67897
  * @uniqueItems true
67864
67898
  */
67865
67899
  this.skipNames = [];
67900
+ /** skip parameters from abstract methods */
67901
+ this.skipAbstract = false;
67866
67902
  }
67867
67903
  }
67868
67904
  exports.UnusedVariablesConf = UnusedVariablesConf;
@@ -68005,6 +68041,9 @@ Errors found in INCLUDES are reported for the main program.`,
68005
68041
  && this.conf.skipNames.some((a) => a.toUpperCase() === name)) {
68006
68042
  continue;
68007
68043
  }
68044
+ else if (this.conf.skipAbstract === true && meta.includes("abstract" /* IdentifierMeta.Abstract */)) {
68045
+ continue;
68046
+ }
68008
68047
  else if (name === "ME"
68009
68048
  || name === "SUPER"
68010
68049
  || meta.includes("selection_screen_tab" /* IdentifierMeta.SelectionScreenTab */)
@@ -69150,7 +69189,7 @@ class FormLengthStats {
69150
69189
  }
69151
69190
  else if (type instanceof Statements.EndForm) {
69152
69191
  if (pos) {
69153
- res.push({ name, count, file, pos });
69192
+ res.push({ name: name, className: "", count, file, pos });
69154
69193
  }
69155
69194
  else {
69156
69195
  continue;
@@ -69403,31 +69442,37 @@ exports.IncludeGraph = IncludeGraph;
69403
69442
  Object.defineProperty(exports, "__esModule", ({ value: true }));
69404
69443
  exports.MethodLengthStats = void 0;
69405
69444
  const Statements = __webpack_require__(/*! ../abap/2_statements/statements */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js");
69445
+ const Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
69406
69446
  const expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ "./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js");
69407
69447
  const _abap_object_1 = __webpack_require__(/*! ../objects/_abap_object */ "./node_modules/@abaplint/core/build/src/objects/_abap_object.js");
69408
69448
  const _statement_1 = __webpack_require__(/*! ../abap/2_statements/statements/_statement */ "./node_modules/@abaplint/core/build/src/abap/2_statements/statements/_statement.js");
69409
69449
  class MethodLengthStats {
69410
69450
  static run(obj) {
69451
+ var _a;
69411
69452
  const res = [];
69412
69453
  let pos = undefined;
69413
- let name = "";
69454
+ let methodName = "";
69414
69455
  let count = 0;
69415
69456
  let method = false;
69416
69457
  if (!(obj instanceof _abap_object_1.ABAPObject)) {
69417
69458
  return [];
69418
69459
  }
69419
69460
  for (const file of obj.getABAPFiles()) {
69461
+ let className = "";
69420
69462
  for (const stat of file.getStatements()) {
69421
69463
  const type = stat.get();
69422
69464
  if (type instanceof Statements.MethodImplementation) {
69423
69465
  pos = stat.getFirstToken().getStart();
69424
- name = this.findName(stat);
69466
+ methodName = this.findName(stat);
69425
69467
  method = true;
69426
69468
  count = 0;
69427
69469
  }
69470
+ else if (type instanceof Statements.ClassImplementation) {
69471
+ className = ((_a = stat.findFirstExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.concatTokens()) || "INTERNAL_ERROR";
69472
+ }
69428
69473
  else if (type instanceof Statements.EndMethod) {
69429
69474
  if (pos) {
69430
- res.push({ name, count, file, pos });
69475
+ res.push({ name: methodName, className, count, file, pos });
69431
69476
  }
69432
69477
  else {
69433
69478
  continue;
@@ -75322,6 +75367,9 @@ class CreateDataTranspiler {
75322
75367
  if (concat.includes(" TYPE LINE OF ")) {
75323
75368
  options.push(`"typeLineOf": true`);
75324
75369
  }
75370
+ if (concat.includes(" REF TO ")) {
75371
+ options.push(`"refTo": true`);
75372
+ }
75325
75373
  const handle = node.findExpressionAfterToken("HANDLE");
75326
75374
  if (handle) {
75327
75375
  const so = traversal.traverse(node.findDirectExpression(abaplint.Expressions.Source));
@@ -76291,7 +76339,7 @@ const abaplint = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abap
76291
76339
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
76292
76340
  class FindTranspiler {
76293
76341
  transpile(node, traversal) {
76294
- var _a;
76342
+ var _a, _b;
76295
76343
  const options = [];
76296
76344
  let index = 1;
76297
76345
  const sources = node.findDirectExpressions(abaplint.Expressions.Source);
@@ -76299,6 +76347,9 @@ class FindTranspiler {
76299
76347
  if ((_a = node.findFirstExpression(abaplint.Expressions.FindType)) === null || _a === void 0 ? void 0 : _a.findDirectTokenByText("REGEX")) {
76300
76348
  options.push("regex: " + source0);
76301
76349
  }
76350
+ else if ((_b = node.findFirstExpression(abaplint.Expressions.FindType)) === null || _b === void 0 ? void 0 : _b.findDirectTokenByText("PCRE")) {
76351
+ options.push("pcre: " + source0);
76352
+ }
76302
76353
  else {
76303
76354
  options.push("find: " + source0);
76304
76355
  }
@@ -76941,7 +76992,7 @@ exports.InitializationTranspiler = InitializationTranspiler;
76941
76992
  "use strict";
76942
76993
 
76943
76994
  Object.defineProperty(exports, "__esModule", ({ value: true }));
76944
- exports.InsertDatabaseTranspiler = void 0;
76995
+ exports.findConnection = exports.InsertDatabaseTranspiler = void 0;
76945
76996
  const abaplint = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js");
76946
76997
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
76947
76998
  const expressions_1 = __webpack_require__(/*! ../expressions */ "./node_modules/@abaplint/transpiler/build/src/expressions/index.js");
@@ -76970,17 +77021,22 @@ class InsertDatabaseTranspiler {
76970
77021
  }
76971
77022
  const connection = node.findDirectExpression(abaplint.Expressions.DatabaseConnection);
76972
77023
  if (connection) {
76973
- let con = connection.getLastToken().getStr().toUpperCase();
76974
- if (con === "DEFAULT_") {
76975
- // todo, workaround for replacing of keywords,
76976
- con = "DEFAULT";
76977
- }
77024
+ const con = findConnection(connection);
76978
77025
  options.push(`"connection": "${con}"`);
76979
77026
  }
76980
77027
  return new chunk_1.Chunk(`await abap.statements.insertDatabase(${table.getCode()}, {${options.join(", ")}});`);
76981
77028
  }
76982
77029
  }
76983
77030
  exports.InsertDatabaseTranspiler = InsertDatabaseTranspiler;
77031
+ function findConnection(connection) {
77032
+ let con = connection.getLastToken().getStr().toUpperCase();
77033
+ if (con === "DEFAULT_") {
77034
+ // todo, workaround for replacing of keywords,
77035
+ con = "DEFAULT";
77036
+ }
77037
+ return con;
77038
+ }
77039
+ exports.findConnection = findConnection;
76984
77040
  //# sourceMappingURL=insert_database.js.map
76985
77041
 
76986
77042
  /***/ }),
@@ -77783,6 +77839,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
77783
77839
  exports.OpenCursorTranspiler = void 0;
77784
77840
  const abaplint = __webpack_require__(/*! @abaplint/core */ "./node_modules/@abaplint/core/build/src/index.js");
77785
77841
  const chunk_1 = __webpack_require__(/*! ../chunk */ "./node_modules/@abaplint/transpiler/build/src/chunk.js");
77842
+ const insert_database_1 = __webpack_require__(/*! ./insert_database */ "./node_modules/@abaplint/transpiler/build/src/statements/insert_database.js");
77786
77843
  class OpenCursorTranspiler {
77787
77844
  transpile(node, traversal) {
77788
77845
  const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.SQLTarget)).getCode();
@@ -77798,7 +77855,13 @@ class OpenCursorTranspiler {
77798
77855
  if (orderBy) {
77799
77856
  select += "ORDER BY " + traversal.traverse(node).getCode();
77800
77857
  }
77801
- return new chunk_1.Chunk().append(`await abap.statements.openCursor(${target}, "${select}");`, node, traversal);
77858
+ const options = [];
77859
+ const connection = node.findDirectExpression(abaplint.Expressions.DatabaseConnection);
77860
+ if (connection) {
77861
+ const con = (0, insert_database_1.findConnection)(connection);
77862
+ options.push(`"connection": "${con}"`);
77863
+ }
77864
+ return new chunk_1.Chunk().append(`await abap.statements.openCursor(${target}, "${select}", {${options.join(", ")}});`, node, traversal);
77802
77865
  }
77803
77866
  }
77804
77867
  exports.OpenCursorTranspiler = OpenCursorTranspiler;
@@ -78335,7 +78398,10 @@ class ReplaceTranspiler {
78335
78398
  if (type === "REGEX") {
78336
78399
  extra.push("regex: " + new expressions_1.SourceTranspiler().transpile(sources[0], traversal).getCode());
78337
78400
  }
78338
- if (o === undefined && o === undefined && type !== "REGEX") {
78401
+ else if (type === "PCRE") {
78402
+ extra.push("pcre: " + new expressions_1.SourceTranspiler().transpile(sources[0], traversal).getCode());
78403
+ }
78404
+ if (o === undefined && o === undefined && type !== "REGEX" && type !== "PCRE") {
78339
78405
  extra.push("of: " + new expressions_1.SourceTranspiler().transpile(sources[0], traversal).getCode());
78340
78406
  }
78341
78407
  if (concat.includes(" IGNORING CASE")) {
@@ -81345,12 +81411,6 @@ class Traversal {
81345
81411
  if (def.getSuperClass() !== undefined || def.getName().toUpperCase() === "CX_ROOT") {
81346
81412
  ret += "super();\n";
81347
81413
  }
81348
- /*
81349
- if (def.getSuperClass() !== undefined
81350
- && def.getMethodDefinitions().getByName("CONSTRUCTOR") === undefined) {
81351
- ret += `await super.constructor_(INPUT);\n`;
81352
- }
81353
- */
81354
81414
  const cName = Traversal.escapeNamespace(def.getName().toLowerCase());
81355
81415
  ret += "this.me = new abap.types.ABAPObject();\n";
81356
81416
  ret += "this.me.set(this);\n";
@@ -81367,6 +81427,7 @@ class Traversal {
81367
81427
  // attributes from directly implemented interfaces(not interfaces implemented in super classes)
81368
81428
  for (const i of def.getImplementing()) {
81369
81429
  ret += this.dataFromInterfaces(i.name, scope, cName);
81430
+ ret += this.aliasesFromInterfaces(i.name, scope, cName);
81370
81431
  }
81371
81432
  // handle aliases after initialization of carrier variables
81372
81433
  for (const a of ((_b = def.getAliases()) === null || _b === void 0 ? void 0 : _b.getAll()) || []) {
@@ -81429,6 +81490,20 @@ class Traversal {
81429
81490
  }
81430
81491
  return ret;
81431
81492
  }
81493
+ aliasesFromInterfaces(name, scope, cname) {
81494
+ let ret = "";
81495
+ const intf = this.findInterfaceDefinition(name, scope);
81496
+ for (const a of (intf === null || intf === void 0 ? void 0 : intf.getAliases().getAll()) || []) {
81497
+ const iname = Traversal.escapeNamespace(intf === null || intf === void 0 ? void 0 : intf.getName().toLowerCase());
81498
+ const aname = Traversal.escapeNamespace(a.getName().toLowerCase());
81499
+ const cname = Traversal.escapeNamespace(a.getComponent().toLowerCase().replace("~", "$"));
81500
+ ret += "this." + iname + "$" + aname + " = this." + cname + ";\n";
81501
+ }
81502
+ for (const i of (intf === null || intf === void 0 ? void 0 : intf.getImplementing()) || []) {
81503
+ ret += this.aliasesFromInterfaces(i.name, scope, cname);
81504
+ }
81505
+ return ret;
81506
+ }
81432
81507
  determineType(node, scope) {
81433
81508
  var _a, _b, _c;
81434
81509
  if (scope === undefined) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler-cli",
3
- "version": "2.7.97",
3
+ "version": "2.7.99",
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.97",
29
+ "@abaplint/transpiler": "^2.7.99",
30
30
  "@types/glob": "^7.2.0",
31
31
  "glob": "=7.2.0",
32
32
  "@types/progress": "^2.0.5",
33
- "@types/node": "^20.6.0",
34
- "@abaplint/core": "^2.102.41",
33
+ "@types/node": "^20.6.3",
34
+ "@abaplint/core": "^2.102.44",
35
35
  "progress": "^2.0.3",
36
36
  "webpack": "^5.88.2",
37
37
  "webpack-cli": "^5.1.4",