@abaplint/cli 2.93.91 → 2.93.92

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 +6 -6
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -6880,7 +6880,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
6880
6880
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6881
6881
 
6882
6882
  "use strict";
6883
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DataDefinition = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst basic_types_1 = __webpack_require__(/*! ../basic_types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js\");\r\nconst type_table_1 = __webpack_require__(/*! ./type_table */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/type_table.js\");\r\nclass DataDefinition {\r\n runSyntax(node, scope, filename) {\r\n const tt = node.findFirstExpression(Expressions.TypeTable);\r\n if (tt) {\r\n return new type_table_1.TypeTable().runSyntax(node, scope, filename);\r\n }\r\n const bfound = new basic_types_1.BasicTypes(filename, scope).simpleType(node);\r\n if (bfound) {\r\n return bfound;\r\n }\r\n const name = node.findFirstExpression(Expressions.DefinitionName);\r\n if (name) {\r\n return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType(\"DataDefinition, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.DataDefinition = DataDefinition;\r\n//# sourceMappingURL=data_definition.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js?");
6883
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DataDefinition = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst basic_types_1 = __webpack_require__(/*! ../basic_types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js\");\r\nconst type_table_1 = __webpack_require__(/*! ./type_table */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/type_table.js\");\r\nclass DataDefinition {\r\n runSyntax(node, scope, filename) {\r\n const tt = node.findFirstExpression(Expressions.TypeTable);\r\n if (tt) {\r\n return new type_table_1.TypeTable().runSyntax(node, scope, filename);\r\n }\r\n const valueNode = node.findFirstExpression(Expressions.Value);\r\n let value = undefined;\r\n if (valueNode) {\r\n value = new basic_types_1.BasicTypes(filename, scope).findValue(node);\r\n }\r\n const bfound = new basic_types_1.BasicTypes(filename, scope).simpleType(node);\r\n if (bfound) {\r\n if (value) {\r\n return new _typed_identifier_1.TypedIdentifier(bfound.getToken(), filename, bfound.getType(), bfound.getMeta(), value);\r\n }\r\n else {\r\n return bfound;\r\n }\r\n }\r\n const name = node.findFirstExpression(Expressions.DefinitionName);\r\n if (name) {\r\n return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new basic_1.UnknownType(\"DataDefinition, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.DataDefinition = DataDefinition;\r\n//# sourceMappingURL=data_definition.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js?");
6884
6884
 
6885
6885
  /***/ }),
6886
6886
 
@@ -7551,7 +7551,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
7551
7551
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7552
7552
 
7553
7553
  "use strict";
7554
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ClassData = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst data_definition_1 = __webpack_require__(/*! ../expressions/data_definition */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js\");\r\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\r\nclass ClassData {\r\n runSyntax(node, scope, filename) {\r\n const dd = node.findFirstExpression(Expressions.DataDefinition);\r\n if (dd) {\r\n const found = new data_definition_1.DataDefinition().runSyntax(dd, scope, filename);\r\n if (found === undefined) {\r\n return undefined;\r\n }\r\n const meta = found.getMeta().slice();\r\n meta.push(\"static\" /* IdentifierMeta.Static */);\r\n return new _typed_identifier_1.TypedIdentifier(found.getToken(), filename, found.getType(), meta);\r\n }\r\n const fallback = node.findFirstExpression(Expressions.NamespaceSimpleName);\r\n if (fallback) {\r\n return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), filename, new unknown_type_1.UnknownType(\"class data, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.ClassData = ClassData;\r\n//# sourceMappingURL=class_data.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/class_data.js?");
7554
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ClassData = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst data_definition_1 = __webpack_require__(/*! ../expressions/data_definition */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js\");\r\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\r\nclass ClassData {\r\n runSyntax(node, scope, filename) {\r\n const dd = node.findFirstExpression(Expressions.DataDefinition);\r\n if (dd) {\r\n const found = new data_definition_1.DataDefinition().runSyntax(dd, scope, filename);\r\n if (found === undefined) {\r\n return undefined;\r\n }\r\n const meta = [...found.getMeta(), \"static\" /* IdentifierMeta.Static */];\r\n return new _typed_identifier_1.TypedIdentifier(found.getToken(), filename, found.getType(), meta, found.getValue());\r\n }\r\n const fallback = node.findFirstExpression(Expressions.NamespaceSimpleName);\r\n if (fallback) {\r\n return new _typed_identifier_1.TypedIdentifier(fallback.getFirstToken(), filename, new unknown_type_1.UnknownType(\"class data, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.ClassData = ClassData;\r\n//# sourceMappingURL=class_data.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/class_data.js?");
7555
7555
 
