@abaplint/core 2.118.0 → 2.118.2

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.
@@ -6,7 +6,9 @@ const _syntax_input_1 = require("../_syntax_input");
6
6
  class DatabaseTable {
7
7
  static runSyntax(node, input) {
8
8
  const token = node.getFirstToken();
9
- const name = token.getStr();
9
+ const rawName = token.getStr();
10
+ const starPrefixed = rawName.startsWith("*");
11
+ const name = starPrefixed ? rawName.substring(1) : rawName;
10
12
  if (name === "(") {
11
13
  // dynamic
12
14
  return undefined;
@@ -38,6 +38,7 @@ class FieldChain {
38
38
  let context = undefined;
39
39
  const children = node.getChildren();
40
40
  context = this.findTop(children[0], input, refType);
41
+ let prev = children[0].concatTokens();
41
42
  for (let i = 1; i < children.length; i++) {
42
43
  const current = children[i];
43
44
  if (current === undefined) {
@@ -78,7 +79,7 @@ class FieldChain {
78
79
  }
79
80
  }
80
81
  else {
81
- const message = "Not a structure, FieldChain, " + (context === null || context === void 0 ? void 0 : context.constructor.name) + ", " + current.concatTokens();
82
+ const message = prev.toUpperCase() + " is not structured (" + (context === null || context === void 0 ? void 0 : context.constructor.name) + ")";
82
83
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, current.getFirstToken(), message));
83
84
  return basic_1.VoidType.get(_syntax_input_1.CheckSyntaxKey);
84
85
  }
@@ -145,6 +146,7 @@ class FieldChain {
145
146
  }
146
147
  }
147
148
  }
149
+ prev = current.concatTokens();
148
150
  }
149
151
  return context;
150
152
  }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FunctionParameters = void 0;
