UNPKG

@abaplint/core

Version:
72 lines (69 loc) 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EasyToFindMessages = exports.EasyToFindMessagesConf = void 0; const issue_1 = require("../issue"); const _irule_1 = require("./_irule"); const _basic_rule_config_1 = require("./_basic_rule_config"); const position_1 = require("../position"); const syntax_1 = require("../abap/5_syntax/syntax"); const _abap_object_1 = require("../objects/_abap_object"); class EasyToFindMessagesConf extends _basic_rule_config_1.BasicRuleConfig { } exports.EasyToFindMessagesConf = EasyToFindMessagesConf; class EasyToFindMessages { constructor() { this.conf = new EasyToFindMessagesConf(); } getMetadata() { return { key: "easy_to_find_messages", title: "Easy to find messages", shortDescription: `Make messages easy to find`, extendedInformation: `All messages must be statically referenced exactly once Only MESSAGE and RAISE statments are counted as static references Also see rule "message_exists" https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#make-messages-easy-to-find`, tags: [_irule_1.RuleTag.Styleguide], }; } getConfig() { return this.conf; } setConfig(conf) { this.conf = conf; } initialize(reg) { this.msagReferences = reg.getMSAGReferences(); // the SyntaxLogic builds the references for (const obj of reg.getObjects()) { if (obj instanceof _abap_object_1.ABAPObject) { new syntax_1.SyntaxLogic(reg, obj).run(); } } return this; } run(object) { const issues = []; if (object.getType() === "MSAG") { const msag = object; for (const message of msag.getMessages()) { const where = this.msagReferences.listByMessage(msag.getName().toUpperCase(), message.getNumber()); if (where.length === 0) { const text = `Message ${message.getNumber()} not statically referenced`; const position = new position_1.Position(1, 1); const issue = issue_1.Issue.atPosition(object.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity); issues.push(issue); } else if (where.length >= 2) { const text = `Message ${message.getNumber()} referenced more than once`; const position = new position_1.Position(1, 1); const issue = issue_1.Issue.atPosition(object.getFiles()[0], position, text, this.getMetadata().key, this.conf.severity); issues.push(issue); } } } return issues; } } exports.EasyToFindMessages = EasyToFindMessages; //# sourceMappingURL=easy_to_find_messages.js.map