7556
7556
  /***/ }),
7557
7557
 
@@ -7716,7 +7716,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
7716
7716
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7717
7717
 
7718
7718
  "use strict";
7719
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Data = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst data_definition_1 = __webpack_require__(/*! ../expressions/data_definition */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js\");\r\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\r\nconst basic_types_1 = __webpack_require__(/*! ../basic_types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js\");\r\nclass Data {\r\n runSyntax(node, scope, filename) {\r\n const val = node.findFirstExpression(Expressions.Value);\r\n if (val) {\r\n new basic_types_1.BasicTypes(filename, scope).findValue(node);\r\n }\r\n const dd = node.findFirstExpression(Expressions.DataDefinition);\r\n if (dd) {\r\n return new data_definition_1.DataDefinition().runSyntax(dd, scope, filename);\r\n }\r\n const name = node.findFirstExpression(Expressions.DefinitionName);\r\n if (name) {\r\n return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new unknown_type_1.UnknownType(\"data, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.Data = Data;\r\n//# sourceMappingURL=data.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js?");
7719
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Data = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nconst data_definition_1 = __webpack_require__(/*! ../expressions/data_definition */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/data_definition.js\");\r\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\r\nclass Data {\r\n runSyntax(node, scope, filename) {\r\n const dd = node.findFirstExpression(Expressions.DataDefinition);\r\n if (dd) {\r\n return new data_definition_1.DataDefinition().runSyntax(dd, scope, filename);\r\n }\r\n const name = node.findFirstExpression(Expressions.DefinitionName);\r\n if (name) {\r\n return new _typed_identifier_1.TypedIdentifier(name.getFirstToken(), filename, new unknown_type_1.UnknownType(\"data, fallback\"));\r\n }\r\n return undefined;\r\n }\r\n}\r\nexports.Data = Data;\r\n//# sourceMappingURL=data.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js?");
7720
7720
 
7721
7721
  /***/ }),
7722
7722
 
@@ -9267,7 +9267,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
9267
9267
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9268
9268
 
9269
9269
  "use strict";
9270
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ClassAttribute = void 0;\r\nconst _typed_identifier_1 = __webpack_require__(/*! ./_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nclass ClassAttribute extends _typed_identifier_1.TypedIdentifier {\r\n constructor(id, visibility, meta) {\r\n super(id.getToken(), id.getFilename(), id.getType(), meta);\r\n this.visibility = visibility;\r\n }\r\n getVisibility() {\r\n return this.visibility;\r\n }\r\n}\r\nexports.ClassAttribute = ClassAttribute;\r\n//# sourceMappingURL=class_attribute.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/class_attribute.js?");
9270
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ClassAttribute = void 0;\r\nconst _typed_identifier_1 = __webpack_require__(/*! ./_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\r\nclass ClassAttribute extends _typed_identifier_1.TypedIdentifier {\r\n constructor(id, visibility, meta, value) {\r\n super(id.getToken(), id.getFilename(), id.getType(), meta, value);\r\n this.visibility = visibility;\r\n }\r\n getVisibility() {\r\n return this.visibility;\r\n }\r\n}\r\nexports.ClassAttribute = ClassAttribute;\r\n//# sourceMappingURL=class_attribute.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/class_attribute.js?");
9271
9271
 
9272
9272
  /***/ }),
9273
9273
 
@@ -9278,7 +9278,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
9278
9278
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
9279
9279
 
9280
9280
  "use strict";
