UNPKG

@abaplint/core

Version:
74 lines 3.1 kB
"use strict"; 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