@abaplint/core 2.91.28 → 2.91.31

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.
@@ -209,6 +209,10 @@ declare class AssignmentServiceToAuthorizationGroup extends AbstractObject {
209
209
  getDescription(): string | undefined;
210
210
  }
211
211
 
212
+ declare class AssignSource extends Expression {
213
+ getRunnable(): IStatementRunnable;
214
+ }
215
+
212
216
  declare class AssociationName extends Expression {
213
217
  getRunnable(): IStatementRunnable;
214
218
  }
@@ -701,6 +705,7 @@ declare class ChapterOfBookStructure extends AbstractObject {
701
705
  declare class CharacterType extends AbstractType {
702
706
  private readonly length;
703
707
  constructor(length: number, qualifiedName?: string);
708
+ cloneType(qualifiedName?: string): CharacterType;
704
709
  getLength(): number;
705
710
  toText(): string;
706
711
  toABAP(): string;
@@ -1799,6 +1804,7 @@ declare namespace Expressions {
1799
1804
  Cast,
1800
1805
  ClassFinal,
1801
1806
  ClassFriends,
1807
+ AssignSource,
1802
1808
  ClassGlobal_2 as ClassGlobal,
1803
1809
  ClassName,
1804
1810
  Color,
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssignSource = void 0;
4
+ const combi_1 = require("../combi");
5
+ const tokens_1 = require("../../1_lexer/tokens");
6
+ const source_1 = require("./source");
7
+ const dynamic_1 = require("./dynamic");
8
+ const field_1 = require("./field");
9
+ class AssignSource extends combi_1.Expression {
10
+ getRunnable() {
11
+ const component = (0, combi_1.seq)("COMPONENT", source_1.Source, "OF STRUCTURE", source_1.Source);
12
+ const tableField = (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(source_1.Source, dynamic_1.Dynamic));
13
+ const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
14
+ const source = (0, combi_1.alt)((0, combi_1.seq)(source_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrow, dynamic_1.Dynamic))), component, tableField, (0, combi_1.seq)(dynamic_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(arrow, (0, combi_1.alt)(field_1.Field, dynamic_1.Dynamic)))));
15
+ return source;
16
+ }
17
+ }
18
+ exports.AssignSource = AssignSource;
19
+ //# sourceMappingURL=assign_source.js.map
@@ -29,6 +29,7 @@ __exportStar(require("./call_transformation_parameters"), exports);
29
29
  __exportStar(require("./cast"), exports);
30
30
  __exportStar(require("./class_final"), exports);
31
31
  __exportStar(require("./class_friends"), exports);
32
+ __exportStar(require("./assign_source"), exports);
32
33
  __exportStar(require("./class_global"), exports);
33
34
  __exportStar(require("./class_name"), exports);
34
35
  __exportStar(require("./color"), exports);
@@ -2,14 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Assign = void 0;
4
4
  const combi_1 = require("../combi");
5
- const tokens_1 = require("../../1_lexer/tokens");
6
5
  const expressions_1 = require("../expressions");
