@abaplint/core
Version:
abaplint - Core API
72 lines (69 loc) • 2.92 kB
JavaScript
;
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