4
+ const Expressions = require("../../2_statements/expressions");
5
+ const source_1 = require("./source");
6
+ const target_1 = require("./target");
7
+ const field_chain_1 = require("./field_chain");
8
+ const _reference_1 = require("../_reference");
9
+ const _syntax_input_1 = require("../_syntax_input");
10
+ class FunctionParameters {
11
+ static runSyntax(node, input) {
12
+ // EXPORTING: process sources in each FunctionExportingParameter
13
+ for (const param of node.findAllExpressions(Expressions.FunctionExportingParameter)) {
14
+ const s = param.findDirectExpression(Expressions.Source);
15
+ if (s) {
16
+ source_1.Source.runSyntax(s, input);
17
+ }
18
+ const s3 = param.findDirectExpression(Expressions.SimpleSource3);
19
+ if (s3) {
20
+ source_1.Source.runSyntax(s3, input);
21
+ }
22
+ }
23
+ // IMPORTING / CHANGING / TABLES: process targets in each ParameterT
24
+ const changingList = node.findExpressionAfterToken("CHANGING");
25
+ for (const paramList of node.findDirectExpressions(Expressions.ParameterListT)) {
26
+ for (const param of paramList.findDirectExpressions(Expressions.ParameterT)) {
27
+ const t = param.findDirectExpression(Expressions.Target);
28
+ if (t) {
29
+ target_1.Target.runSyntax(t, input);
30
+ }
31
+ if (paramList === changingList && t !== undefined) {
32
+ // hmm, does this do the scoping correctly? handle constants etc? todo
33
+ const found = input.scope.findVariable(t.concatTokens());
34
+ if (found && found.getMeta().includes("read_only" /* IdentifierMeta.ReadOnly */)) {
35
+ const message = `"${t.concatTokens()}" cannot be modified, it is readonly`;
36
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, t.getFirstToken(), message));
37
+ }
38
+ }
39
+ }
40
+ }
41
+ // EXCEPTIONS: process field chains and optional MESSAGE targets
42
+ for (const exc of node.findAllExpressions(Expressions.ParameterException)) {
43
+ for (const s of exc.findDirectExpressions(Expressions.SimpleFieldChain)) {
44
+ field_chain_1.FieldChain.runSyntax(s, input, _reference_1.ReferenceType.DataReadReference);
45
+ }
46
+ const t = exc.findDirectExpression(Expressions.Target);
47
+ if (t) {
48
+ target_1.Target.runSyntax(t, input);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ exports.FunctionParameters = FunctionParameters;
54
+ //# sourceMappingURL=function_parameters.js.map
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CallFunction = void 0;
4
4
  const Expressions = require("../../2_statements/expressions");
5
5
  const source_1 = require("../expressions/source");
6
- const target_1 = require("../expressions/target");
7
6
  const field_chain_1 = require("../expressions/field_chain");
8
7
  const _reference_1 = require("../_reference");
9
8
  const version_1 = require("../../../version");
10
9
  const _syntax_input_1 = require("../_syntax_input");
10
+ const function_parameters_1 = require("../expressions/function_parameters");
11
11
  class CallFunction {
12
12
  runSyntax(node, input) {
13
13
  // todo, lots of work here, similar to receive.ts
@@ -25,22 +25,15 @@ class CallFunction {
25
25
  return;
26
26
  }
27
27
  }
28
- // just recurse
29
- for (const s of node.findAllExpressions(Expressions.Source)) {
30
- source_1.Source.runSyntax(s, input);
31
- }
32
- for (const s of node.findAllExpressions(Expressions.SimpleSource3)) {
28
+ for (const s of node.findDirectExpressions(Expressions.SimpleSource2)) {
33
29
  source_1.Source.runSyntax(s, input);
34
30
  }
35
- for (const t of node.findAllExpressions(Expressions.Target)) {
36
- target_1.Target.runSyntax(t, input);
37
- }
38
- for (const s of node.findDirectExpressions(Expressions.SimpleSource2)) {
31
+ for (const s of node.findDirectExpressions(Expressions.Source)) {
39
32
  source_1.Source.runSyntax(s, input);
40
33
  }
41
- const exceptions = node.findFirstExpression(Expressions.ParameterException);
42
- for (const s of (exceptions === null || exceptions === void 0 ? void 0 : exceptions.findAllExpressions(Expressions.SimpleFieldChain)) || []) {
43
- field_chain_1.FieldChain.runSyntax(s, input, _reference_1.ReferenceType.DataReadReference);
34
+ const fp = node.findDirectExpression(Expressions.FunctionParameters);
35
+ if (fp) {
36
+ function_parameters_1.FunctionParameters.runSyntax(fp, input);
44
37
  }
45
38
  }
46
39
  }
@@ -23,6 +23,15 @@ class Move {
23
23
  target_1.Target.runSyntax(t, input);
24
24
  }
25
25
  }
26
+ if (inline === undefined && firstTarget !== undefined) {
27
+ // hmm, does this do the scoping correctly? handle constants etc? todo
28
+ const found = input.scope.findVariable(firstTarget.concatTokens());
29
+ if (found && found.getMeta().includes("read_only" /* IdentifierMeta.ReadOnly */)) {
30
+ const message = `"${firstTarget.concatTokens()}" cannot be modified, it is readonly`;
31
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, firstTarget.getFirstToken(), message));
32
+ return;
33
+ }
34
+ }
26
35
  const source = node.findDirectExpression(Expressions.Source);
27
36
  let sourceType = source ? source_1.Source.runSyntax(source, input, targetType) : undefined;
28
37
  if (sourceType === undefined) {
@@ -74,7 +74,7 @@ class Registry {
74
74
  }
75
75
  static abaplintVersion() {
76
76
  // magic, see build script "version.sh"
77
- return "2.118.0";
77
+ return "2.118.2";
78
78
  }
79
79
  getDDICReferences() {
80
80
  return this.ddicReferences;
@@ -96,12 +96,12 @@ https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#abap-doc-on
96
96
  issues.push(issue);
97
97
  }
98
98
  if (rowText.trim().match(regexEmptyAbapdoc) === null && previousRowsTexts.indexOf(rowText) === previousRowsTexts.length - 1) {
99
- const message = "Missing ABAP Doc for method " + method.identifier.getToken().getStr() + " (" + rowText + ")";
99
+ const message = "Missing ABAP Doc for method " + method.identifier.getToken().getStr();
100
100
  const issue = issue_1.Issue.atIdentifier(method.identifier, message, this.getMetadata().key, this.conf.severity);
101
101
  issues.push(issue);
102
102
  }
103
103
  if (rowText.trim().match(regexEmptyParameterName) !== null) {
104
- const message = "Missing ABAP Doc parameter name for method " + method.identifier.getToken().getStr() + " (" + rowText + ")";
104
+ const message = "Missing ABAP Doc parameter name for method " + method.identifier.getToken().getStr();
105
105
  const issue = issue_1.Issue.atIdentifier(method.identifier, message, this.getMetadata().key, this.conf.severity);
106
106
  issues.push(issue);
107
107
  }
@@ -18,15 +18,15 @@ class CDSAssociationName {
18
18
  key: "cds_association_name",
19
19
  title: "CDS Association Name",
20
20
  shortDescription: `CDS association names should start with an underscore`,
21
- extendedInformation: `By convention, CDS association names must start with an underscore character.
22
-
21
+ extendedInformation: `By convention, CDS association names must start with an underscore character.
22
+
23
23
  https://help.sap.com/docs/abap-cloud/abap-data-models/cds-associations`,
24
24
  tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Naming],
25
- badExample: `define view entity test as select from source
26
- association [1..1] to target as Assoc on Assoc.id = source.id
25
+ badExample: `define view entity test as select from source
26
+ association [1..1] to target as Assoc on Assoc.id = source.id
27
27
  { key id }`,
28
- goodExample: `define view entity test as select from source
29
- association [1..1] to target as _Assoc on _Assoc.id = source.id
28
+ goodExample: `define view entity test as select from source
29
+ association [1..1] to target as _Assoc on _Assoc.id = source.id
30
30
  { key id }`,
31
31
  };
32
32
  }
