@abaplint/cli 2.120.34 → 2.120.35

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 +36 -1
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -51699,6 +51699,7 @@ const constants_1 = __webpack_require__(/*! ../5_syntax/structures/constants */
51699
51699
  const type_definitions_1 = __webpack_require__(/*! ./type_definitions */ "../core/build/src/abap/types/type_definitions.js");
51700
51700
  const types_1 = __webpack_require__(/*! ../5_syntax/structures/types */ "../core/build/src/abap/5_syntax/structures/types.js");
51701
51701
  const type_1 = __webpack_require__(/*! ../5_syntax/statements/type */ "../core/build/src/abap/5_syntax/statements/type.js");
51702
+ const _syntax_input_1 = __webpack_require__(/*! ../5_syntax/_syntax_input */ "../core/build/src/abap/5_syntax/_syntax_input.js");
51702
51703
  const _reference_1 = __webpack_require__(/*! ../5_syntax/_reference */ "../core/build/src/abap/5_syntax/_reference.js");
51703
51704
  const alias_1 = __webpack_require__(/*! ./alias */ "../core/build/src/abap/types/alias.js");
51704
51705
  class Attributes {
@@ -51920,6 +51921,13 @@ class Attributes {
51920
51921
  if (foundAttribute) {
51921
51922
  input.scope.addNamedIdentifier(aliasName.getStr(), foundAttribute);
51922
51923
  }
51924
+ const component = compName.split("~")[1];
51925
+ if (foundType === undefined
51926
+ && foundAttribute === undefined
51927
+ && this.existsInInterface(idef, component, input, []) === false) {
51928
+ const message = "Component " + component + " not found in interface " + idef.getName();
51929
+ input.issues.push((0, _syntax_input_1.syntaxIssue)(input, compToken, message));
51930
+ }
51923
51931
  }
51924
51932
  else if (this.declaredInterfaces.includes(name.toUpperCase()) || input.scope.getDDIC().inErrorNamespace(name) === false) {
51925
51933
  input.scope.addReference(compToken, undefined, _reference_1.ReferenceType.ObjectOrientedVoidReference, input.filename);
@@ -51929,6 +51937,33 @@ class Attributes {
51929
51937
  }
51930
51938
  }
51931
51939
  }
51940
+ /** does the component exist in the interface, or in one of its aliases or included interfaces? */
51941
+ existsInInterface(idef, component, input, visited) {
51942
+ const upperName = idef.getName().toUpperCase();
51943
+ if (visited.includes(upperName)) {
51944
+ return false;
51945
+ }
51946
+ visited.push(upperName);
51947
+ const upper = component.toUpperCase();
51948
+ if (idef.getTypeDefinitions().getByName(component) !== undefined
51949
+ || idef.getAttributes().findByName(component) !== undefined
51950
+ || idef.getMethodDefinitions().getByName(component) !== undefined
51951
+ || idef.getEvents().some(e => e.getName().toUpperCase() === upper)
51952
+ || idef.getAliases().some(a => a.getName().toUpperCase() === upper)) {
51953
+ return true;
51954
+ }
51955
+ for (const i of idef.getImplementing()) {
51956
+ const sub = input.scope.findInterfaceDefinition(i.name);
51957
+ if (sub === undefined) {
51958
+ // voided or not found, assume the component exists
51959
+ return true;
51960
+ }
51961
+ else if (this.existsInInterface(sub, component, input, visited)) {
51962
+ return true;
51963
+ }
51964
+ }
51965
+ return false;
51966
+ }
51932
51967
  parseAttribute(node, visibility, input) {
51933
51968
  let found = undefined;
51934
51969
  const s = node.get();
@@ -70071,7 +70106,7 @@ class Registry {
70071
70106
  }
70072
70107
  static abaplintVersion() {
70073
70108
  // magic, see build script "version.js"
70074
- return "2.120.34";
70109
+ return "2.120.35";
70075
70110
  }
70076
70111
  getDDICReferences() {
70077
70112
  return this.ddicReferences;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.120.34",
3
+ "version": "2.120.35",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "homepage": "https://abaplint.org",
41
41
  "devDependencies": {
42
- "@abaplint/core": "^2.120.34",
42
+ "@abaplint/core": "^2.120.35",
43
43
  "@types/chai": "^4.3.20",
44
44
  "@types/minimist": "^1.2.5",
45
45
  "@types/mocha": "^10.0.10",