7
6
  class Assign {
8
7
  getMatcher() {
9
- const component = (0, combi_1.seq)("COMPONENT", expressions_1.Source, "OF STRUCTURE", expressions_1.Source);
10
- const tableField = (0, combi_1.seq)("TABLE FIELD", (0, combi_1.alt)(expressions_1.Source, expressions_1.Dynamic));
11
- const arrow = (0, combi_1.alt)((0, combi_1.tok)(tokens_1.InstanceArrow), (0, combi_1.tok)(tokens_1.StaticArrow));
12
- const source = (0, combi_1.alt)((0, combi_1.seq)(expressions_1.Source, (0, combi_1.opt)((0, combi_1.seq)(arrow, expressions_1.Dynamic))), component, tableField, (0, combi_1.seq)(expressions_1.Dynamic, (0, combi_1.opt)((0, combi_1.seq)(arrow, (0, combi_1.alt)(expressions_1.Field, expressions_1.Dynamic)))));
13
8
  const type = (0, combi_1.seq)("TYPE", (0, combi_1.alt)(expressions_1.Dynamic, expressions_1.TypeName));
14
9
  const like = (0, combi_1.seq)("LIKE", (0, combi_1.alt)(expressions_1.Dynamic, expressions_1.Source));
15
10
  const handle = (0, combi_1.seq)("TYPE HANDLE", expressions_1.Source);
@@ -17,7 +12,7 @@ class Assign {
17
12
  const decimals = (0, combi_1.seq)("DECIMALS", expressions_1.Source);
18
13
  const casting = (0, combi_1.seq)("CASTING", (0, combi_1.opt)((0, combi_1.alt)(like, handle, (0, combi_1.per)(type, decimals))));
19
14
  const obsoleteType = (0, combi_1.seq)("TYPE", expressions_1.Source, (0, combi_1.optPrio)(decimals));
20
- const ret = (0, combi_1.seq)("ASSIGN", (0, combi_1.opt)((0, combi_1.seq)(expressions_1.Target, "INCREMENT")), source, "TO", expressions_1.FSTarget, (0, combi_1.opt)((0, combi_1.altPrio)(casting, obsoleteType)), (0, combi_1.opt)(range));
15
+ const ret = (0, combi_1.seq)("ASSIGN", (0, combi_1.opt)((0, combi_1.seq)(expressions_1.Target, "INCREMENT")), expressions_1.AssignSource, "TO", expressions_1.FSTarget, (0, combi_1.opt)((0, combi_1.altPrio)(casting, obsoleteType)), (0, combi_1.opt)(range));
21
16
  return ret;
22
17
  }
23
18
  }
@@ -164,17 +164,20 @@ class BasicTypes {
164
164
  }
165
165
  return type;
166
166
  }
