@abaplint/core 2.101.3 → 2.101.5

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.
@@ -7,7 +7,6 @@ const source_1 = require("./source");
7
7
  const _type_utils_1 = require("../_type_utils");
8
8
  class StringTemplate {
9
9
  runSyntax(node, scope, filename) {
10
- var _a;
11
10
  const typeUtils = new _type_utils_1.TypeUtils(scope);
12
11
  for (const templateSource of node.findAllExpressions(Expressions.StringTemplateSource)) {
13
12
  const s = templateSource.findDirectExpression(Expressions.Source);
@@ -18,9 +17,22 @@ class StringTemplate {
18
17
  else if (typeUtils.isCharLike(type) === false && typeUtils.isHexLike(type) === false) {
19
18
  throw new Error("Not character like, " + type.constructor.name);
20
19
  }
21
- for (const formatSource of ((_a = templateSource.findDirectExpression(Expressions.StringTemplateFormatting)) === null || _a === void 0 ? void 0 : _a.findAllExpressions(Expressions.Source)) || []) {
20
+ const format = templateSource.findDirectExpression(Expressions.StringTemplateFormatting);
21
+ const formatConcat = format === null || format === void 0 ? void 0 : format.concatTokens();
22
+ for (const formatSource of (format === null || format === void 0 ? void 0 : format.findAllExpressions(Expressions.Source)) || []) {
22
23
  new source_1.Source().runSyntax(formatSource, scope, filename);
23
24
  }
25
+ if ((formatConcat === null || formatConcat === void 0 ? void 0 : formatConcat.includes("ALPHA = "))
26
+ && !(type instanceof basic_1.UnknownType)
27
+ && !(type instanceof basic_1.VoidType)
28
+ && !(type instanceof basic_1.StringType)
29
+ && !(type instanceof basic_1.CLikeType)
30
+ && !(type instanceof basic_1.CharacterType)
31
+ && !(type instanceof basic_1.NumericGenericType)
32
+ && !(type instanceof basic_1.NumericType)
33
+ && !(type instanceof basic_1.AnyType)) {
34
+ throw new Error("Cannot apply ALPHA to this type");
35
+ }
24
36
  }
25
37
  return new basic_1.StringType({ qualifiedName: "STRING" });
26
38
  }
@@ -8,45 +8,50 @@ const _reference_1 = require("../_reference");
8
8
  const basic_1 = require("../../types/basic");
9
9
  const message_source_1 = require("../expressions/message_source");
10
10
  const raise_with_1 = require("../expressions/raise_with");
11
+ const _object_oriented_1 = require("../_object_oriented");
12
+ const method_parameters_1 = require("../expressions/method_parameters");
11
13
  class Raise {
12
14
  runSyntax(node, scope, filename) {
13
15
  // todo
14
- var _a, _b, _c;
16
+ var _a, _b, _c, _d, _e;
17
+ const helper = new _object_oriented_1.ObjectOriented(scope);
18
+ let method;
15
19
  const classTok = (_a = node.findDirectExpression(Expressions.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken();
16
- const classNam = classTok === null || classTok === void 0 ? void 0 : classTok.getStr();
17
- if (classNam) {
18
- const found = scope.existsObject(classNam);
20
+ const className = classTok === null || classTok === void 0 ? void 0 : classTok.getStr();
21
+ if (className) {
22
+ const found = scope.existsObject(className);
19
23
  if (found.found === true && found.id) {
20
24
  scope.addReference(classTok, found.id, found.type, filename);
25
+ const def = scope.findObjectDefinition(className);
26
+ method = (_b = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _b === void 0 ? void 0 : _b.method;
21
27
  }
22
- else if (scope.getDDIC().inErrorNamespace(classNam) === false) {
23
- const extra = { ooName: classNam, ooType: "Void" };
28
+ else if (scope.getDDIC().inErrorNamespace(className) === false) {
29
+ const extra = { ooName: className, ooType: "Void" };
24
30
  scope.addReference(classTok, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, filename, extra);
31
+ method = new basic_1.VoidType(className);
25
32
  }
26
33
  else {
27
- throw new Error("RAISE, unknown class " + classNam);
34
+ throw new Error("RAISE, unknown class " + className);
28
35
  }
29
36
  }
30
- let prev = "";
31
- for (const c of node.getChildren()) {
32
- if (c instanceof nodes_1.ExpressionNode
33
- && (c.get() instanceof Expressions.SimpleSource2 || c.get() instanceof Expressions.Source)) {
34
- const type = new source_1.Source().runSyntax(c, scope, filename);
35
- if (prev === "EXCEPTION"
36
- && type
37
- && !(type instanceof basic_1.VoidType)
38
- && !(type instanceof basic_1.ObjectReferenceType)) {
39
- throw new Error("RAISE EXCEPTION, must be object reference, got " + type.constructor.name);
40
- }
37
+ const c = node.findExpressionAfterToken("EXCEPTION");
38
+ if (c instanceof nodes_1.ExpressionNode && (c.get() instanceof Expressions.SimpleSource2 || c.get() instanceof Expressions.Source)) {
39
+ const type = new source_1.Source().runSyntax(c, scope, filename);
40
+ if (type instanceof basic_1.VoidType) {
41
+ method = type;
42
+ }
43
+ else if (type instanceof basic_1.ObjectReferenceType) {
44
+ const def = scope.findObjectDefinition(type.getIdentifierName());
45
+ method = (_c = helper.searchMethodName(def, "CONSTRUCTOR")) === null || _c === void 0 ? void 0 : _c.method;
46
+ }
47
+ else if (type !== undefined) {
48
+ throw new Error("RAISE EXCEPTION, must be object reference, got " + type.constructor.name);
41
49
  }
42
- prev = c.concatTokens().toUpperCase();
43
50
  }
44
- // todo, check parameters vs constructor
51
+ // check parameters vs constructor
45
52
  const param = node.findDirectExpression(Expressions.ParameterListS);
46
53
  if (param) {
47
- for (const s of param.findAllExpressions(Expressions.Source)) {
48
- new source_1.Source().runSyntax(s, scope, filename);
49
- }
54
+ new method_parameters_1.MethodParameters().checkExporting(param, scope, method, filename, true);
50
55
  }
51
56
  for (const s of node.findDirectExpressions(Expressions.RaiseWith)) {
52
57
  new raise_with_1.RaiseWith().runSyntax(s, scope, filename);
@@ -60,8 +65,8 @@ class Raise {
60
65
  for (const s of node.findDirectExpressions(Expressions.MessageSource)) {
61
66
  new message_source_1.MessageSource().runSyntax(s, scope, filename);
62
67
  }
63
- const id = (_b = node.findExpressionAfterToken("ID")) === null || _b === void 0 ? void 0 : _b.concatTokens();
64
- const number = (_c = node.findDirectExpression(Expressions.MessageNumber)) === null || _c === void 0 ? void 0 : _c.concatTokens();
68
+ const id = (_d = node.findExpressionAfterToken("ID")) === null || _d === void 0 ? void 0 : _d.concatTokens();
69
+ const number = (_e = node.findDirectExpression(Expressions.MessageNumber)) === null || _e === void 0 ? void 0 : _e.concatTokens();
65
70
  if ((id === null || id === void 0 ? void 0 : id.startsWith("'")) && number) {
66
71
  const messageClass = id.substring(1, id.length - 1).toUpperCase();
67
72
  scope.getMSAGReferences().addUsing(filename, node.getFirstToken(), messageClass, number);
@@ -65,7 +65,7 @@ class Registry {
65
65
  }
66
66
  static abaplintVersion() {
67
67
  // magic, see build script "version.sh"
68
- return "2.101.3";
68
+ return "2.101.5";
69
69
  }
70
70
  getDDICReferences() {
71
71
  return this.ddicReferences;
@@ -71,14 +71,18 @@ class ModifyOnlyOwnDBTables {
71
71
  }
72
72
  const concat = databaseTable.concatTokens().toUpperCase();
73
73
  if (regExp.test(concat) === false) {
74
- // must contain a ReferenceType.TableVoidReference
74
+ // must contain a ReferenceType.TableVoidReference or a ReferenceType.TableReference if its a dependency
75
75
  if (spaghetti === undefined) {
76
76
  spaghetti = new syntax_1.SyntaxLogic(this.reg, obj).run().spaghetti;
77
77
  }
78
78
  const start = databaseTable.getFirstToken().getStart();
79
79
  const scope = spaghetti.lookupPosition(start, file.getFilename());
80
- const found = scope === null || scope === void 0 ? void 0 : scope.findTableVoidReference(start);
81
- if (found) {
80
+ const found1 = scope === null || scope === void 0 ? void 0 : scope.findTableVoidReference(start);
81
+ if (found1) {
82
+ output.push(issue_1.Issue.atStatement(file, s, this.getMetadata().title, this.getMetadata().key, this.getConfig().severity));
83
+ }
84
+ const found2 = scope === null || scope === void 0 ? void 0 : scope.findTableReference(start);
85
+ if (found2) {
82
86
  output.push(issue_1.Issue.atStatement(file, s, this.getMetadata().title, this.getMetadata().key, this.getConfig().severity));
83
87
  }
84
88
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.101.3",
3
+ "version": "2.101.5",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",