9281
- eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Attributes = void 0;\r\nconst Structures = __webpack_require__(/*! ../3_structures/structures */ \"./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js\");\r\nconst Statements = __webpack_require__(/*! ../2_statements/statements */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js\");\r\nconst class_attribute_1 = __webpack_require__(/*! ./class_attribute */ \"./node_modules/@abaplint/core/build/src/abap/types/class_attribute.js\");\r\nconst class_constant_1 = __webpack_require__(/*! ./class_constant */ \"./node_modules/@abaplint/core/build/src/abap/types/class_constant.js\");\r\nconst nodes_1 = __webpack_require__(/*! ../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst visibility_1 = __webpack_require__(/*! ../4_file_information/visibility */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js\");\r\nconst class_data_1 = __webpack_require__(/*! ../5_syntax/statements/class_data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/class_data.js\");\r\nconst class_data_2 = __webpack_require__(/*! ../5_syntax/structures/class_data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/class_data.js\");\r\nconst data_1 = __webpack_require__(/*! ../5_syntax/statements/data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js\");\r\nconst constant_1 = __webpack_require__(/*! ../5_syntax/statements/constant */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/constant.js\");\r\nconst data_2 = __webpack_require__(/*! ../5_syntax/structures/data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/data.js\");\r\nconst type_enum_1 = __webpack_require__(/*! ../5_syntax/structures/type_enum */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_enum.js\");\r\nconst constants_1 = __webpack_require__(/*! ../5_syntax/structures/constants */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/constants.js\");\r\nconst type_definitions_1 = __webpack_require__(/*! ./type_definitions */ \"./node_modules/@abaplint/core/build/src/abap/types/type_definitions.js\");\r\nconst types_1 = __webpack_require__(/*! ../5_syntax/structures/types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js\");\r\nconst type_1 = __webpack_require__(/*! ../5_syntax/statements/type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/type.js\");\r\nclass Attributes {\r\n constructor(node, filename, scope) {\r\n this.static = [];\r\n this.instance = [];\r\n this.constants = [];\r\n this.filename = filename;\r\n this.tlist = [];\r\n this.parse(node, scope);\r\n this.types = new type_definitions_1.TypeDefinitions(this.tlist);\r\n }\r\n getTypes() {\r\n return this.types;\r\n }\r\n getStatic() {\r\n return this.static;\r\n }\r\n getAll() {\r\n let res = [];\r\n res = res.concat(this.static);\r\n res = res.concat(this.instance);\r\n return res;\r\n }\r\n getStaticsByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.static) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n getInstance() {\r\n return this.instance;\r\n }\r\n getInstancesByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.instance) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n getConstants() {\r\n return this.constants;\r\n }\r\n getConstantsByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.constants) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n // todo, optimize\r\n findByName(name) {\r\n const upper = name.toUpperCase();\r\n for (const a of this.getStatic()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n for (const a of this.getInstance()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n for (const a of this.getConstants()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /////////////////////////////\r\n parse(node, scope) {\r\n const cdef = node.findDirectStructure(Structures.ClassDefinition);\r\n if (cdef) {\r\n this.parseSection(cdef.findDirectStructure(Structures.PublicSection), visibility_1.Visibility.Public, scope);\r\n this.parseSection(cdef.findDirectStructure(Structures.ProtectedSection), visibility_1.Visibility.Protected, scope);\r\n this.parseSection(cdef.findDirectStructure(Structures.PrivateSection), visibility_1.Visibility.Private, scope);\r\n return;\r\n }\r\n const idef = node.findDirectStructure(Structures.Interface);\r\n if (idef) {\r\n this.parseSection(idef.findDirectStructure(Structures.SectionContents), visibility_1.Visibility.Public, scope);\r\n return;\r\n }\r\n throw new Error(\"MethodDefinition, expected ClassDefinition or InterfaceDefinition\");\r\n }\r\n parseSection(node, visibility, scope) {\r\n if (node === undefined) {\r\n return;\r\n }\r\n for (const c of node.getChildren()) {\r\n const ctyp = c.get();\r\n if (c instanceof nodes_1.StructureNode) {\r\n if (ctyp instanceof Structures.Data) {\r\n const found = new data_2.Data().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_attribute_1.ClassAttribute(found, visibility, found.getMeta());\r\n this.instance.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.ClassData) {\r\n const found = new class_data_2.ClassData().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_attribute_1.ClassAttribute(found, visibility, found.getMeta());\r\n this.static.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.Constants) {\r\n const { type: found, values } = new constants_1.Constants().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_constant_1.ClassConstant(found, visibility, values);\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.TypeEnum) {\r\n const { values, types } = new type_enum_1.TypeEnum().runSyntax(c, scope, this.filename);\r\n for (const v of values) {\r\n // for now add ENUM values as constants\r\n const attr = new class_constant_1.ClassConstant(v, visibility, \"novalueClassAttributeEnum\");\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n for (const t of types) {\r\n this.tlist.push({ type: t, visibility });\r\n // scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.Types) {\r\n const res = new types_1.Types().runSyntax(c, scope, this.filename);\r\n if (res) {\r\n scope.addType(res);\r\n this.tlist.push({ type: res, visibility });\r\n }\r\n }\r\n else {\r\n // begin recursion\r\n this.parseSection(c, visibility, scope);\r\n }\r\n }\r\n else if (c instanceof nodes_1.StatementNode) {\r\n if (ctyp instanceof Statements.Data) {\r\n this.instance.push(this.parseAttribute(c, visibility, scope));\r\n }\r\n else if (ctyp instanceof Statements.ClassData) {\r\n this.static.push(this.parseAttribute(c, visibility, scope));\r\n }\r\n else if (ctyp instanceof Statements.Constant) {\r\n const found = new constant_1.Constant().runSyntax(c, scope, this.filename);\r\n if (found) {\r\n const attr = new class_constant_1.ClassConstant(found, visibility, found.getValue());\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Statements.Type) {\r\n const res = new type_1.Type().runSyntax(c, scope, this.filename);\r\n if (res) {\r\n scope.addType(res);\r\n this.tlist.push({ type: res, visibility });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n parseAttribute(node, visibility, scope) {\r\n let found = undefined;\r\n const s = node.get();\r\n if (s instanceof Statements.Data) {\r\n found = new data_1.Data().runSyntax(node, scope, this.filename);\r\n }\r\n else if (s instanceof Statements.ClassData) {\r\n found = new class_data_1.ClassData().runSyntax(node, scope, this.filename);\r\n }\r\n else {\r\n throw new Error(\"ClassAttribute, unexpected node, 1, \" + this.filename);\r\n }\r\n if (found === undefined) {\r\n throw new Error(\"ClassAttribute, unexpected node, \" + this.filename);\r\n }\r\n scope.addIdentifier(found);\r\n return new class_attribute_1.ClassAttribute(found, visibility, found.getMeta());\r\n }\r\n}\r\nexports.Attributes = Attributes;\r\n//# sourceMappingURL=class_attributes.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/class_attributes.js?");
9281
+ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.Attributes = void 0;\r\nconst Structures = __webpack_require__(/*! ../3_structures/structures */ \"./node_modules/@abaplint/core/build/src/abap/3_structures/structures/index.js\");\r\nconst Statements = __webpack_require__(/*! ../2_statements/statements */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/statements/index.js\");\r\nconst class_attribute_1 = __webpack_require__(/*! ./class_attribute */ \"./node_modules/@abaplint/core/build/src/abap/types/class_attribute.js\");\r\nconst class_constant_1 = __webpack_require__(/*! ./class_constant */ \"./node_modules/@abaplint/core/build/src/abap/types/class_constant.js\");\r\nconst nodes_1 = __webpack_require__(/*! ../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst visibility_1 = __webpack_require__(/*! ../4_file_information/visibility */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js\");\r\nconst class_data_1 = __webpack_require__(/*! ../5_syntax/statements/class_data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/class_data.js\");\r\nconst class_data_2 = __webpack_require__(/*! ../5_syntax/structures/class_data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/class_data.js\");\r\nconst data_1 = __webpack_require__(/*! ../5_syntax/statements/data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/data.js\");\r\nconst constant_1 = __webpack_require__(/*! ../5_syntax/statements/constant */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/constant.js\");\r\nconst data_2 = __webpack_require__(/*! ../5_syntax/structures/data */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/data.js\");\r\nconst type_enum_1 = __webpack_require__(/*! ../5_syntax/structures/type_enum */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/type_enum.js\");\r\nconst constants_1 = __webpack_require__(/*! ../5_syntax/structures/constants */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/constants.js\");\r\nconst type_definitions_1 = __webpack_require__(/*! ./type_definitions */ \"./node_modules/@abaplint/core/build/src/abap/types/type_definitions.js\");\r\nconst types_1 = __webpack_require__(/*! ../5_syntax/structures/types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/structures/types.js\");\r\nconst type_1 = __webpack_require__(/*! ../5_syntax/statements/type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/statements/type.js\");\r\nclass Attributes {\r\n constructor(node, filename, scope) {\r\n this.static = [];\r\n this.instance = [];\r\n this.constants = [];\r\n this.filename = filename;\r\n this.tlist = [];\r\n this.parse(node, scope);\r\n this.types = new type_definitions_1.TypeDefinitions(this.tlist);\r\n }\r\n getTypes() {\r\n return this.types;\r\n }\r\n getStatic() {\r\n return this.static;\r\n }\r\n getAll() {\r\n let res = [];\r\n res = res.concat(this.static);\r\n res = res.concat(this.instance);\r\n return res;\r\n }\r\n getStaticsByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.static) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n getInstance() {\r\n return this.instance;\r\n }\r\n getInstancesByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.instance) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n getConstants() {\r\n return this.constants;\r\n }\r\n getConstantsByVisibility(visibility) {\r\n const attributes = [];\r\n for (const attr of this.constants) {\r\n if (attr.getVisibility() === visibility) {\r\n attributes.push(attr);\r\n }\r\n }\r\n return attributes;\r\n }\r\n // todo, optimize\r\n findByName(name) {\r\n const upper = name.toUpperCase();\r\n for (const a of this.getStatic()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n for (const a of this.getInstance()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n for (const a of this.getConstants()) {\r\n if (a.getName().toUpperCase() === upper) {\r\n return a;\r\n }\r\n }\r\n return undefined;\r\n }\r\n /////////////////////////////\r\n parse(node, scope) {\r\n const cdef = node.findDirectStructure(Structures.ClassDefinition);\r\n if (cdef) {\r\n this.parseSection(cdef.findDirectStructure(Structures.PublicSection), visibility_1.Visibility.Public, scope);\r\n this.parseSection(cdef.findDirectStructure(Structures.ProtectedSection), visibility_1.Visibility.Protected, scope);\r\n this.parseSection(cdef.findDirectStructure(Structures.PrivateSection), visibility_1.Visibility.Private, scope);\r\n return;\r\n }\r\n const idef = node.findDirectStructure(Structures.Interface);\r\n if (idef) {\r\n this.parseSection(idef.findDirectStructure(Structures.SectionContents), visibility_1.Visibility.Public, scope);\r\n return;\r\n }\r\n throw new Error(\"MethodDefinition, expected ClassDefinition or InterfaceDefinition\");\r\n }\r\n parseSection(node, visibility, scope) {\r\n if (node === undefined) {\r\n return;\r\n }\r\n for (const c of node.getChildren()) {\r\n const ctyp = c.get();\r\n if (c instanceof nodes_1.StructureNode) {\r\n if (ctyp instanceof Structures.Data) {\r\n const found = new data_2.Data().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_attribute_1.ClassAttribute(found, visibility, found.getMeta());\r\n this.instance.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.ClassData) {\r\n const found = new class_data_2.ClassData().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_attribute_1.ClassAttribute(found, visibility, found.getMeta());\r\n this.static.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.Constants) {\r\n const { type: found, values } = new constants_1.Constants().runSyntax(c, scope, this.filename);\r\n if (found !== undefined) {\r\n const attr = new class_constant_1.ClassConstant(found, visibility, values);\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.TypeEnum) {\r\n const { values, types } = new type_enum_1.TypeEnum().runSyntax(c, scope, this.filename);\r\n for (const v of values) {\r\n // for now add ENUM values as constants\r\n const attr = new class_constant_1.ClassConstant(v, visibility, \"novalueClassAttributeEnum\");\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n for (const t of types) {\r\n this.tlist.push({ type: t, visibility });\r\n // scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Structures.Types) {\r\n const res = new types_1.Types().runSyntax(c, scope, this.filename);\r\n if (res) {\r\n scope.addType(res);\r\n this.tlist.push({ type: res, visibility });\r\n }\r\n }\r\n else {\r\n // begin recursion\r\n this.parseSection(c, visibility, scope);\r\n }\r\n }\r\n else if (c instanceof nodes_1.StatementNode) {\r\n if (ctyp instanceof Statements.Data) {\r\n this.instance.push(this.parseAttribute(c, visibility, scope));\r\n }\r\n else if (ctyp instanceof Statements.ClassData) {\r\n this.static.push(this.parseAttribute(c, visibility, scope));\r\n }\r\n else if (ctyp instanceof Statements.Constant) {\r\n const found = new constant_1.Constant().runSyntax(c, scope, this.filename);\r\n if (found) {\r\n const attr = new class_constant_1.ClassConstant(found, visibility, found.getValue());\r\n this.constants.push(attr);\r\n scope.addIdentifier(attr);\r\n }\r\n }\r\n else if (ctyp instanceof Statements.Type) {\r\n const res = new type_1.Type().runSyntax(c, scope, this.filename);\r\n if (res) {\r\n scope.addType(res);\r\n this.tlist.push({ type: res, visibility });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n parseAttribute(node, visibility, scope) {\r\n let found = undefined;\r\n const s = node.get();\r\n if (s instanceof Statements.Data) {\r\n found = new data_1.Data().runSyntax(node, scope, this.filename);\r\n }\r\n else if (s instanceof Statements.ClassData) {\r\n found = new class_data_1.ClassData().runSyntax(node, scope, this.filename);\r\n }\r\n else {\r\n throw new Error(\"ClassAttribute, unexpected node, 1, \" + this.filename);\r\n }\r\n if (found === undefined) {\r\n throw new Error(\"ClassAttribute, unexpected node, \" + this.filename);\r\n }\r\n scope.addIdentifier(found);\r\n return new class_attribute_1.ClassAttribute(found, visibility, found.getMeta(), found.getValue());\r\n }\r\n}\r\nexports.Attributes = Attributes;\r\n//# sourceMappingURL=class_attributes.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/types/class_attributes.js?");
9282
9282
 
