@abaplint/cli 2.95.48 → 2.95.50
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.
- package/build/cli.js +7 -7
- package/package.json +4 -4
package/build/cli.js
CHANGED
|
@@ -2887,7 +2887,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
2887
2887
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
2888
2888
|
|
|
2889
2889
|
"use strict";
|
|
2890
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AuthorityCheck = void 0;\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\
|
|
2890
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AuthorityCheck = void 0;\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nclass AuthorityCheck {\n getMatcher() {\n const field = (0, combi_1.seq)(\"FIELD\", expressions_1.Source);\n const id = (0, combi_1.seq)(\"ID\", expressions_1.Source, (0, combi_1.alt)(field, \"DUMMY\"));\n const ret = (0, combi_1.seq)(\"AUTHORITY-CHECK OBJECT\", expressions_1.Source, (0, combi_1.opt)((0, combi_1.seq)(\"FOR USER\", expressions_1.Source)), (0, combi_1.plus)(id));\n return ret;\n }\n}\nexports.AuthorityCheck = AuthorityCheck;\n//# sourceMappingURL=authority_check.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/2_statements/statements/authority_check.js?");
|
|
2891
2891
|
|
|
2892
2892
|
/***/ }),
|
|
2893
2893
|
|
|
@@ -4669,7 +4669,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
4669
4669
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
4670
4670
|
|
|
4671
4671
|
"use strict";
|
|
4672
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MethodDef = void 0;\nconst version_1 = __webpack_require__(/*! ../../../version */ \"./node_modules/@abaplint/core/build/src/version.js\");\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nclass MethodDef {\n getMatcher() {\n const def = (0, combi_1.ver)(version_1.Version.v740sp08, (0, combi_1.seq)(\"DEFAULT\", (0, combi_1.altPrio)(\"FAIL\", \"IGNORE\")));\n const parameters = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)(\"FINAL\", def, expressions_1.Abstract)), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefChanging), (0, combi_1.optPrio)(expressions_1.MethodDefReturning), (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));\n const testing = (0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), \"FOR TESTING\", (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));\n // todo, this is only from version something\n const tableFunction = (0, combi_1.seq)(\"TABLE FUNCTION\", (0, combi_1.regex)(/^\\w+?$/));\n // todo, this is only from version something\n const ddl = \"DDL OBJECT OPTIONS CDS SESSION CLIENT REQUIRED\";\n const result = (0, combi_1.seq)(\"RESULT\", expressions_1.MethodParamName);\n const link = (0, combi_1.seq)(\"LINK\", expressions_1.MethodParamName);\n const full = (0, combi_1.seq)(\"FULL\", expressions_1.MethodParamName);\n const modify = (0, combi_1.alt)((0, combi_1.seq)(\"FOR ACTION\", expressions_1.TypeName, result), (0, combi_1.seq)(\"FOR CREATE\", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation)), (0, combi_1.seq)(\"FOR DELETE\", expressions_1.TypeName), (0, combi_1.seq)(\"FOR UPDATE\", expressions_1.TypeName));\n const behavior = (0, combi_1.altPrio)((0, combi_1.seq)(\"VALIDATE ON SAVE IMPORTING\", expressions_1.MethodParamName, \"FOR\", expressions_1.TypeName), (0, combi_1.seq)(\"MODIFY IMPORTING\", expressions_1.MethodParamName, modify), (0, combi_1.seq)(\"READ IMPORTING\", expressions_1.MethodParamName, \"FOR READ\", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation), (0, combi_1.optPrio)(full), result, (0, combi_1.optPrio)(link)), (0, combi_1.seq)(\"FEATURES IMPORTING\", expressions_1.MethodParamName, \"REQUEST\", expressions_1.NamespaceSimpleName, \"FOR\", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)(\"BEHAVIOR IMPORTING\", expressions_1.MethodParamName, \"FOR CREATE\", expressions_1.TypeName, expressions_1.MethodParamName, \"FOR UPDATE\", expressions_1.TypeName, expressions_1.MethodParamName, \"FOR DELETE\", expressions_1.TypeName), (0, combi_1.seq)(\"BEHAVIOR IMPORTING\", expressions_1.MethodParamName, \"FOR READ\", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.alt)(\"BEHAVIOR\", \"LOCK\"), \"IMPORTING\", expressions_1.MethodParamName, \"FOR LOCK\", expressions_1.TypeName), (0, combi_1.seq)(\"DETERMINE\", (0, combi_1.alt)(\"ON MODIFY\", \"ON SAVE\"), \"IMPORTING\", expressions_1.MethodParamName, \"FOR\", expressions_1.TypeName));\n // todo, this is only from version something\n const amdp = (0, combi_1.seq)(\"AMDP OPTIONS CDS SESSION CLIENT CURRENT\", (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising));\n const ret = (0, combi_1.seq)((0, combi_1.altPrio)(\"CLASS-METHODS\", \"METHODS\"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), expressions_1.EventHandler), parameters, testing, (0, combi_1.seq)(\"FOR\", (0, combi_1.alt)(tableFunction, ddl, behavior)), amdp, \"NOT AT END OF MODE\", (0, combi_1.optPrio)(expressions_1.Redefinition)));\n return ret;\n }\n}\nexports.MethodDef = MethodDef;\n//# sourceMappingURL=method_def.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/2_statements/statements/method_def.js?");
|
|
4672
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.MethodDef = void 0;\nconst version_1 = __webpack_require__(/*! ../../../version */ \"./node_modules/@abaplint/core/build/src/version.js\");\nconst combi_1 = __webpack_require__(/*! ../combi */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/combi.js\");\nconst expressions_1 = __webpack_require__(/*! ../expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nclass MethodDef {\n getMatcher() {\n const def = (0, combi_1.ver)(version_1.Version.v740sp08, (0, combi_1.seq)(\"DEFAULT\", (0, combi_1.altPrio)(\"FAIL\", \"IGNORE\")));\n const parameters = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)(\"FINAL\", def, expressions_1.Abstract)), (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefChanging), (0, combi_1.optPrio)(expressions_1.MethodDefReturning), (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));\n const testing = (0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), \"FOR TESTING\", (0, combi_1.optPrio)((0, combi_1.altPrio)(expressions_1.MethodDefRaising, expressions_1.MethodDefExceptions)));\n // todo, this is only from version something\n const tableFunction = (0, combi_1.seq)(\"TABLE FUNCTION\", (0, combi_1.regex)(/^\\w+?$/));\n // todo, this is only from version something\n const ddl = \"DDL OBJECT OPTIONS CDS SESSION CLIENT REQUIRED\";\n const result = (0, combi_1.seq)(\"RESULT\", expressions_1.MethodParamName);\n const link = (0, combi_1.seq)(\"LINK\", expressions_1.MethodParamName);\n const full = (0, combi_1.seq)(\"FULL\", expressions_1.MethodParamName);\n const modify = (0, combi_1.alt)((0, combi_1.seq)(\"FOR ACTION\", expressions_1.TypeName, (0, combi_1.optPrio)(result)), (0, combi_1.seq)(\"FOR CREATE\", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation)), (0, combi_1.seq)(\"FOR DELETE\", expressions_1.TypeName), (0, combi_1.seq)(\"FOR UPDATE\", expressions_1.TypeName));\n const behavior = (0, combi_1.altPrio)((0, combi_1.seq)(\"VALIDATE ON SAVE IMPORTING\", expressions_1.MethodParamName, \"FOR\", expressions_1.TypeName), (0, combi_1.seq)(\"MODIFY IMPORTING\", expressions_1.MethodParamName, modify), (0, combi_1.seq)(\"READ IMPORTING\", expressions_1.MethodParamName, \"FOR READ\", (0, combi_1.alt)(expressions_1.TypeName, expressions_1.EntityAssociation), (0, combi_1.optPrio)(full), result, (0, combi_1.optPrio)(link)), (0, combi_1.seq)(\"FEATURES IMPORTING\", expressions_1.MethodParamName, \"REQUEST\", expressions_1.NamespaceSimpleName, \"FOR\", expressions_1.NamespaceSimpleName, result), (0, combi_1.seq)(\"BEHAVIOR IMPORTING\", expressions_1.MethodParamName, \"FOR CREATE\", expressions_1.TypeName, expressions_1.MethodParamName, \"FOR UPDATE\", expressions_1.TypeName, expressions_1.MethodParamName, \"FOR DELETE\", expressions_1.TypeName), (0, combi_1.seq)(\"BEHAVIOR IMPORTING\", expressions_1.MethodParamName, \"FOR READ\", expressions_1.TypeName, result), (0, combi_1.seq)((0, combi_1.alt)(\"BEHAVIOR\", \"LOCK\"), \"IMPORTING\", expressions_1.MethodParamName, \"FOR LOCK\", expressions_1.TypeName), (0, combi_1.seq)(\"DETERMINE\", (0, combi_1.alt)(\"ON MODIFY\", \"ON SAVE\"), \"IMPORTING\", expressions_1.MethodParamName, \"FOR\", expressions_1.TypeName), (0, combi_1.seq)(\"GLOBAL AUTHORIZATION IMPORTING REQUEST\", expressions_1.MethodParamName, \"FOR\", expressions_1.TypeName, result));\n // todo, this is only from version something\n const amdp = (0, combi_1.seq)(\"AMDP OPTIONS CDS SESSION CLIENT CURRENT\", (0, combi_1.optPrio)(expressions_1.MethodDefImporting), (0, combi_1.optPrio)(expressions_1.MethodDefExporting), (0, combi_1.optPrio)(expressions_1.MethodDefRaising));\n const ret = (0, combi_1.seq)((0, combi_1.altPrio)(\"CLASS-METHODS\", \"METHODS\"), expressions_1.MethodName, (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.optPrio)(expressions_1.Abstract), expressions_1.EventHandler), parameters, testing, (0, combi_1.seq)(\"FOR\", (0, combi_1.alt)(tableFunction, ddl, behavior)), amdp, \"NOT AT END OF MODE\", (0, combi_1.optPrio)(expressions_1.Redefinition)));\n return ret;\n }\n}\nexports.MethodDef = MethodDef;\n//# sourceMappingURL=method_def.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/2_statements/statements/method_def.js?");
|
|
4673
4673
|
|
|
4674
4674
|
/***/ }),
|
|
4675
4675
|
|
|
@@ -6913,7 +6913,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
6913
6913
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
6914
6914
|
|
|
6915
6915
|
"use strict";
|
|
6916
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CondBody = void 0;\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst source_1 = __webpack_require__(/*! ./source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\nconst let_1 = __webpack_require__(/*! ./let */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/let.js\");\nconst cond_1 = __webpack_require__(/*! ./cond */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond.js\");\nclass CondBody {\n runSyntax(node, scope, filename
|
|
6916
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CondBody = void 0;\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst source_1 = __webpack_require__(/*! ./source */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js\");\nconst let_1 = __webpack_require__(/*! ./let */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/let.js\");\nconst cond_1 = __webpack_require__(/*! ./cond */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond.js\");\nclass CondBody {\n runSyntax(node, scope, filename) {\n if (node === undefined) {\n return undefined;\n }\n let scoped = false;\n const l = node.findDirectExpression(Expressions.Let);\n if (l) {\n scoped = new let_1.Let().runSyntax(l, scope, filename);\n }\n for (const s of node.findDirectExpressions(Expressions.Cond)) {\n new cond_1.Cond().runSyntax(s, scope, filename);\n }\n let type = undefined;\n for (const s of node.findDirectExpressions(Expressions.Source)) {\n if (type === undefined) {\n type = new source_1.Source().runSyntax(s, scope, filename);\n }\n else {\n new source_1.Source().runSyntax(s, scope, filename);\n }\n }\n if (scoped === true) {\n scope.pop(node.getLastToken().getEnd());\n }\n return type;\n }\n}\nexports.CondBody = CondBody;\n//# sourceMappingURL=cond_body.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond_body.js?");
|
|
6917
6917
|
|
|
6918
6918
|
/***/ }),
|
|
6919
6919
|
|
|
@@ -7320,7 +7320,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
7320
7320
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
7321
7321
|
|
|
7322
7322
|
"use strict";
|
|
7323
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Source = void 0;\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst method_call_chain_1 = __webpack_require__(/*! ./method_call_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_chain.js\");\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\nconst field_chain_1 = __webpack_require__(/*! ./field_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/field_chain.js\");\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst constant_1 = __webpack_require__(/*! ./constant */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/constant.js\");\nconst basic_types_1 = __webpack_require__(/*! ../basic_types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js\");\nconst component_chain_1 = __webpack_require__(/*! ./component_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_chain.js\");\nconst string_template_1 = __webpack_require__(/*! ./string_template */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/string_template.js\");\nconst value_body_1 = __webpack_require__(/*! ./value_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/value_body.js\");\nconst cond_1 = __webpack_require__(/*! ./cond */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond.js\");\nconst reduce_body_1 = __webpack_require__(/*! ./reduce_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/reduce_body.js\");\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst switch_body_1 = __webpack_require__(/*! ./switch_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/switch_body.js\");\nconst cond_body_1 = __webpack_require__(/*! ./cond_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond_body.js\");\nconst conv_body_1 = __webpack_require__(/*! ./conv_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/conv_body.js\");\nconst filter_body_1 = __webpack_require__(/*! ./filter_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/filter_body.js\");\nconst corresponding_body_1 = __webpack_require__(/*! ./corresponding_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/corresponding_body.js\");\nconst _builtin_1 = __webpack_require__(/*! ../_builtin */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_builtin.js\");\nconst attribute_chain_1 = __webpack_require__(/*! ./attribute_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/attribute_chain.js\");\nconst dereference_1 = __webpack_require__(/*! ./dereference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dereference.js\");\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\n/*\n* Type interference, valid scenarios:\n* typed = VALUE #( ... ). right hand side must follow left hand type\n* DATA(bar) = VALUE type( ... ). left gets the type of rigthand\n* typed = VALUE type( ... ). types must match and be compatible???\n************* ERRORS *********\n* VALUE #( ... ). syntax error\n* DATA(bar) = VALUE #( ... ). give error, no type can be derived\n*/\nclass Source {\n runSyntax(node, scope, filename, targetType) {\n if (node === undefined) {\n return undefined;\n }\n const children = node.getChildren().slice();\n let first = children.shift();\n if (first instanceof nodes_1.TokenNode) {\n const token = first.getFirstToken();\n const tok = token.getStr().toUpperCase();\n switch (tok) {\n case \"(\":\n case \"-\":\n break;\n case \"BOOLC\":\n {\n const method = new _builtin_1.BuiltIn().searchBuiltin(tok);\n scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);\n new cond_1.Cond().runSyntax(node.findDirectExpression(Expressions.Cond), scope, filename);\n return new basic_1.StringType();\n }\n case \"XSDBOOL\":\n {\n const method = new _builtin_1.BuiltIn().searchBuiltin(tok);\n scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);\n new cond_1.Cond().runSyntax(node.findDirectExpression(Expressions.Cond), scope, filename);\n return new basic_1.CharacterType(1, { qualifiedName: \"ABAP_BOOL\", ddicName: \"ABAP_BOOL\" });\n }\n case \"REDUCE\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new reduce_body_1.ReduceBody().runSyntax(node.findDirectExpression(Expressions.ReduceBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"SWITCH\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new switch_body_1.SwitchBody().runSyntax(node.findDirectExpression(Expressions.SwitchBody), scope, filename);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"COND\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new cond_body_1.CondBody().runSyntax(node.findDirectExpression(Expressions.CondBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"CONV\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n new conv_body_1.ConvBody().runSyntax(node.findDirectExpression(Expressions.ConvBody), scope, filename);\n return foundType;\n }\n case \"REF\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const s = new Source().runSyntax(node.findDirectExpression(Expressions.Source), scope, filename);\n if (foundType === undefined && s) {\n return new basic_1.DataReference(s);\n }\n else {\n return foundType;\n }\n }\n case \"FILTER\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new filter_body_1.FilterBody().runSyntax(node.findDirectExpression(Expressions.FilterBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric()) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n else {\n this.addIfInferred(node, scope, filename, foundType);\n }\n if (foundType && !(foundType instanceof unknown_type_1.UnknownType)) {\n return foundType;\n }\n else {\n return bodyType;\n }\n }\n case \"CORRESPONDING\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n return new corresponding_body_1.CorrespondingBody().runSyntax(node.findDirectExpression(Expressions.CorrespondingBody), scope, filename, foundType);\n }\n case \"EXACT\":\n return this.determineType(node, scope, filename, targetType);\n case \"VALUE\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new value_body_1.ValueBody().runSyntax(node.findDirectExpression(Expressions.ValueBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric()) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n else {\n this.addIfInferred(node, scope, filename, foundType);\n }\n return foundType ? foundType : bodyType;\n }\n default:\n return new unknown_type_1.UnknownType(\"todo, Source type \" + tok);\n }\n }\n else if (first === undefined || !(first instanceof nodes_1.ExpressionNode)) {\n return undefined;\n }\n let context = new unknown_type_1.UnknownType(\"todo, Source type\");\n while (children.length >= 0) {\n if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.MethodCallChain) {\n context = new method_call_chain_1.MethodCallChain().runSyntax(first, scope, filename, targetType);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.FieldChain) {\n context = new field_chain_1.FieldChain().runSyntax(first, scope, filename, _reference_1.ReferenceType.DataReadReference);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.StringTemplate) {\n context = new string_template_1.StringTemplate().runSyntax(first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Source) {\n context = new Source().runSyntax(first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Constant) {\n context = new constant_1.Constant().runSyntax(first);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dereference) {\n context = new dereference_1.Dereference().runSyntax(context);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ArrowOrDash) {\n // console.dir(\"dash\");\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ComponentChain) {\n context = new component_chain_1.ComponentChain().runSyntax(context, first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.AttributeChain) {\n context = new attribute_chain_1.AttributeChain().runSyntax(context, first, scope, filename, _reference_1.ReferenceType.DataReadReference);\n }\n first = children.shift();\n if (first === undefined) {\n break;\n }\n }\n if (node.findDirectTokenByText(\"&&\")) {\n return new basic_1.StringType();\n }\n return context;\n }\n ////////////////////////////////\n addIfInferred(node, scope, filename, inferredType) {\n const basic = new basic_types_1.BasicTypes(filename, scope);\n const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);\n const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();\n const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();\n if (typeName === \"#\" && inferredType && typeToken) {\n const found = basic.lookupQualifiedName(inferredType.getQualifiedName());\n if (found) {\n scope.addReference(typeToken, found, _reference_1.ReferenceType.InferredType, filename);\n }\n else if (inferredType instanceof basic_1.ObjectReferenceType) {\n const def = scope.findObjectDefinition(inferredType.getQualifiedName());\n if (def) {\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, inferredType);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.InferredType, filename);\n }\n }\n else if (inferredType instanceof basic_1.CharacterType) {\n // character is bit special it does not have a qualified name eg \"TYPE c LENGTH 6\"\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, inferredType);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.InferredType, filename);\n }\n }\n }\n determineType(node, scope, filename, targetType) {\n const basic = new basic_types_1.BasicTypes(filename, scope);\n const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);\n const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();\n const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();\n if (typeExpression === undefined) {\n throw new Error(\"determineType, child TypeNameOrInfer not found\");\n }\n else if (typeName === \"#\" && targetType) {\n const found = basic.lookupQualifiedName(targetType.getQualifiedName());\n if (found) {\n scope.addReference(typeToken, found, _reference_1.ReferenceType.InferredType, filename);\n }\n return targetType;\n }\n if (typeName !== \"#\" && typeToken) {\n const found = basic.parseType(typeExpression);\n if (found && found instanceof unknown_type_1.UnknownType) {\n if (scope.getDDIC().inErrorNamespace(typeName) === false) {\n scope.addReference(typeToken, undefined, _reference_1.ReferenceType.VoidType, filename);\n return new basic_1.VoidType(typeName);\n }\n else {\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, found);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.TypeReference, filename);\n return found;\n }\n }\n else if (found === undefined) {\n throw new Error(\"Type \\\"\" + typeName + \"\\\" not found in scope, VALUE\");\n }\n return found;\n }\n return targetType;\n }\n}\nexports.Source = Source;\n//# sourceMappingURL=source.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js?");
|
|
7323
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Source = void 0;\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst method_call_chain_1 = __webpack_require__(/*! ./method_call_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_chain.js\");\nconst unknown_type_1 = __webpack_require__(/*! ../../types/basic/unknown_type */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/unknown_type.js\");\nconst field_chain_1 = __webpack_require__(/*! ./field_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/field_chain.js\");\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\nconst constant_1 = __webpack_require__(/*! ./constant */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/constant.js\");\nconst basic_types_1 = __webpack_require__(/*! ../basic_types */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/basic_types.js\");\nconst component_chain_1 = __webpack_require__(/*! ./component_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/component_chain.js\");\nconst string_template_1 = __webpack_require__(/*! ./string_template */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/string_template.js\");\nconst value_body_1 = __webpack_require__(/*! ./value_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/value_body.js\");\nconst cond_1 = __webpack_require__(/*! ./cond */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond.js\");\nconst reduce_body_1 = __webpack_require__(/*! ./reduce_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/reduce_body.js\");\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\nconst switch_body_1 = __webpack_require__(/*! ./switch_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/switch_body.js\");\nconst cond_body_1 = __webpack_require__(/*! ./cond_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/cond_body.js\");\nconst conv_body_1 = __webpack_require__(/*! ./conv_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/conv_body.js\");\nconst filter_body_1 = __webpack_require__(/*! ./filter_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/filter_body.js\");\nconst corresponding_body_1 = __webpack_require__(/*! ./corresponding_body */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/corresponding_body.js\");\nconst _builtin_1 = __webpack_require__(/*! ../_builtin */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_builtin.js\");\nconst attribute_chain_1 = __webpack_require__(/*! ./attribute_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/attribute_chain.js\");\nconst dereference_1 = __webpack_require__(/*! ./dereference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dereference.js\");\nconst _typed_identifier_1 = __webpack_require__(/*! ../../types/_typed_identifier */ \"./node_modules/@abaplint/core/build/src/abap/types/_typed_identifier.js\");\n/*\n* Type interference, valid scenarios:\n* typed = VALUE #( ... ). right hand side must follow left hand type\n* DATA(bar) = VALUE type( ... ). left gets the type of rigthand\n* typed = VALUE type( ... ). types must match and be compatible???\n************* ERRORS *********\n* VALUE #( ... ). syntax error\n* DATA(bar) = VALUE #( ... ). give error, no type can be derived\n*/\nclass Source {\n runSyntax(node, scope, filename, targetType) {\n if (node === undefined) {\n return undefined;\n }\n const children = node.getChildren().slice();\n let first = children.shift();\n if (first instanceof nodes_1.TokenNode) {\n const token = first.getFirstToken();\n const tok = token.getStr().toUpperCase();\n switch (tok) {\n case \"(\":\n case \"-\":\n break;\n case \"BOOLC\":\n {\n const method = new _builtin_1.BuiltIn().searchBuiltin(tok);\n scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);\n new cond_1.Cond().runSyntax(node.findDirectExpression(Expressions.Cond), scope, filename);\n return new basic_1.StringType();\n }\n case \"XSDBOOL\":\n {\n const method = new _builtin_1.BuiltIn().searchBuiltin(tok);\n scope.addReference(token, method, _reference_1.ReferenceType.BuiltinMethodReference, filename);\n new cond_1.Cond().runSyntax(node.findDirectExpression(Expressions.Cond), scope, filename);\n return new basic_1.CharacterType(1, { qualifiedName: \"ABAP_BOOL\", ddicName: \"ABAP_BOOL\" });\n }\n case \"REDUCE\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new reduce_body_1.ReduceBody().runSyntax(node.findDirectExpression(Expressions.ReduceBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"SWITCH\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new switch_body_1.SwitchBody().runSyntax(node.findDirectExpression(Expressions.SwitchBody), scope, filename);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"COND\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new cond_body_1.CondBody().runSyntax(node.findDirectExpression(Expressions.CondBody), scope, filename);\n if (foundType === undefined || foundType.isGeneric() === true) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n return foundType ? foundType : bodyType;\n }\n case \"CONV\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n new conv_body_1.ConvBody().runSyntax(node.findDirectExpression(Expressions.ConvBody), scope, filename);\n return foundType;\n }\n case \"REF\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const s = new Source().runSyntax(node.findDirectExpression(Expressions.Source), scope, filename);\n if (foundType === undefined && s) {\n return new basic_1.DataReference(s);\n }\n else {\n return foundType;\n }\n }\n case \"FILTER\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new filter_body_1.FilterBody().runSyntax(node.findDirectExpression(Expressions.FilterBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric()) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n else {\n this.addIfInferred(node, scope, filename, foundType);\n }\n if (foundType && !(foundType instanceof unknown_type_1.UnknownType)) {\n return foundType;\n }\n else {\n return bodyType;\n }\n }\n case \"CORRESPONDING\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n return new corresponding_body_1.CorrespondingBody().runSyntax(node.findDirectExpression(Expressions.CorrespondingBody), scope, filename, foundType);\n }\n case \"EXACT\":\n return this.determineType(node, scope, filename, targetType);\n case \"VALUE\":\n {\n const foundType = this.determineType(node, scope, filename, targetType);\n const bodyType = new value_body_1.ValueBody().runSyntax(node.findDirectExpression(Expressions.ValueBody), scope, filename, foundType);\n if (foundType === undefined || foundType.isGeneric()) {\n this.addIfInferred(node, scope, filename, bodyType);\n }\n else {\n this.addIfInferred(node, scope, filename, foundType);\n }\n return foundType ? foundType : bodyType;\n }\n default:\n return new unknown_type_1.UnknownType(\"todo, Source type \" + tok);\n }\n }\n else if (first === undefined || !(first instanceof nodes_1.ExpressionNode)) {\n return undefined;\n }\n let context = new unknown_type_1.UnknownType(\"todo, Source type\");\n while (children.length >= 0) {\n if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.MethodCallChain) {\n context = new method_call_chain_1.MethodCallChain().runSyntax(first, scope, filename, targetType);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.FieldChain) {\n context = new field_chain_1.FieldChain().runSyntax(first, scope, filename, _reference_1.ReferenceType.DataReadReference);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.StringTemplate) {\n context = new string_template_1.StringTemplate().runSyntax(first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Source) {\n context = new Source().runSyntax(first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Constant) {\n context = new constant_1.Constant().runSyntax(first);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dereference) {\n context = new dereference_1.Dereference().runSyntax(context);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ArrowOrDash) {\n // console.dir(\"dash\");\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.ComponentChain) {\n context = new component_chain_1.ComponentChain().runSyntax(context, first, scope, filename);\n }\n else if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.AttributeChain) {\n context = new attribute_chain_1.AttributeChain().runSyntax(context, first, scope, filename, _reference_1.ReferenceType.DataReadReference);\n }\n first = children.shift();\n if (first === undefined) {\n break;\n }\n }\n if (node.findDirectTokenByText(\"&&\")) {\n return new basic_1.StringType();\n }\n return context;\n }\n ////////////////////////////////\n addIfInferred(node, scope, filename, inferredType) {\n const basic = new basic_types_1.BasicTypes(filename, scope);\n const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);\n const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();\n const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();\n if (typeName === \"#\" && inferredType && typeToken) {\n const found = basic.lookupQualifiedName(inferredType.getQualifiedName());\n if (found) {\n scope.addReference(typeToken, found, _reference_1.ReferenceType.InferredType, filename);\n }\n else if (inferredType instanceof basic_1.ObjectReferenceType) {\n const def = scope.findObjectDefinition(inferredType.getQualifiedName());\n if (def) {\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, inferredType);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.InferredType, filename);\n }\n }\n else if (inferredType instanceof basic_1.CharacterType) {\n // character is bit special it does not have a qualified name eg \"TYPE c LENGTH 6\"\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, inferredType);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.InferredType, filename);\n }\n }\n }\n determineType(node, scope, filename, targetType) {\n const basic = new basic_types_1.BasicTypes(filename, scope);\n const typeExpression = node.findFirstExpression(Expressions.TypeNameOrInfer);\n const typeToken = typeExpression === null || typeExpression === void 0 ? void 0 : typeExpression.getFirstToken();\n const typeName = typeToken === null || typeToken === void 0 ? void 0 : typeToken.getStr();\n if (typeExpression === undefined) {\n throw new Error(\"determineType, child TypeNameOrInfer not found\");\n }\n else if (typeName === \"#\" && targetType) {\n const found = basic.lookupQualifiedName(targetType.getQualifiedName());\n if (found) {\n scope.addReference(typeToken, found, _reference_1.ReferenceType.InferredType, filename);\n }\n return targetType;\n }\n if (typeName !== \"#\" && typeToken) {\n const found = basic.parseType(typeExpression);\n if (found && found instanceof unknown_type_1.UnknownType) {\n if (scope.getDDIC().inErrorNamespace(typeName) === false) {\n scope.addReference(typeToken, undefined, _reference_1.ReferenceType.VoidType, filename);\n return new basic_1.VoidType(typeName);\n }\n else {\n const tid = new _typed_identifier_1.TypedIdentifier(typeToken, filename, found);\n scope.addReference(typeToken, tid, _reference_1.ReferenceType.TypeReference, filename);\n return found;\n }\n }\n else if (found === undefined) {\n throw new Error(\"Type \\\"\" + typeName + \"\\\" not found in scope, VALUE\");\n }\n return found;\n }\n return targetType;\n }\n}\nexports.Source = Source;\n//# sourceMappingURL=source.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/source.js?");
|
|
7324
7324
|
|
|
7325
7325
|
/***/ }),
|
|
7326
7326
|
|
|
@@ -11841,7 +11841,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
11841
11841
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
11842
11842
|
|
|
11843
11843
|
"use strict";
|
|
11844
|
-
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.95.48\";\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?");
|
|
11844
|
+
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.95.50\";\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?");
|
|
11845
11845
|
|
|
11846
11846
|
/***/ }),
|
|
11847
11847
|
|
|
@@ -11907,7 +11907,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
11907
11907
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
11908
11908
|
|
|
11909
11909
|
"use strict";
|
|
11910
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Abapdoc = exports.AbapdocConf = void 0;\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\nconst visibility_1 = __webpack_require__(/*! ../abap/4_file_information/visibility */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js\");\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\nclass AbapdocConf extends _basic_rule_config_1.BasicRuleConfig {\n constructor() {\n super(...arguments);\n /** Check local classes and interfaces for abapdoc. */\n this.checkLocal = false;\n this.classDefinition = false;\n this.interfaceDefinition = false;\n }\n}\nexports.AbapdocConf = AbapdocConf;\nclass Abapdoc extends _abap_rule_1.ABAPRule {\n constructor() {\n super(...arguments);\n this.conf = new AbapdocConf();\n }\n getMetadata() {\n return {\n key: \"abapdoc\",\n title: \"Check abapdoc\",\n shortDescription: `Various checks regarding abapdoc.`,\n extendedInformation: `Base rule checks for existence of abapdoc for public class methods and all interface methods.\r\n\r\nPlus class and interface definitions.\r\n\r\nhttps://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#abap-doc-only-for-public-apis`,\n tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Styleguide],\n };\n }\n getConfig() {\n return this.conf;\n }\n setConfig(conf) {\n this.conf = conf;\n }\n runParsed(file) {\n var _a, _b;\n const issues = [];\n const rows = file.getRawRows();\n let methods = [];\n for (const classDef of file.getInfo().listClassDefinitions()) {\n if (this.conf.checkLocal === false && classDef.isLocal === true) {\n continue;\n }\n methods = methods.concat(classDef.methods.filter(m => m.visibility === visibility_1.Visibility.Public));\n if (this.getConfig().classDefinition === true) {\n const previousRow = classDef.identifier.getStart().getRow() - 2;\n if (((_a = rows[previousRow]) === null || _a === void 0 ? void 0 : _a.trim().substring(0, 2)) !== \"\\\"!\") {\n const message = \"Missing ABAP Doc for class \" + classDef.identifier.getToken().getStr();\n const issue = issue_1.Issue.atIdentifier(classDef.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n }\n }\n for (const interfaceDef of file.getInfo().listInterfaceDefinitions()) {\n if (this.conf.checkLocal === false && interfaceDef.isLocal === true) {\n continue;\n }\n methods = methods.concat(interfaceDef.methods);\n if (this.getConfig().interfaceDefinition === true) {\n const previousRow = interfaceDef.identifier.getStart().getRow() - 2;\n if (((_b = rows[previousRow]) === null || _b === void 0 ? void 0 : _b.trim().substring(0, 2)) !== \"\\\"!\") {\n const message = \"Missing ABAP Doc for interface \" + interfaceDef.identifier.getToken().getStr();\n const issue = issue_1.Issue.atIdentifier(interfaceDef.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n }\n }\n for (const method of methods) {\n if (method.isRedefinition === true) {\n continue;\n }\n const
|
|
11910
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.Abapdoc = exports.AbapdocConf = void 0;\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\nconst visibility_1 = __webpack_require__(/*! ../abap/4_file_information/visibility */ \"./node_modules/@abaplint/core/build/src/abap/4_file_information/visibility.js\");\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\nclass AbapdocConf extends _basic_rule_config_1.BasicRuleConfig {\n constructor() {\n super(...arguments);\n /** Check local classes and interfaces for abapdoc. */\n this.checkLocal = false;\n this.classDefinition = false;\n this.interfaceDefinition = false;\n }\n}\nexports.AbapdocConf = AbapdocConf;\nclass Abapdoc extends _abap_rule_1.ABAPRule {\n constructor() {\n super(...arguments);\n this.conf = new AbapdocConf();\n }\n getMetadata() {\n return {\n key: \"abapdoc\",\n title: \"Check abapdoc\",\n shortDescription: `Various checks regarding abapdoc.`,\n extendedInformation: `Base rule checks for existence of abapdoc for public class methods and all interface methods.\r\n\r\nPlus class and interface definitions.\r\n\r\nhttps://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#abap-doc-only-for-public-apis`,\n tags: [_irule_1.RuleTag.SingleFile, _irule_1.RuleTag.Styleguide],\n };\n }\n getConfig() {\n return this.conf;\n }\n setConfig(conf) {\n this.conf = conf;\n }\n runParsed(file) {\n var _a, _b;\n const issues = [];\n const rows = file.getRawRows();\n const regexEmptyTags = '^\\\\\"! .*<[^>]*><';\n const regexEmptyAbapdoc = '^\\\\\"!.+$';\n const regexEmptyParameterName = '^\\\\\"! @parameter .+\\\\|';\n let methods = [];\n for (const classDef of file.getInfo().listClassDefinitions()) {\n if (this.conf.checkLocal === false && classDef.isLocal === true) {\n continue;\n }\n methods = methods.concat(classDef.methods.filter(m => m.visibility === visibility_1.Visibility.Public));\n if (this.getConfig().classDefinition === true) {\n const previousRow = classDef.identifier.getStart().getRow() - 2;\n if (((_a = rows[previousRow]) === null || _a === void 0 ? void 0 : _a.trim().substring(0, 2)) !== \"\\\"!\") {\n const message = \"Missing ABAP Doc for class \" + classDef.identifier.getToken().getStr();\n const issue = issue_1.Issue.atIdentifier(classDef.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n }\n }\n for (const interfaceDef of file.getInfo().listInterfaceDefinitions()) {\n if (this.conf.checkLocal === false && interfaceDef.isLocal === true) {\n continue;\n }\n methods = methods.concat(interfaceDef.methods);\n if (this.getConfig().interfaceDefinition === true) {\n const previousRow = interfaceDef.identifier.getStart().getRow() - 2;\n if (((_b = rows[previousRow]) === null || _b === void 0 ? void 0 : _b.trim().substring(0, 2)) !== \"\\\"!\") {\n const message = \"Missing ABAP Doc for interface \" + interfaceDef.identifier.getToken().getStr();\n const issue = issue_1.Issue.atIdentifier(interfaceDef.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n }\n }\n for (const method of methods) {\n if (method.isRedefinition === true) {\n continue;\n }\n const previousRowsTexts = this.getAbapdoc(rows, method.identifier.getStart());\n if (previousRowsTexts === undefined) {\n continue;\n }\n for (const rowText of previousRowsTexts) {\n if (rowText.trim().match(regexEmptyTags) !== null) {\n const message = \"Empty tag(s) in ABAP Doc for method \" + method.identifier.getToken().getStr() + \" (\" + rowText + \")\";\n const issue = issue_1.Issue.atIdentifier(method.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n if (rowText.trim().match(regexEmptyAbapdoc) === null && previousRowsTexts.indexOf(rowText) === previousRowsTexts.length - 1) {\n const message = \"Missing ABAP Doc for method \" + method.identifier.getToken().getStr() + \" (\" + rowText + \")\";\n const issue = issue_1.Issue.atIdentifier(method.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n if (rowText.trim().match(regexEmptyParameterName) !== null) {\n const message = \"Missing ABAP Doc parameter name for method \" + method.identifier.getToken().getStr() + \" (\" + rowText + \")\";\n const issue = issue_1.Issue.atIdentifier(method.identifier, message, this.getMetadata().key, this.conf.severity);\n issues.push(issue);\n }\n }\n }\n return issues;\n }\n getAbapdoc(rows, pos) {\n let previousRow = pos.getRow() - 2;\n let rowText = rows[previousRow].trim().toUpperCase();\n const text = [];\n if (rowText === \"METHODS\" || rowText === \"CLASS-METHODS\") {\n previousRow--;\n rowText = rows[previousRow].trim().toUpperCase();\n }\n text.push(rowText);\n //we need to push the first row despite if it is actually an abapdoc or not\n //if the first row above a method is abapdoc then try to get the rest of the abapdoc block above\n if (rowText.trim().substring(0, 2) === \"\\\"!\") {\n while (previousRow >= 0) {\n previousRow--;\n rowText = rows[previousRow].trim().toUpperCase();\n if (rowText.trim().substring(0, 2) !== \"\\\"!\") {\n break;\n }\n text.push(rowText);\n }\n }\n return text;\n }\n}\nexports.Abapdoc = Abapdoc;\n//# sourceMappingURL=abapdoc.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/abapdoc.js?");
|
|
11911
11911
|
|
|
11912
11912
|
/***/ }),
|
|
11913
11913
|
|
|
@@ -12446,7 +12446,7 @@ eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexpo
|
|
|
12446
12446
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
12447
12447
|
|
|
12448
12448
|
"use strict";
|
|
12449
|
-
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.FunctionModuleRecommendations = exports.FunctionModuleRecommendationsConf = void 0;\nconst __1 = __webpack_require__(/*! .. */ \"./node_modules/@abaplint/core/build/src/index.js\");\nconst expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\nclass FunctionModuleRecommendationsConf extends _basic_rule_config_1.BasicRuleConfig {\n constructor() {\n super(...arguments);\n /** Tuple of Function Module Name to be replaced, the recommended alternative and\n * the version from which the recommendation is valid.*/\n this.recommendations = [\n { name: \"CALCULATE_HASH_FOR_RAW\", replace: \"use CL_ABAP_HMAC\" },\n { name: \"ECATT_CONV_XSTRING_TO_STRING\", replace: \"use CL_BINARY_CONVERT\" },\n { name: \"F4_FILENAME\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"FUNCTION_EXISTS\", replace: \"surround with try-catch CX_SY_DYN_CALL_ILLEGAL_METHOD instead\" },\n { name: \"GUI_DOWNLOAD\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"GUI_UPLOAD\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"GUID_CREATE\", replace: \"use CL_SYSTEM_UUID\" },\n { name: \"IGN_TIMESTAMP_DIFFERENCE\", replace: \"use CL_ABAP_TSTMP\" },\n { name: \"IGN_TIMESTAMP_PLUSMINUS\", replace: \"use CL_ABAP_TSTMP\" },\n { name: \"JOB_CREATE\", replace: \"use CL_BP_ABAP_JOB\" },\n { name: \"JOB_SUBMIT\", replace: \"use CL_BP_ABAP_JOB\" },\n { name: \"POPUP_TO_DECIDE\", replace: \"use POPUP_TO_CONFIRM\" },\n { name: \"POPUP_TO_GET_VALUE\", replace: \"use POPUP_GET_VALUES\" },\n { name: \"REUSE_ALV_GRID_DISPLAY\", replace: \"use CL_SALV_TABLE=>FACTORY or CL_GUI_ALV_GRID\" },\n { name: \"ROUND\", replace: \"use built in function: round()\" },\n { name: \"SAPGUI_PROGRESS_INDICATOR\", replace: \"use CL_PROGRESS_INDICATOR\" },\n { name: \"SCMS_BASE64_DECODE_STR\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SCMS_STRING_TO_XSTRING\", replace: \"use CL_BINARY_CONVERT\" },\n { name: \"SO_NEW_DOCUMENT_ATT_SEND_API1\", replace: \"use CL_BCS\" },\n { name: \"SSFC_BASE64_DECODE\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SSFC_BASE64_ENCODE\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SUBST_GET_FILE_LIST\", replace: \"see note 1686357\" },\n { name: \"WS_FILENAME_GET\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n ];\n }\n}\nexports.FunctionModuleRecommendationsConf = FunctionModuleRecommendationsConf;\nclass FunctionModuleRecommendations extends _abap_rule_1.ABAPRule {\n constructor() {\n super(...arguments);\n this.conf = new FunctionModuleRecommendationsConf();\n }\n getMetadata() {\n return {\n key: \"function_module_recommendations\",\n title: \"Function Module Recommendations\",\n shortDescription: `Suggests replacements for various function modules`,\n extendedInformation: `https://docs.abapopenchecks.org/checks/53/`,\n tags: [_irule_1.RuleTag.SingleFile],\n };\n }\n getConfig() {\n return this.conf;\n }\n setConfig(conf) {\n this.conf = conf;\n }\n runParsed(file) {\n var _a;\n const issues = [];\n if (!this.conf.recommendations) {\n return issues;\n }\n const configVersion = this.reg.getConfig().getVersion();\n for (const exNode of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressions(expressions_1.FunctionName)) || []) {\n const token = exNode.getFirstToken();\n let funcName = token.getStr().toUpperCase();\n // only check constant FM names\n if (!funcName.startsWith(\"'\")) {\n continue;\n }\n // remove leading and trailing single quote\n funcName = funcName.slice(1, funcName.length - 1);\n const index = this.conf.recommendations.findIndex(i => i.name.toUpperCase() === funcName && (i.from === undefined || configVersion >= i.from));\n if (index >= 0) {\n issues.push(__1.Issue.atToken(file, token, this.getMessage(index), this.getMetadata().key, this.conf.severity));\n }\n }\n return issues;\n }\n getMessage(index) {\n return `Recommendation: Replace Function ${this.conf.recommendations[index].name} with: ${this.conf.recommendations[index].replace}`;\n }\n}\nexports.FunctionModuleRecommendations = FunctionModuleRecommendations;\n//# sourceMappingURL=function_module_recommendations.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/function_module_recommendations.js?");
|
|
12449
|
+
eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.FunctionModuleRecommendations = exports.FunctionModuleRecommendationsConf = void 0;\nconst __1 = __webpack_require__(/*! .. */ \"./node_modules/@abaplint/core/build/src/index.js\");\nconst expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\nclass FunctionModuleRecommendationsConf extends _basic_rule_config_1.BasicRuleConfig {\n constructor() {\n super(...arguments);\n /** Tuple of Function Module Name to be replaced, the recommended alternative and\n * the version from which the recommendation is valid.*/\n this.recommendations = [\n { name: \"CALCULATE_HASH_FOR_RAW\", replace: \"use CL_ABAP_HMAC\" },\n { name: \"ECATT_CONV_XSTRING_TO_STRING\", replace: \"use CL_BINARY_CONVERT\" },\n { name: \"F4_FILENAME\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"FUNCTION_EXISTS\", replace: \"surround with try-catch CX_SY_DYN_CALL_ILLEGAL_METHOD instead\" },\n { name: \"GUI_DOWNLOAD\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"GUI_UPLOAD\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n { name: \"GUID_CREATE\", replace: \"use CL_SYSTEM_UUID\" },\n { name: \"IGN_TIMESTAMP_DIFFERENCE\", replace: \"use CL_ABAP_TSTMP\" },\n { name: \"IGN_TIMESTAMP_PLUSMINUS\", replace: \"use CL_ABAP_TSTMP\" },\n { name: \"JOB_CREATE\", replace: \"use CL_BP_ABAP_JOB\" },\n { name: \"JOB_SUBMIT\", replace: \"use CL_BP_ABAP_JOB\" },\n { name: \"POPUP_TO_DECIDE\", replace: \"use POPUP_TO_CONFIRM\" },\n { name: \"POPUP_TO_CONFIRM_STEP\", replace: \"use POPUP_TO_CONFIRM\" },\n { name: \"POPUP_TO_GET_VALUE\", replace: \"use POPUP_GET_VALUES\" },\n { name: \"REUSE_ALV_GRID_DISPLAY\", replace: \"use CL_SALV_TABLE=>FACTORY or CL_GUI_ALV_GRID\" },\n { name: \"ROUND\", replace: \"use built in function: round()\" },\n { name: \"SAPGUI_PROGRESS_INDICATOR\", replace: \"use CL_PROGRESS_INDICATOR\" },\n { name: \"SCMS_BASE64_DECODE_STR\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SCMS_STRING_TO_XSTRING\", replace: \"use CL_BINARY_CONVERT\" },\n { name: \"SO_NEW_DOCUMENT_ATT_SEND_API1\", replace: \"use CL_BCS\" },\n { name: \"SSFC_BASE64_DECODE\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SSFC_BASE64_ENCODE\", replace: \"use class CL_HTTP_UTILITY methods\" },\n { name: \"SUBST_GET_FILE_LIST\", replace: \"see note 1686357\" },\n { name: \"WS_FILENAME_GET\", replace: \"use CL_GUI_FRONTEND_SERVICES\" },\n ];\n }\n}\nexports.FunctionModuleRecommendationsConf = FunctionModuleRecommendationsConf;\nclass FunctionModuleRecommendations extends _abap_rule_1.ABAPRule {\n constructor() {\n super(...arguments);\n this.conf = new FunctionModuleRecommendationsConf();\n }\n getMetadata() {\n return {\n key: \"function_module_recommendations\",\n title: \"Function Module Recommendations\",\n shortDescription: `Suggests replacements for various function modules`,\n extendedInformation: `https://docs.abapopenchecks.org/checks/53/`,\n tags: [_irule_1.RuleTag.SingleFile],\n };\n }\n getConfig() {\n return this.conf;\n }\n setConfig(conf) {\n this.conf = conf;\n }\n runParsed(file) {\n var _a;\n const issues = [];\n if (!this.conf.recommendations) {\n return issues;\n }\n const configVersion = this.reg.getConfig().getVersion();\n for (const exNode of ((_a = file.getStructure()) === null || _a === void 0 ? void 0 : _a.findAllExpressions(expressions_1.FunctionName)) || []) {\n const token = exNode.getFirstToken();\n let funcName = token.getStr().toUpperCase();\n // only check constant FM names\n if (!funcName.startsWith(\"'\")) {\n continue;\n }\n // remove leading and trailing single quote\n funcName = funcName.slice(1, funcName.length - 1);\n const index = this.conf.recommendations.findIndex(i => i.name.toUpperCase() === funcName && (i.from === undefined || configVersion >= i.from));\n if (index >= 0) {\n issues.push(__1.Issue.atToken(file, token, this.getMessage(index), this.getMetadata().key, this.conf.severity));\n }\n }\n return issues;\n }\n getMessage(index) {\n return `Recommendation: Replace Function ${this.conf.recommendations[index].name} with: ${this.conf.recommendations[index].replace}`;\n }\n}\nexports.FunctionModuleRecommendations = FunctionModuleRecommendations;\n//# sourceMappingURL=function_module_recommendations.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/function_module_recommendations.js?");
|
|
12450
12450
|
|
|
12451
12451
|
/***/ }),
|
|
12452
12452
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/cli",
|
|
3
|
-
"version": "2.95.
|
|
3
|
+
"version": "2.95.50",
|
|
4
4
|
"description": "abaplint - Command Line Interface",
|
|
5
5
|
"bin": {
|
|
6
6
|
"abaplint": "./abaplint"
|
|
@@ -37,12 +37,12 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://abaplint.org",
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@abaplint/core": "^2.95.
|
|
40
|
+
"@abaplint/core": "^2.95.50",
|
|
41
41
|
"@types/chai": "^4.3.4",
|
|
42
42
|
"@types/glob": "^7.2.0",
|
|
43
43
|
"@types/minimist": "^1.2.2",
|
|
44
44
|
"@types/mocha": "^10.0.1",
|
|
45
|
-
"@types/node": "^18.15.
|
|
45
|
+
"@types/node": "^18.15.7",
|
|
46
46
|
"@types/progress": "^2.0.5",
|
|
47
47
|
"chai": "^4.3.7",
|
|
48
48
|
"chalk": "^5.2.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"mocha": "^10.2.0",
|
|
55
55
|
"progress": "^2.0.3",
|
|
56
56
|
"typescript": "^5.0.2",
|
|
57
|
-
"webpack": "^5.76.
|
|
57
|
+
"webpack": "^5.76.3",
|
|
58
58
|
"webpack-cli": "^5.0.1",
|
|
59
59
|
"xml-js": "^1.6.11"
|
|
60
60
|
},
|