@@ -19,19 +19,19 @@ class CDSFieldOrder {
19
19
  title: "CDS Field Order",
20
20
  shortDescription: `Checks that CDS key fields are listed first and associations last in the field list`,
21
21
  tags: [_irule_1.RuleTag.SingleFile],
22
- badExample: `define view entity test as select from source
23
- association [1..1] to target as _Assoc on _Assoc.id = source.id
24
- {
25
- field1,
26
- key id,
27
- _Assoc
22
+ badExample: `define view entity test as select from source
23
+ association [1..1] to target as _Assoc on _Assoc.id = source.id
24
+ {
25
+ field1,
26
+ key id,
27
+ _Assoc
28
28
  }`,
29
- goodExample: `define view entity test as select from source
30
- association [1..1] to target as _Assoc on _Assoc.id = source.id
31
- {
32
- key id,
33
- field1,
34
- _Assoc
29
+ goodExample: `define view entity test as select from source
30
+ association [1..1] to target as _Assoc on _Assoc.id = source.id
31
+ {
32
+ key id,
33
+ field1,
34
+ _Assoc
35
35
  }`,
36
36
  };
37
37
  }
@@ -44,13 +44,13 @@ class CDSNaming {
44
44
  key: "cds_naming",
45
45
  title: "CDS Naming",
46
46
  shortDescription: `Checks CDS naming conventions based on the VDM prefix rules`,
47
- extendedInformation: `Validates that CDS entity names follow the expected prefix conventions:
48
- I_ for interface views, C_ for consumption views, R_ for restricted reuse views,
49
- P_ for private views, A_ for remote API views, X_ for view extends,
50
- E_ for extension include views, F_ for derivation functions, D_ for abstract entities.
51
-
52
- Names must also start with Z after the prefix (custom namespace).
53
-
47
+ extendedInformation: `Validates that CDS entity names follow the expected prefix conventions:
48
+ I_ for interface views, C_ for consumption views, R_ for restricted reuse views,
49
+ P_ for private views, A_ for remote API views, X_ for view extends,
50
+ E_ for extension include views, F_ for derivation functions, D_ for abstract entities.
51
+
52
+ Names must also start with Z after the prefix (custom namespace).
53
+
54
54
  https://help.sap.com/docs/SAP_S4HANA_ON-PREMISE/ee6ff9b281d8448f96b4fe6c89f2bdc8/8a8cee943ef944fe8936f4cc60ba9bc1.html`,
55
55
  tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Naming],
56
56
  badExample: `define view entity ZMY_VIEW as select from source { key id }`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/core",
3
- "version": "2.118.0",
3
+ "version": "2.118.2",
4
4
  "description": "abaplint - Core API",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/abaplint.d.ts",
@@ -63,7 +63,7 @@
63
63
  "typescript": "^5.9.3"
64
64
  },
65
65
  "dependencies": {
66
- "fast-xml-parser": "^5.5.7",
66
+ "fast-xml-parser": "^5.5.8",
67
67
  "json5": "^2.2.3",
68
68
  "vscode-languageserver-types": "^3.17.5"
69
69
  }