9283
9283
  /***/ }),
9284
9284
 
@@ -11665,7 +11665,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
11665
11665
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
11666
11666
 
11667
11667
  "use strict";
11668
- eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\nconst rules_runner_1 = __webpack_require__(/*! ./rules_runner */ \"./node_modules/@abaplint/core/build/src/rules_runner.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n this.dependencies = {};\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.93.91\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n // todo: performance? cache regexp?\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n _addFiles(files, dependency) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n let found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n if (dependency === false && found && this.isDependency(found)) {\n this.removeDependency(found);\n found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n }\n found.addFile(f);\n }\n return this;\n }\n addFiles(files) {\n this._addFiles(files, false);\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.addDependency(f);\n }\n return this;\n }\n addDependency(file) {\n var _a;\n const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return this;\n }\n const name = file.getObjectName().toUpperCase();\n if (this.dependencies[type] === undefined) {\n this.dependencies[type] = {};\n }\n this.dependencies[type][name] = true;\n this._addFiles([file], true);\n return this;\n }\n removeDependency(obj) {\n var _a;\n (_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];\n this.removeObject(obj);\n }\n isDependency(obj) {\n var _a;\n return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;\n }\n isFileDependency(filename) {\n var _a, _b;\n const f = this.getFileByName(filename);\n if (f === undefined) {\n return false;\n }\n const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return false;\n }\n const name = f.getObjectName().toUpperCase();\n return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules(this.getObjects(), input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules([iobj]);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11668
+ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Registry = void 0;\nconst config_1 = __webpack_require__(/*! ./config */ \"./node_modules/@abaplint/core/build/src/config.js\");\nconst artifacts_objects_1 = __webpack_require__(/*! ./artifacts_objects */ \"./node_modules/@abaplint/core/build/src/artifacts_objects.js\");\nconst find_global_definitions_1 = __webpack_require__(/*! ./abap/5_syntax/global_definitions/find_global_definitions */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/global_definitions/find_global_definitions.js\");\nconst excludeHelper_1 = __webpack_require__(/*! ./utils/excludeHelper */ \"./node_modules/@abaplint/core/build/src/utils/excludeHelper.js\");\nconst ddic_references_1 = __webpack_require__(/*! ./ddic_references */ \"./node_modules/@abaplint/core/build/src/ddic_references.js\");\nconst rules_runner_1 = __webpack_require__(/*! ./rules_runner */ \"./node_modules/@abaplint/core/build/src/rules_runner.js\");\n// todo, this should really be an instance in case there are multiple Registry'ies\nclass ParsingPerformance {\n static clear() {\n this.results = [];\n this.lexing = 0;\n this.statements = 0;\n this.structure = 0;\n }\n static push(obj, result) {\n if (result.runtimeExtra) {\n this.lexing += result.runtimeExtra.lexing;\n this.statements += result.runtimeExtra.statements;\n this.structure += result.runtimeExtra.structure;\n }\n if (result.runtime < 100) {\n return;\n }\n if (this.results === undefined) {\n this.results = [];\n }\n let extra = \"\";\n if (result.runtimeExtra) {\n extra = `\\t(lexing: ${result.runtimeExtra.lexing}ms, statements: ${result.runtimeExtra.statements}ms, structure: ${result.runtimeExtra.structure}ms)`;\n }\n this.results.push({\n runtime: result.runtime,\n extra,\n name: obj.getType() + \" \" + obj.getName(),\n });\n }\n static output() {\n const MAX = 10;\n this.results.sort((a, b) => { return b.runtime - a.runtime; });\n for (let i = 0; i < MAX; i++) {\n const row = this.results[i];\n if (row === undefined) {\n break;\n }\n process.stderr.write(`\\t${row.runtime}ms\\t${row.name} ${row.extra}\\n`);\n }\n process.stderr.write(`\\tTotal lexing: ${this.lexing}ms\\n`);\n process.stderr.write(`\\tTotal statements: ${this.statements}ms\\n`);\n process.stderr.write(`\\tTotal structure: ${this.structure}ms\\n`);\n }\n}\n///////////////////////////////////////////////////////////////////////////////////////////////\nclass Registry {\n constructor(conf) {\n this.objects = {};\n this.objectsByType = {};\n this.dependencies = {};\n this.conf = conf ? conf : config_1.Config.getDefault();\n this.references = new ddic_references_1.DDICReferences();\n }\n static abaplintVersion() {\n // magic, see build script \"version.sh\"\n return \"2.93.92\";\n }\n getDDICReferences() {\n return this.references;\n }\n *getObjects() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n yield this.objects[name][type];\n }\n }\n }\n *getObjectsByType(type) {\n for (const name in this.objectsByType[type] || []) {\n yield this.objectsByType[type][name];\n }\n }\n *getFiles() {\n for (const obj of this.getObjects()) {\n for (const file of obj.getFiles()) {\n yield file;\n }\n }\n }\n getFirstObject() {\n for (const name in this.objects) {\n for (const type in this.objects[name]) {\n return this.objects[name][type];\n }\n }\n return undefined;\n }\n getObjectCount(skipDependencies = true) {\n let res = 0;\n for (const o of this.getObjects()) {\n if (skipDependencies === true && this.isDependency(o)) {\n continue;\n }\n res = res + 1;\n }\n return res;\n }\n getFileByName(filename) {\n const upper = filename.toUpperCase();\n for (const o of this.getObjects()) {\n for (const f of o.getFiles()) {\n if (f.getFilename().toUpperCase() === upper) {\n return f;\n }\n }\n }\n return undefined;\n }\n getObject(type, name) {\n if (type === undefined || name === undefined) {\n return undefined;\n }\n const searchName = name.toUpperCase();\n if (this.objects[searchName]) {\n return this.objects[searchName][type];\n }\n return undefined;\n }\n getConfig() {\n return this.conf;\n }\n // assumption: Config is immutable, and can only be changed via this method\n setConfig(conf) {\n for (const obj of this.getObjects()) {\n obj.setDirty();\n }\n this.conf = conf;\n return this;\n }\n inErrorNamespace(name) {\n // todo: performance? cache regexp?\n const reg = new RegExp(this.getConfig().getSyntaxSetttings().errorNamespace, \"i\");\n return reg.test(name);\n }\n addFile(file) {\n return this.addFiles([file]);\n }\n updateFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.updateFile(file);\n return this;\n }\n removeFile(file) {\n const obj = this.find(file.getObjectName(), file.getObjectType());\n obj.removeFile(file);\n if (obj.getFiles().length === 0) {\n this.references.clear(obj);\n this.removeObject(obj);\n }\n return this;\n }\n _addFiles(files, dependency) {\n var _a;\n const globalExclude = ((_a = this.conf.getGlobal().exclude) !== null && _a !== void 0 ? _a : [])\n .map(pattern => new RegExp(pattern, \"i\"));\n for (const f of files) {\n const filename = f.getFilename();\n const isNotAbapgitFile = filename.split(\".\").length <= 2;\n if (isNotAbapgitFile || excludeHelper_1.ExcludeHelper.isExcluded(filename, globalExclude)) {\n continue;\n }\n let found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n if (dependency === false && found && this.isDependency(found)) {\n this.removeDependency(found);\n found = this.findOrCreate(f.getObjectName(), f.getObjectType());\n }\n found.addFile(f);\n }\n return this;\n }\n addFiles(files) {\n this._addFiles(files, false);\n return this;\n }\n addDependencies(files) {\n for (const f of files) {\n this.addDependency(f);\n }\n return this;\n }\n addDependency(file) {\n var _a;\n const type = (_a = file.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return this;\n }\n const name = file.getObjectName().toUpperCase();\n if (this.dependencies[type] === undefined) {\n this.dependencies[type] = {};\n }\n this.dependencies[type][name] = true;\n this._addFiles([file], true);\n return this;\n }\n removeDependency(obj) {\n var _a;\n (_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? true : delete _a[obj.getName()];\n this.removeObject(obj);\n }\n isDependency(obj) {\n var _a;\n return ((_a = this.dependencies[obj.getType()]) === null || _a === void 0 ? void 0 : _a[obj.getName()]) === true;\n }\n isFileDependency(filename) {\n var _a, _b;\n const f = this.getFileByName(filename);\n if (f === undefined) {\n return false;\n }\n const type = (_a = f.getObjectType()) === null || _a === void 0 ? void 0 : _a.toUpperCase();\n if (type === undefined) {\n return false;\n }\n const name = f.getObjectName().toUpperCase();\n return ((_b = this.dependencies[type]) === null || _b === void 0 ? void 0 : _b[name]) === true;\n }\n // assumption: the file is already in the registry\n findObjectForFile(file) {\n const filename = file.getFilename();\n for (const obj of this.getObjects()) {\n for (const ofile of obj.getFiles()) {\n if (ofile.getFilename() === filename) {\n return obj;\n }\n }\n }\n return undefined;\n }\n // todo, this will be changed to async sometime\n findIssues(input) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules(this.getObjects(), input);\n }\n // todo, this will be changed to async sometime\n findIssuesObject(iobj) {\n if (this.isDirty() === true) {\n this.parse();\n }\n return new rules_runner_1.RulesRunner(this).runRules([iobj]);\n }\n // todo, this will be changed to async sometime\n parse() {\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n for (const o of this.getObjects()) {\n this.parsePrivate(o);\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run();\n return this;\n }\n async parseAsync(input) {\n var _a, _b;\n if (this.isDirty() === false) {\n return this;\n }\n ParsingPerformance.clear();\n (_a = input === null || input === void 0 ? void 0 : input.progress) === null || _a === void 0 ? void 0 : _a.set(this.getObjectCount(false), \"Lexing and parsing\");\n for (const o of this.getObjects()) {\n await ((_b = input === null || input === void 0 ? void 0 : input.progress) === null || _b === void 0 ? void 0 : _b.tick(\"Lexing and parsing(\" + this.conf.getVersion() + \") - \" + o.getType() + \" \" + o.getName()));\n this.parsePrivate(o);\n }\n if ((input === null || input === void 0 ? void 0 : input.outputPerformance) === true) {\n ParsingPerformance.output();\n }\n new find_global_definitions_1.FindGlobalDefinitions(this).run(input === null || input === void 0 ? void 0 : input.progress);\n return this;\n }\n //////////////////////////////////////////\n // todo, refactor, this is a mess, see where-used, a lot of the code should be in this method instead\n parsePrivate(input) {\n const config = this.getConfig();\n const result = input.parse(config.getVersion(), config.getSyntaxSetttings().globalMacros, this);\n ParsingPerformance.push(input, result);\n }\n isDirty() {\n for (const o of this.getObjects()) {\n const dirty = o.isDirty();\n if (dirty === true) {\n return true;\n }\n }\n return false;\n }\n findOrCreate(name, type) {\n try {\n return this.find(name, type);\n }\n catch (_a) {\n const newName = name.toUpperCase();\n const newType = type ? type : \"UNKNOWN\";\n const add = artifacts_objects_1.ArtifactsObjects.newObject(newName, newType);\n if (this.objects[newName] === undefined) {\n this.objects[newName] = {};\n }\n this.objects[newName][newType] = add;\n if (this.objectsByType[newType] === undefined) {\n this.objectsByType[newType] = {};\n }\n this.objectsByType[newType][newName] = add;\n return add;\n }\n }\n removeObject(remove) {\n if (remove === undefined) {\n return;\n }\n if (this.objects[remove.getName()][remove.getType()] === undefined) {\n throw new Error(\"removeObject: object not found\");\n }\n if (Object.keys(this.objects[remove.getName()]).length === 1) {\n delete this.objects[remove.getName()];\n }\n else {\n delete this.objects[remove.getName()][remove.getType()];\n }\n if (Object.keys(this.objectsByType[remove.getType()]).length === 1) {\n delete this.objectsByType[remove.getType()];\n }\n else {\n delete this.objectsByType[remove.getType()][remove.getName()];\n }\n }\n find(name, type) {\n const searchType = type ? type : \"UNKNOWN\";\n const searchName = name.toUpperCase();\n if (this.objects[searchName] !== undefined\n && this.objects[searchName][searchType]) {\n return this.objects[searchName][searchType];\n }\n throw new Error(\"find: object not found, \" + type + \" \" + name);\n }\n}\nexports.Registry = Registry;\n//# sourceMappingURL=registry.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/registry.js?");
11669
11669
 
11670
11670
  /***/ }),
11671
11671
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.93.91",
3
+ "version": "2.93.92",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "bin": {
6
6
  "abaplint": "./abaplint"
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "homepage": "https://abaplint.org",
39
39
  "devDependencies": {
40
- "@abaplint/core": "^2.93.91",
40
+ "@abaplint/core": "^2.93.92",
41
41
  "@types/chai": "^4.3.4",
42
42
  "@types/glob": "^7.2.0",
43
43
  "@types/minimist": "^1.2.2",