167
- resolveTypeName(typeName, length, decimals, name) {
167
+ resolveTypeName(typeName, length, decimals, qualifiedName) {
168
168
  var _a;
169
169
  if (typeName === undefined) {
170
170
  return undefined;
171
171
  }
172
- const chain = this.resolveTypeChain(typeName);
172
+ let chain = this.resolveTypeChain(typeName);
173
173
  if (chain) {
174
+ if (chain instanceof basic_1.CharacterType && qualifiedName) {
175
+ chain = chain.cloneType(qualifiedName);
176
+ }
174
177
  return chain;
175
178
  }
176
179
  const chainText = typeName.concatTokens().toUpperCase();
177
- const f = this.scope.getDDIC().lookupBuiltinType(chainText, length, decimals, name);
180
+ const f = this.scope.getDDIC().lookupBuiltinType(chainText, length, decimals, qualifiedName);
178
181
  if (f !== undefined) {
179
182
  return f;
180
183
  }
@@ -8,13 +8,14 @@ const dynamic_1 = require("../expressions/dynamic");
8
8
  const basic_1 = require("../../types/basic");
9
9
  class Assign {
10
10
  runSyntax(node, scope, filename) {
11
- const sources = node.findDirectExpressions(Expressions.Source);
11
+ var _a, _b;
12
+ const sources = node.findAllExpressions(Expressions.Source);
12
13
  const firstSource = sources[0];
13
14
  let sourceType = new source_1.Source().runSyntax(firstSource, scope, filename);
14
- if (sourceType === undefined || node.findDirectExpression(Expressions.Dynamic)) {
15
+ if (sourceType === undefined || ((_a = node.findDirectExpression(Expressions.AssignSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.Dynamic))) {
15
16
  sourceType = new basic_1.VoidType("DynamicAssign");
16
17
  }
17
- for (const d of node.findAllExpressions(Expressions.Dynamic)) {
18
+ for (const d of ((_b = node.findDirectExpression(Expressions.AssignSource)) === null || _b === void 0 ? void 0 : _b.findAllExpressions(Expressions.Dynamic)) || []) {
18
19
  new dynamic_1.Dynamic().runSyntax(d, scope, filename);
19
20
  }
20
21
  const target = node.findDirectExpression(Expressions.FSTarget);
@@ -10,6 +10,9 @@ class CharacterType extends _abstract_type_1.AbstractType {
10
10
  }
11
11
  this.length = length;
12
12
  }
13
+ cloneType(qualifiedName) {
14
+ return new CharacterType(this.length, qualifiedName);
15
+ }
13
16
  getLength() {
14
17
  return this.length;
15
18
  }
@@ -68,7 +68,7 @@ class Registry {
68
68
  }
69
69
  static abaplintVersion() {
70
70
  // magic, see build script "version.sh"
71
- return "2.91.28";
71
+ return "2.91.31";
72
72
  }
73
73
  getDDICReferences() {
74
74
  return this.references;
@@ -201,6 +201,10 @@ Only one transformation is applied to a statement at a time, so multiple steps m
201
201
  if (found) {
202
202
  return found;
203
203
  }
204
+ found = this.assignWithTable(high, lowFile);
205
+ if (found) {
206
+ return found;
207
+ }
204
208
  found = this.downportRefSimple(high, lowFile);
205
209
  if (found) {
206
210
  return found;
@@ -964,6 +968,30 @@ LOOP AT ${groupTargetName}tab ${groupTarget}.`;
964
968
  const fix = edit_helper_1.EditHelper.merge(fix2, fix1);
965
969
  return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Downport, REF", this.getMetadata().key, this.conf.severity, fix);
966
970
  }
971
+ assignWithTable(high, lowFile) {
972
+ var _a, _b;
973
+ if (!(high.get() instanceof Statements.Assign)
974
+ || high.getChildren().length !== 5) {
975
+ return undefined;
976
+ }
977
+ const fieldChain = (_b = (_a = high.findDirectExpression(Expressions.AssignSource)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(Expressions.Source)) === null || _b === void 0 ? void 0 : _b.findDirectExpression(Expressions.FieldChain);
978
+ if ((fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren().length) !== 2) {
979
+ return undefined;
980
+ }
981
+ const tableExpression = fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren()[1];
982
+ if (!(tableExpression.get() instanceof Expressions.TableExpression)
983
+ || !(tableExpression instanceof nodes_1.ExpressionNode)) {
984
+ return undefined;
985
+ }
986
+ const index = tableExpression.findDirectExpression(Expressions.Source);
987
+ if (index === undefined) {
988
+ return undefined;
989
+ }
990
+ const fsTarget = high.findDirectExpression(Expressions.FSTarget);
991
+ const code = `READ TABLE ${fieldChain === null || fieldChain === void 0 ? void 0 : fieldChain.getChildren()[0].concatTokens()} INDEX ${index.concatTokens()} ASSIGNING ${fsTarget === null || fsTarget === void 0 ? void 0 : fsTarget.concatTokens()}.`;
992
+ const fix = edit_helper_1.EditHelper.replaceRange(lowFile, high.getFirstToken().getStart(), high.getLastToken().getEnd(), code);
993
+ return issue_1.Issue.atToken(lowFile, high.getFirstToken(), "Downport, ASSIGN table expr", this.getMetadata().key, this.conf.severity, fix);
994
+ }
967
995
  moveWithSimpleValue(high, lowFile) {
968
996
  if (!(high.get() instanceof Statements.Move)
969
997
  || high.getChildren().length !== 4) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.91.28",
3
+ "version": "2.91.31",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",
@@ -45,12 +45,12 @@
45
45
  },
46
46
  "homepage": "https://abaplint.org",
47
47
  "devDependencies": {
48
- "@microsoft/api-extractor": "^7.29.0",
49
- "@types/chai": "^4.3.1",
48
+ "@microsoft/api-extractor": "^7.29.2",
49
+ "@types/chai": "^4.3.3",
50
50
  "@types/mocha": "^9.1.1",
51
- "@types/node": "^18.6.4",
51
+ "@types/node": "^18.7.3",
52
52
  "chai": "^4.3.6",
53
- "eslint": "^8.21.0",
53
+ "eslint": "^8.22.0",
54
54
  "mocha": "^10.0.0",
55
55
  "c8": "^7.12.0",
56
56
  "source-map-support": "^0.5.21",