@abaplint/core
Version:
abaplint - Core API
74 lines • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PragmaStyle = exports.PragmaStyleConf = void 0;
const issue_1 = require("../issue");
const _abap_rule_1 = require("./_abap_rule");
const _basic_rule_config_1 = require("./_basic_rule_config");
const _irule_1 = require("./_irule");
const keyword_case_1 = require("./keyword_case");
class PragmaStyleConf extends _basic_rule_config_1.BasicRuleConfig {
constructor() {
super(...arguments);
this.style = keyword_case_1.KeywordCaseStyle.Upper;
}
}
exports.PragmaStyleConf = PragmaStyleConf;
class PragmaStyle extends _abap_rule_1.ABAPRule {
constructor() {
super(...arguments);
this.conf = new PragmaStyleConf();
}
getMetadata() {
return {
key: "pragma_style",
title: "Pragma Style",
shortDescription: `Check pragmas placement and case`,
tags: [_irule_1.RuleTag.SingleFile],
extendedInformation: `https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/abenpragma.htm`,
badExample: `DATA field ##NO_TEXT TYPE i.`,
goodExample: `DATA field TYPE i ##NO_TEXT.`,
};
}
getConfig() {
return this.conf;
}
setConfig(conf) {
this.conf = conf;
if (this.conf.style === undefined) {
this.conf.style = keyword_case_1.KeywordCaseStyle.Upper;
}
}
runParsed(file) {
const issues = [];
for (const s of file.getStatements()) {
if (s.getPragmas().length === 0) {
continue;
}
for (const p of s.getPragmas()) {
const children = s.getChildren();
if (children.length === 1) {
break; // empty statement with pragma
}
if (children[children.length - 2].getLastToken().getStart().isAfter(p.getStart())) {
const message = "Place pragma at end of statement";
const issue = issue_1.Issue.atToken(file, p, message, this.getMetadata().key, this.conf.severity);
issues.push(issue);
continue; // max one finding per statement
}
if (this.conf.style === keyword_case_1.KeywordCaseStyle.Upper && p.getStr() !== p.getStr().toUpperCase()) {
const message = "Upper case pragmas";
const issue = issue_1.Issue.atToken(file, p, message, this.getMetadata().key, this.conf.severity);
issues.push(issue);
}
else if (this.conf.style === keyword_case_1.KeywordCaseStyle.Lower && p.getStr() !== p.getStr().toLowerCase()) {
const message = "Lower case pragmas";
const issue = issue_1.Issue.atToken(file, p, message, this.getMetadata().key, this.conf.severity);
issues.push(issue);
}
}
}
return issues;
}
}
exports.PragmaStyle = PragmaStyle;
//# sourceMappingURL=pragma_style.js.map