@abaplint/cli 2.93.40 → 2.93.42
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 +6 -6
package/build/cli.js
CHANGED
|
@@ -60,7 +60,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
|
|
|
60
60
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
61
61
|
|
|
62
62
|
"use strict";
|
|
63
|
-
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ApplyFixes = void 0;\r\nconst core_1 = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nclass ApplyFixes {\r\n constructor() {\r\n this.changedFiles = new Set();\r\n }\r\n // Strategy:\r\n // Execute one rule at a time and apply fixes for that rule\r\n // Some rules are quite expensive to initialize(like downport),\r\n // so running all rules every time is expensive.\r\n async applyFixes(reg, fs, quiet) {\r\n let iteration = 0;\r\n this.changedFiles.clear();\r\n const MAX_ITERATIONS = 50000;\r\n const objects = new core_1.RulesRunner(reg).objectsToCheck(reg.getObjects());\r\n const rules = reg.getConfig().getEnabledRules();\r\n while (iteration <= MAX_ITERATIONS) {\r\n let changed = 0;\r\n for (const rule of rules) {\r\n while (iteration <= MAX_ITERATIONS) {\r\n const before = Date.now();\r\n rule.initialize(reg);\r\n let issues = [];\r\n for (const obj of objects) {\r\n issues.push(...rule.run(obj));\r\n }\r\n issues = new core_1.RulesRunner(reg).excludeIssues(issues);\r\n iteration++;\r\n const appliedCount = this.applyList(issues, reg).length;\r\n const runtime = Date.now() - before;\r\n if (quiet !== true) {\r\n process.stderr.write(`\\tIteration ${iteration.toString().padStart(3, \" \")}, ${appliedCount.toString().padStart(3, \" \")} fixes applied, ${runtime.toString().padStart(4, \" \")}ms, rule ${rule.getMetadata().key}\\n`);\r\n }\r\n if (appliedCount > 0) {\r\n changed += appliedCount;\r\n const before = Date.now();\r\n reg.parse();\r\n const runtime = Date.now() - before;\r\n if (quiet !== true) {\r\n process.stderr.write(`\\tParse, ${runtime}ms\\n`);\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (changed === 0) {\r\n break;\r\n }\r\n }\r\n this.writeChangesToFS(fs, reg);\r\n }\r\n ///////////////////////////////////////////////////\r\n writeChangesToFS(fs, reg) {\r\n for (const filename of this.changedFiles.values()) {\r\n const file = reg.getFileByName(filename);\r\n if (file === undefined) {\r\n continue;\r\n }\r\n fs.writeFileSync(file.getFilename(), file.getRaw());\r\n }\r\n }\r\n possibleOverlap(edit, list) {\r\n // only checks if the edits have changes in the same rows\r\n for (const e of list) {\r\n for (const file1 of Object.keys(e)) {\r\n for (const file2 of Object.keys(edit)) {\r\n if (file1 === file2) {\r\n for (const list1 of e[file1]) {\r\n for (const list2 of edit[file2]) {\r\n if (list2.range.start.getRow() <= list1.range.start.getRow()\r\n && list2.range.end.getRow() >= list1.range.start.getRow()) {\r\n return true;\r\n }\r\n if (list2.range.start.getRow() <= list1.range.start.getRow()\r\n && list2.range.end.getRow() >= list1.range.end.getRow()) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n applyList(issues, reg) {\r\n const edits = [];\r\n for (const i of issues) {\r\n const edit = i.getFix();\r\n if (edit === undefined) {\r\n continue;\r\n }\r\n else if (this.possibleOverlap(edit, edits) === true) {\r\n continue;\r\n }\r\n edits.push(edit);\r\n }\r\n const changed = (0, core_1.applyEditList)(reg, edits);\r\n for (const filename of changed) {\r\n this.changedFiles.add(filename);\r\n }\r\n return changed;\r\n }\r\n}\r\nexports.ApplyFixes = ApplyFixes;\r\n//# sourceMappingURL=fixes.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./build/src/fixes.js?");
|
|
63
|
+
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.ApplyFixes = void 0;\r\nconst core_1 = __webpack_require__(/*! @abaplint/core */ \"./node_modules/@abaplint/core/build/src/index.js\");\r\nclass ApplyFixes {\r\n constructor() {\r\n this.changedFiles = new Set();\r\n }\r\n // Strategy:\r\n // Execute one rule at a time and apply fixes for that rule\r\n // Some rules are quite expensive to initialize(like downport),\r\n // so running all rules every time is expensive.\r\n async applyFixes(reg, fs, quiet) {\r\n let iteration = 0;\r\n this.changedFiles.clear();\r\n const MAX_ITERATIONS = 50000;\r\n const objects = new core_1.RulesRunner(reg).objectsToCheck(reg.getObjects());\r\n const rules = reg.getConfig().getEnabledRules();\r\n while (iteration <= MAX_ITERATIONS) {\r\n let changed = 0;\r\n for (const rule of rules) {\r\n while (iteration <= MAX_ITERATIONS) {\r\n const before = Date.now();\r\n rule.initialize(reg);\r\n let issues = [];\r\n for (const obj of objects) {\r\n issues.push(...rule.run(obj));\r\n }\r\n issues = new core_1.RulesRunner(reg).excludeIssues(issues);\r\n iteration++;\r\n const appliedCount = this.applyList(issues, reg).length;\r\n const runtime = Date.now() - before;\r\n if (quiet !== true) {\r\n process.stderr.write(`\\tIteration ${iteration.toString().padStart(3, \" \")}, ${appliedCount.toString().padStart(3, \" \")} fixes applied, ${runtime.toString().padStart(4, \" \")}ms, rule ${rule.getMetadata().key}\\n`);\r\n }\r\n if (appliedCount > 0) {\r\n changed += appliedCount;\r\n const before = Date.now();\r\n reg.parse();\r\n const runtime = Date.now() - before;\r\n if (quiet !== true) {\r\n process.stderr.write(`\\tParse, ${runtime}ms\\n`);\r\n }\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n if (changed === 0) {\r\n break;\r\n }\r\n }\r\n this.writeChangesToFS(fs, reg);\r\n this.clearSyntaxCache(reg);\r\n }\r\n ///////////////////////////////////////////////////\r\n clearSyntaxCache(reg) {\r\n for (const obj of reg.getObjects()) {\r\n if (obj instanceof core_1.ABAPObject) {\r\n obj.setDirty();\r\n }\r\n }\r\n }\r\n writeChangesToFS(fs, reg) {\r\n for (const filename of this.changedFiles.values()) {\r\n const file = reg.getFileByName(filename);\r\n if (file === undefined) {\r\n continue;\r\n }\r\n fs.writeFileSync(file.getFilename(), file.getRaw());\r\n }\r\n }\r\n possibleOverlap(edit, list) {\r\n // only checks if the edits have changes in the same rows\r\n for (const e of list) {\r\n for (const file1 of Object.keys(e)) {\r\n for (const file2 of Object.keys(edit)) {\r\n if (file1 === file2) {\r\n for (const list1 of e[file1]) {\r\n for (const list2 of edit[file2]) {\r\n if (list2.range.start.getRow() <= list1.range.start.getRow()\r\n && list2.range.end.getRow() >= list1.range.start.getRow()) {\r\n return true;\r\n }\r\n if (list2.range.start.getRow() <= list1.range.start.getRow()\r\n && list2.range.end.getRow() >= list1.range.end.getRow()) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n applyList(issues, reg) {\r\n const edits = [];\r\n for (const i of issues) {\r\n const edit = i.getFix();\r\n if (edit === undefined) {\r\n continue;\r\n }\r\n else if (this.possibleOverlap(edit, edits) === true) {\r\n continue;\r\n }\r\n edits.push(edit);\r\n }\r\n const changed = (0, core_1.applyEditList)(reg, edits);\r\n for (const filename of changed) {\r\n this.changedFiles.add(filename);\r\n }\r\n return changed;\r\n }\r\n}\r\nexports.ApplyFixes = ApplyFixes;\r\n//# sourceMappingURL=fixes.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./build/src/fixes.js?");
|
|
64
64
|
|
|
65
65
|
/***/ }),
|
|
66
66
|
|
|
@@ -7133,7 +7133,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
|
|
|
7133
7133
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
7134
7134
|
|
|
7135
7135
|
"use strict";
|
|
7136
|
-
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.MethodSource = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst dynamic_1 = __webpack_require__(/*! ./dynamic */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js\");\r\nconst method_call_chain_1 = __webpack_require__(/*! ./method_call_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_chain.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst types_1 = __webpack_require__(/*! ../../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\r\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\r\nconst _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_object_oriented.js\");\r\nclass MethodSource {\r\n runSyntax(node, scope, filename) {\r\n // todo, rewrite the context finding, and/or restructure the expression?\r\n const context = new method_call_chain_1.MethodCallChain().runSyntax(node, scope, filename);\r\n const last = node.getLastChild();\r\n const first = node.getFirstChild();\r\n if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dynamic) {\r\n new dynamic_1.Dynamic().runSyntax(first, scope, filename);\r\n }\r\n else if (last instanceof nodes_1.ExpressionNode && last.get() instanceof Expressions.MethodName) {\r\n if (context instanceof basic_1.ObjectReferenceType) {\r\n let id = context.getIdentifier();\r\n if (!(id instanceof types_1.ClassDefinition)) {\r\n id = scope.findObjectDefinition(id.getName());\r\n }\r\n if (id instanceof types_1.ClassDefinition
|
|
7136
|
+
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.MethodSource = void 0;\r\nconst Expressions = __webpack_require__(/*! ../../2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst nodes_1 = __webpack_require__(/*! ../../nodes */ \"./node_modules/@abaplint/core/build/src/abap/nodes/index.js\");\r\nconst dynamic_1 = __webpack_require__(/*! ./dynamic */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/dynamic.js\");\r\nconst method_call_chain_1 = __webpack_require__(/*! ./method_call_chain */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_call_chain.js\");\r\nconst basic_1 = __webpack_require__(/*! ../../types/basic */ \"./node_modules/@abaplint/core/build/src/abap/types/basic/index.js\");\r\nconst types_1 = __webpack_require__(/*! ../../types */ \"./node_modules/@abaplint/core/build/src/abap/types/index.js\");\r\nconst _reference_1 = __webpack_require__(/*! ../_reference */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_reference.js\");\r\nconst _object_oriented_1 = __webpack_require__(/*! ../_object_oriented */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_object_oriented.js\");\r\nclass MethodSource {\r\n runSyntax(node, scope, filename) {\r\n // todo, rewrite the context finding, and/or restructure the expression?\r\n const context = new method_call_chain_1.MethodCallChain().runSyntax(node, scope, filename);\r\n const last = node.getLastChild();\r\n const first = node.getFirstChild();\r\n if (first instanceof nodes_1.ExpressionNode && first.get() instanceof Expressions.Dynamic) {\r\n new dynamic_1.Dynamic().runSyntax(first, scope, filename);\r\n }\r\n else if (last instanceof nodes_1.ExpressionNode && last.get() instanceof Expressions.MethodName) {\r\n if (context instanceof basic_1.ObjectReferenceType) {\r\n let id = context.getIdentifier();\r\n if (!(id instanceof types_1.ClassDefinition)) {\r\n id = scope.findObjectDefinition(id.getName());\r\n }\r\n if (id instanceof types_1.ClassDefinition || id instanceof types_1.InterfaceDefinition) {\r\n const methodName = last.concatTokens().toUpperCase();\r\n const helper = new _object_oriented_1.ObjectOriented(scope);\r\n const { method: foundMethod } = helper.searchMethodName(id, methodName);\r\n if (foundMethod === undefined && methodName !== \"CONSTRUCTOR\") {\r\n if (node.getChildren().length !== 3) {\r\n // todo\r\n return undefined;\r\n }\r\n throw new Error(`MethodSource, method not found \\\"${methodName}\\\"`);\r\n }\r\n const extra = {\r\n ooName: id.getName(),\r\n ooType: id instanceof types_1.ClassDefinition ? \"CLAS\" : \"INTF\"\r\n };\r\n scope.addReference(last.getFirstToken(), foundMethod, _reference_1.ReferenceType.MethodReference, filename, extra);\r\n return foundMethod;\r\n }\r\n }\r\n else if (context instanceof basic_1.VoidType) {\r\n return context;\r\n }\r\n else {\r\n throw new Error(\"MethodSource, not a object reference, \" + node.concatTokens());\r\n }\r\n }\r\n else if (last instanceof nodes_1.ExpressionNode && last.get() instanceof Expressions.Dynamic) {\r\n new dynamic_1.Dynamic().runSyntax(last, scope, filename);\r\n }\r\n else {\r\n throw new Error(\"MethodSource, unexpected node\");\r\n }\r\n /*\r\n const chain = node.findDirectExpression(Expressions.FieldChain);\r\n if (chain) {\r\n new FieldChain().runSyntax(chain, scope, filename, ReferenceType.DataReadReference);\r\n }\r\n \r\n for (const d of node.findAllExpressions(Expressions.Dynamic)) {\r\n new Dynamic().runSyntax(d, scope, filename);\r\n }\r\n */\r\n return undefined;\r\n }\r\n}\r\nexports.MethodSource = MethodSource;\r\n//# sourceMappingURL=method_source.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/abap/5_syntax/expressions/method_source.js?");
|
|
7137
7137
|
|
|
7138
7138
|
/***/ }),
|
|
7139
7139
|
|
|
@@ -10037,7 +10037,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
|
|
|
10037
10037
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
10038
10038
|
|
|
10039
10039
|
"use strict";
|
|
10040
|
-
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DumpScope = void 0;\r\nconst _scope_type_1 = __webpack_require__(/*! ../abap/5_syntax/_scope_type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js\");\r\nclass DumpScope {\r\n static dump(spaghetti) {\r\n let ret = \"<hr>Spaghetti Scope:<br><br>\\n\";\r\n ret = ret + this.traverseSpaghetti(spaghetti.getTop(), 0);\r\n return ret;\r\n }\r\n static traverseSpaghetti(node, indent) {\r\n const identifier = node.getIdentifier();\r\n const coverage = node.calcCoverage();\r\n const sident = \" \".repeat(indent * 2);\r\n let ret = sident + \"<u>\" + identifier.stype + \", <tt>\" + identifier.sname + \"</tt>\";\r\n ret += \", (\" + coverage.start.getRow() + \", \" + coverage.start.getCol() + \")\";\r\n if (coverage.end.getRow() === Number.MAX_SAFE_INTEGER\r\n && coverage.end.getCol() === Number.MAX_SAFE_INTEGER) {\r\n ret += \", (max, max)\";\r\n }\r\n else {\r\n ret += \", (\" + coverage.end.getRow() + \", \" + coverage.end.getCol() + \")\";\r\n }\r\n ret += \"</u><br>\";\r\n if (node.getIdentifier().stype === _scope_type_1.ScopeType.BuiltIn) {\r\n ret += sident + node.getData().types.length + \" type definitions<br>\";\r\n ret += sident + node.getData().vars.length + \" data definitions<br>\";\r\n }\r\n else {\r\n ret = ret + this.dumpNode(node, indent);\r\n }\r\n ret = ret + \"<br>\";\r\n for (const c of node.getChildren()) {\r\n ret = ret + this.traverseSpaghetti(c, indent + 1);\r\n }\r\n return ret;\r\n }\r\n static dumpNode(node, indent) {\r\n let ret = \"\";\r\n const sident = \" \".repeat(indent * 2);\r\n const types = node.getData().types;\r\n if (Object.keys(types).length === 0) {\r\n ret = ret + sident + \"0 type definitions<br>\";\r\n }\r\n else {\r\n ret = ret + sident + \"Types:<br>\";\r\n }\r\n for (const name in types) {\r\n const identifier = types[name];\r\n ret = ret + sident + \"<tt>\" + this.escape(name) + \"</tt>\";\r\n const pos = identifier.getStart();\r\n ret = ret + \"(\" + pos.getRow().toString() + \", \" + pos.getCol().toString() + \") \";\r\n ret = ret + identifier.getType().toText(0);\r\n ret = ret + \"<br>\";\r\n }\r\n const vars = node.getData().vars;\r\n if (Object.keys(vars).length === 0) {\r\n ret = ret + sident + \"0 data definitions<br>\";\r\n }\r\n else {\r\n ret = ret + sident + \"Data:<br>\";\r\n }\r\n for (const name in vars) {\r\n const identifier = vars[name];\r\n ret = ret + sident + \"<tt>\" + this.escape(name.toLowerCase()) + \"</tt>\";\r\n const pos = identifier.getStart();\r\n ret = ret + \"(\" + pos.getRow().toString() + \", \" + pos.getCol().toString() + \") \";\r\n ret = ret + identifier.getType().toText(0);\r\n const meta = identifier.getMeta();\r\n if (meta) {\r\n ret = ret + \", \" + meta;\r\n }\r\n ret = ret + \"<br>\";\r\n }\r\n ret += sident + node.getData().cdefs.length + \" class definitions<br>\";\r\n ret += sident + node.getData().idefs.length + \" interface definitions<br>\";\r\n ret += sident + node.getData().forms.length + \" form definitions<br>\";\r\n ret += sident + node.getData().references.length + \" references<br>\";\r\n for (const r of node.getData().references) {\r\n ret += sident + \" \" + r.referenceType + \", line \" + r.position.getStart().getRow() + \" \" + this.escape(r.position.getFilename()) + \" \" + this.escape(r.position.getName()) + \"<br>\";\r\n }\r\n return ret;\r\n }\r\n // todo, refactor, this method exists in multiple classes\r\n static escape(str) {\r\n str = str.replace(/&/g, \"&\");\r\n str = str.replace(/>/g, \">\");\r\n str = str.replace(/</g, \"<\");\r\n str = str.replace(/\"/g, \""\");\r\n str = str.replace(/'/g, \"'\");\r\n return str;\r\n }\r\n}\r\nexports.DumpScope = DumpScope;\r\n//# sourceMappingURL=dump_scope.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/lsp/dump_scope.js?");
|
|
10040
|
+
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.DumpScope = void 0;\r\nconst _scope_type_1 = __webpack_require__(/*! ../abap/5_syntax/_scope_type */ \"./node_modules/@abaplint/core/build/src/abap/5_syntax/_scope_type.js\");\r\nclass DumpScope {\r\n static dump(spaghetti) {\r\n let ret = \"<hr>Spaghetti Scope:<br><br>\\n\";\r\n ret = ret + this.traverseSpaghetti(spaghetti.getTop(), 0);\r\n return ret;\r\n }\r\n static traverseSpaghetti(node, indent) {\r\n const identifier = node.getIdentifier();\r\n const coverage = node.calcCoverage();\r\n const sident = \" \".repeat(indent * 2);\r\n let ret = sident + \"<u>\" + identifier.stype + \", <tt>\" + identifier.sname + \"</tt>\";\r\n ret += \", (\" + coverage.start.getRow() + \", \" + coverage.start.getCol() + \")\";\r\n if (coverage.end.getRow() === Number.MAX_SAFE_INTEGER\r\n && coverage.end.getCol() === Number.MAX_SAFE_INTEGER) {\r\n ret += \", (max, max)\";\r\n }\r\n else {\r\n ret += \", (\" + coverage.end.getRow() + \", \" + coverage.end.getCol() + \")\";\r\n }\r\n ret += \"</u><br>\";\r\n if (node.getIdentifier().stype === _scope_type_1.ScopeType.BuiltIn) {\r\n ret += sident + node.getData().types.length + \" type definitions<br>\";\r\n ret += sident + node.getData().vars.length + \" data definitions<br>\";\r\n }\r\n else {\r\n ret = ret + this.dumpNode(node, indent);\r\n }\r\n ret = ret + \"<br>\";\r\n for (const c of node.getChildren()) {\r\n ret = ret + this.traverseSpaghetti(c, indent + 1);\r\n }\r\n return ret;\r\n }\r\n static dumpNode(node, indent) {\r\n let ret = \"\";\r\n const sident = \" \".repeat(indent * 2);\r\n const types = node.getData().types;\r\n if (Object.keys(types).length === 0) {\r\n ret = ret + sident + \"0 type definitions<br>\";\r\n }\r\n else {\r\n ret = ret + sident + \"Types:<br>\";\r\n }\r\n for (const name in types) {\r\n const identifier = types[name];\r\n ret = ret + sident + \"<tt>\" + this.escape(name) + \"</tt>\";\r\n const pos = identifier.getStart();\r\n ret = ret + \"(\" + pos.getRow().toString() + \", \" + pos.getCol().toString() + \") \";\r\n ret = ret + identifier.getType().toText(0);\r\n ret = ret + \"<br>\";\r\n }\r\n const vars = node.getData().vars;\r\n if (Object.keys(vars).length === 0) {\r\n ret = ret + sident + \"0 data definitions<br>\";\r\n }\r\n else {\r\n ret = ret + sident + \"Data:<br>\";\r\n }\r\n for (const name in vars) {\r\n const identifier = vars[name];\r\n ret = ret + sident + \"<tt>\" + this.escape(name.toLowerCase()) + \"</tt>\";\r\n const pos = identifier.getStart();\r\n ret = ret + \"(\" + pos.getRow().toString() + \", \" + pos.getCol().toString() + \") \";\r\n ret = ret + identifier.getType().toText(0);\r\n const meta = identifier.getMeta();\r\n if (meta) {\r\n ret = ret + \", \" + meta;\r\n }\r\n ret = ret + \"<br>\";\r\n }\r\n ret += sident + Object.keys(node.getData().cdefs).length + \" class definitions<br>\";\r\n ret += sident + node.getData().idefs.length + \" interface definitions<br>\";\r\n ret += sident + node.getData().forms.length + \" form definitions<br>\";\r\n ret += sident + node.getData().references.length + \" references<br>\";\r\n for (const r of node.getData().references) {\r\n ret += sident + \" \" + r.referenceType + \", line \" + r.position.getStart().getRow() + \" \" + this.escape(r.position.getFilename()) + \" \" + this.escape(r.position.getName()) + \"<br>\";\r\n }\r\n return ret;\r\n }\r\n // todo, refactor, this method exists in multiple classes\r\n static escape(str) {\r\n str = str.replace(/&/g, \"&\");\r\n str = str.replace(/>/g, \">\");\r\n str = str.replace(/</g, \"<\");\r\n str = str.replace(/\"/g, \""\");\r\n str = str.replace(/'/g, \"'\");\r\n return str;\r\n }\r\n}\r\nexports.DumpScope = DumpScope;\r\n//# sourceMappingURL=dump_scope.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/lsp/dump_scope.js?");
|
|
10041
10041
|
|
|
10042
10042
|
/***/ }),
|
|
10043
10043
|
|
|
@@ -11489,7 +11489,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
|
|
|
11489
11489
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
11490
11490
|
|
|
11491
11491
|
"use strict";
|
|
11492
|
-
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.40\";\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?");
|
|
11492
|
+
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.42\";\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?");
|
|
11493
11493
|
|
|
11494
11494
|
/***/ }),
|
|
11495
11495
|
|
|
@@ -12237,7 +12237,7 @@ eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\n
|
|
|
12237
12237
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
12238
12238
|
|
|
12239
12239
|
"use strict";
|
|
12240
|
-
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.KeepSingleParameterCallsOnOneLine = exports.KeepSingleParameterCallsOnOneLineConf = void 0;\r\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\r\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\r\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\r\nconst Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\r\nclass KeepSingleParameterCallsOnOneLineConf extends _basic_rule_config_1.BasicRuleConfig {\r\n constructor() {\r\n super(...arguments);\r\n /** Max line length, in characters */\r\n this.length = 120;\r\n }\r\n}\r\nexports.KeepSingleParameterCallsOnOneLineConf = KeepSingleParameterCallsOnOneLineConf;\r\nclass KeepSingleParameterCallsOnOneLine extends _abap_rule_1.ABAPRule {\r\n constructor() {\r\n super(...arguments);\r\n this.conf = new KeepSingleParameterCallsOnOneLineConf();\r\n }\r\n getMetadata() {\r\n return {\r\n key: \"keep_single_parameter_on_one_line\",\r\n title: \"Keep single parameters on one line\",\r\n shortDescription: `Keep single parameter calls on one line`,\r\n extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-single-parameter-calls-on-one-line`,\r\n tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],\r\n badExample: `call_method(\\n 2 ).`,\r\n goodExample: `call_method( 2 ).`,\r\n };\r\n }\r\n getConfig() {\r\n return this.conf;\r\n }\r\n setConfig(conf) {\r\n this.conf = conf;\r\n }\r\n runParsed(file, obj) {\r\n let issues = [];\r\n if (obj.getType() === \"INTF\") {\r\n return [];\r\n }\r\n const stru = file.getStructure();\r\n if (stru === undefined) {\r\n return [];\r\n }\r\n for (const s of file.getStatements()) {\r\n
|
|
12240
|
+
eval("\r\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\r\nexports.KeepSingleParameterCallsOnOneLine = exports.KeepSingleParameterCallsOnOneLineConf = void 0;\r\nconst issue_1 = __webpack_require__(/*! ../issue */ \"./node_modules/@abaplint/core/build/src/issue.js\");\r\nconst _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ \"./node_modules/@abaplint/core/build/src/rules/_basic_rule_config.js\");\r\nconst _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ \"./node_modules/@abaplint/core/build/src/rules/_abap_rule.js\");\r\nconst Expressions = __webpack_require__(/*! ../abap/2_statements/expressions */ \"./node_modules/@abaplint/core/build/src/abap/2_statements/expressions/index.js\");\r\nconst _irule_1 = __webpack_require__(/*! ./_irule */ \"./node_modules/@abaplint/core/build/src/rules/_irule.js\");\r\nclass KeepSingleParameterCallsOnOneLineConf extends _basic_rule_config_1.BasicRuleConfig {\r\n constructor() {\r\n super(...arguments);\r\n /** Max line length, in characters */\r\n this.length = 120;\r\n }\r\n}\r\nexports.KeepSingleParameterCallsOnOneLineConf = KeepSingleParameterCallsOnOneLineConf;\r\nclass KeepSingleParameterCallsOnOneLine extends _abap_rule_1.ABAPRule {\r\n constructor() {\r\n super(...arguments);\r\n this.conf = new KeepSingleParameterCallsOnOneLineConf();\r\n }\r\n getMetadata() {\r\n return {\r\n key: \"keep_single_parameter_on_one_line\",\r\n title: \"Keep single parameters on one line\",\r\n shortDescription: `Keep single parameter calls on one line`,\r\n extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#keep-single-parameter-calls-on-one-line`,\r\n tags: [_irule_1.RuleTag.Whitespace, _irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],\r\n badExample: `call_method(\\n 2 ).`,\r\n goodExample: `call_method( 2 ).`,\r\n };\r\n }\r\n getConfig() {\r\n return this.conf;\r\n }\r\n setConfig(conf) {\r\n this.conf = conf;\r\n }\r\n runParsed(file, obj) {\r\n let issues = [];\r\n if (obj.getType() === \"INTF\") {\r\n return [];\r\n }\r\n const stru = file.getStructure();\r\n if (stru === undefined) {\r\n return [];\r\n }\r\n for (const s of file.getStatements()) {\r\n if (this.isMultiLine(s) === false\r\n || this.calcStatementLength(s) > this.getConfig().length\r\n || this.containsNewLineValue(s)\r\n || this.containsNewLineTableExpression(s)\r\n || this.containsFieldAssigments(s)\r\n || this.containsNewLineTemplate(s)) {\r\n continue;\r\n }\r\n for (const c of s.findAllExpressions(Expressions.MethodCallParam)) {\r\n issues = issues.concat(this.check(c, file));\r\n }\r\n }\r\n return issues;\r\n }\r\n ///////////////////////////////////////\r\n containsFieldAssigments(s) {\r\n const fs = s.findAllExpressions(Expressions.FieldAssignment);\r\n return fs.length > 1;\r\n }\r\n containsNewLineTableExpression(s) {\r\n for (const st of s.findAllExpressions(Expressions.TableExpression)) {\r\n if (st.getFirstToken().getRow() !== st.getLastToken().getRow()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n containsNewLineValue(s) {\r\n for (const st of s.findAllExpressions(Expressions.Source)) {\r\n const first = st.getFirstToken().getStr().toUpperCase();\r\n if (first === \"VALUE\" && st.getFirstToken().getRow() !== st.getLastToken().getRow()) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n containsNewLineTemplate(s) {\r\n for (const st of s.findAllExpressions(Expressions.StringTemplate)) {\r\n for (const t of st.getAllTokens()) {\r\n if (t.getStr().includes(\"\\\\n\")) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n check(c, file) {\r\n if (this.isSingleParameter(c) === true && this.isMultiLine(c) === true) {\r\n for (const sub of c.findAllExpressions(Expressions.MethodCallParam)) {\r\n if (this.isSingleParameter(sub) === false\r\n && this.isWithoutParameters(sub) === false) {\r\n return [];\r\n }\r\n }\r\n const message = \"Keep single parameter on one line\";\r\n return [issue_1.Issue.atToken(file, c.getFirstToken(), message, this.getMetadata().key, this.conf.severity)];\r\n }\r\n return [];\r\n }\r\n // including first indentation, worst case calculation add space after each token\r\n calcStatementLength(c) {\r\n let length = 0;\r\n for (const t of c.getTokens()) {\r\n if (length === 0) {\r\n length = length + t.getStart().getCol();\r\n }\r\n length = length + t.getStr().length + 1;\r\n }\r\n return length;\r\n }\r\n isMultiLine(c) {\r\n const first = c.getFirstToken();\r\n const last = c.getLastToken();\r\n return first.getStart().getRow() < last.getStart().getRow();\r\n }\r\n isWithoutParameters(c) {\r\n return c.getChildren().length === 2;\r\n }\r\n isSingleParameter(c) {\r\n if (c.findDirectExpression(Expressions.Source)) {\r\n return true;\r\n }\r\n const list = c.findDirectExpression(Expressions.ParameterListS);\r\n if (list) {\r\n return list.getChildren().length === 1;\r\n }\r\n const param = c.findDirectExpression(Expressions.MethodParameters);\r\n if (param) {\r\n if (param.getChildren().length > 2) {\r\n return false;\r\n }\r\n const paramsource = param.findDirectExpression(Expressions.ParameterListS);\r\n if (paramsource && paramsource.getChildren().length === 1) {\r\n return true;\r\n }\r\n const paramtarget = param.findDirectExpression(Expressions.ParameterListT);\r\n if (paramtarget && paramtarget.getChildren().length === 1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\nexports.KeepSingleParameterCallsOnOneLine = KeepSingleParameterCallsOnOneLine;\r\n//# sourceMappingURL=keep_single_parameter_on_one_line.js.map\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/@abaplint/core/build/src/rules/keep_single_parameter_on_one_line.js?");
|
|
12241
12241
|
|
|
12242
12242
|
/***/ }),
|
|
12243
12243
|
|
|
@@ -13869,7 +13869,7 @@ module.exports = require("zlib");
|
|
|
13869
13869
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
13870
13870
|
|
|
13871
13871
|
"use strict";
|
|
13872
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Chalk\": () => (/* binding */ Chalk),\n/* harmony export */ \"
|
|
13872
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Chalk\": () => (/* binding */ Chalk),\n/* harmony export */ \"backgroundColorNames\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.backgroundColorNames),\n/* harmony export */ \"backgroundColors\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.backgroundColorNames),\n/* harmony export */ \"chalkStderr\": () => (/* binding */ chalkStderr),\n/* harmony export */ \"colorNames\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.colorNames),\n/* harmony export */ \"colors\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.colorNames),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"foregroundColorNames\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.foregroundColorNames),\n/* harmony export */ \"foregroundColors\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.foregroundColorNames),\n/* harmony export */ \"modifierNames\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.modifierNames),\n/* harmony export */ \"modifiers\": () => (/* reexport safe */ _ansi_styles__WEBPACK_IMPORTED_MODULE_0__.modifierNames),\n/* harmony export */ \"supportsColor\": () => (/* binding */ stdoutColor),\n/* harmony export */ \"supportsColorStderr\": () => (/* binding */ stderrColor)\n/* harmony export */ });\n/* harmony import */ var _ansi_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vendor/ansi-styles/index.js */ \"./node_modules/chalk/source/vendor/ansi-styles/index.js\");\n/* harmony import */ var _supports_color__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! #supports-color */ \"./node_modules/chalk/source/vendor/supports-color/index.js\");\n/* harmony import */ var _utilities_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities.js */ \"./node_modules/chalk/source/utilities.js\");\n\n\n\n\nconst {stdout: stdoutColor, stderr: stderrColor} = _supports_color__WEBPACK_IMPORTED_MODULE_1__[\"default\"];\n\nconst GENERATOR = Symbol('GENERATOR');\nconst STYLER = Symbol('STYLER');\nconst IS_EMPTY = Symbol('IS_EMPTY');\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m',\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass Chalk {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = (...strings) => strings.join(' ');\n\tapplyOptions(chalk, options);\n\n\tObject.setPrototypeOf(chalk, createChalk.prototype);\n\n\treturn chalk;\n};\n\nfunction createChalk(options) {\n\treturn chalkFactory(options);\n}\n\nObject.setPrototypeOf(createChalk.prototype, Function.prototype);\n\nfor (const [styleName, style] of Object.entries(_ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t},\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this[STYLER], true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t},\n};\n\nconst getModelAnsi = (model, level, type, ...arguments_) => {\n\tif (model === 'rgb') {\n\t\tif (level === 'ansi16m') {\n\t\t\treturn _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"][type].ansi16m(...arguments_);\n\t\t}\n\n\t\tif (level === 'ansi256') {\n\t\t\treturn _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"][type].ansi256(_ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToAnsi256(...arguments_));\n\t\t}\n\n\t\treturn _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"][type].ansi(_ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"].rgbToAnsi(...arguments_));\n\t}\n\n\tif (model === 'hex') {\n\t\treturn getModelAnsi('rgb', level, type, ..._ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hexToRgb(...arguments_));\n\t}\n\n\treturn _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"][type][model](...arguments_);\n};\n\nconst usedModels = ['rgb', 'hex', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"].color.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), _ansi_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"].bgColor.close, this[STYLER]);\n\t\t\t\treturn createBuilder(this, styler, this[IS_EMPTY]);\n\t\t\t};\n\t\t},\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this[GENERATOR].level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis[GENERATOR].level = level;\n\t\t},\n\t},\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent,\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\t// Single argument is hot path, implicit coercion is faster than anything\n\t// eslint-disable-next-line no-implicit-coercion\n\tconst builder = (...arguments_) => applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder[GENERATOR] = self;\n\tbuilder[STYLER] = _styler;\n\tbuilder[IS_EMPTY] = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self[IS_EMPTY] ? '' : string;\n\t}\n\n\tlet styler = self[STYLER];\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.includes('\\u001B')) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = (0,_utilities_js__WEBPACK_IMPORTED_MODULE_2__.stringReplaceAll)(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = (0,_utilities_js__WEBPACK_IMPORTED_MODULE_2__.stringEncaseCRLFWithFirstIndex)(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nObject.defineProperties(createChalk.prototype, styles);\n\nconst chalk = createChalk();\nconst chalkStderr = createChalk({level: stderrColor ? stderrColor.level : 0});\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (chalk);\n\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/chalk/source/index.js?");
|
|
13873
13873
|
|
|
13874
13874
|
/***/ }),
|
|
13875
13875
|
|
|
@@ -13891,7 +13891,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
13891
13891
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
13892
13892
|
|
|
13893
13893
|
"use strict";
|
|
13894
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\
|
|
13894
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"backgroundColorNames\": () => (/* binding */ backgroundColorNames),\n/* harmony export */ \"colorNames\": () => (/* binding */ colorNames),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ \"foregroundColorNames\": () => (/* binding */ foregroundColorNames),\n/* harmony export */ \"modifierNames\": () => (/* binding */ modifierNames)\n/* harmony export */ });\nconst ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nconst modifierNames = Object.keys(styles.modifier);\nconst foregroundColorNames = Object.keys(styles.color);\nconst backgroundColorNames = Object.keys(styles.bgColor);\nconst colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue(red, green, blue) {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue(hex) {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue(code) {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ansiStyles);\n\n\n//# sourceURL=webpack://@abaplint/cli/./node_modules/chalk/source/vendor/ansi-styles/index.js?");
|
|
13895
13895
|
|
|
13896
13896
|
/***/ }),
|
|
13897
13897
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/cli",
|
|
3
|
-
"version": "2.93.
|
|
3
|
+
"version": "2.93.42",
|
|
4
4
|
"description": "abaplint - Command Line Interface",
|
|
5
5
|
"bin": {
|
|
6
6
|
"abaplint": "./abaplint"
|
|
@@ -39,21 +39,21 @@
|
|
|
39
39
|
},
|
|
40
40
|
"homepage": "https://abaplint.org",
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@abaplint/core": "^2.93.
|
|
42
|
+
"@abaplint/core": "^2.93.42",
|
|
43
43
|
"@types/chai": "^4.3.3",
|
|
44
44
|
"@types/glob": "^7.2.0",
|
|
45
45
|
"@types/minimist": "^1.2.2",
|
|
46
46
|
"@types/mocha": "^10.0.0",
|
|
47
|
-
"@types/node": "^18.
|
|
47
|
+
"@types/node": "^18.11.0",
|
|
48
48
|
"@types/progress": "^2.0.5",
|
|
49
49
|
"chai": "^4.3.6",
|
|
50
|
-
"chalk": "^5.1.
|
|
50
|
+
"chalk": "^5.1.2",
|
|
51
51
|
"eslint": "^8.25.0",
|
|
52
52
|
"glob": "^7.2.3",
|
|
53
53
|
"json5": "^2.2.1",
|
|
54
54
|
"memfs": "^3.4.7",
|
|
55
|
-
"minimist": "^1.2.
|
|
56
|
-
"mocha": "^10.
|
|
55
|
+
"minimist": "^1.2.7",
|
|
56
|
+
"mocha": "^10.1.0",
|
|
57
57
|
"progress": "^2.0.3",
|
|
58
58
|
"typescript": "^4.8.4",
|
|
59
59
|
"webpack": "^5.74.0",
|