@abaplint/core
Version:
abaplint - Core API
78 lines (76 loc) • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NoInlineInOptionalBranches = exports.NoInlineInOptionalBranchesConf = void 0;
const issue_1 = require("../issue");
const _abap_rule_1 = require("./_abap_rule");
const _basic_rule_config_1 = require("./_basic_rule_config");
const Structures = require("../abap/3_structures/structures");
const Expressions = require("../abap/2_statements/expressions");
const _irule_1 = require("./_irule");
const version_1 = require("../version");
class NoInlineInOptionalBranchesConf extends _basic_rule_config_1.BasicRuleConfig {
}
exports.NoInlineInOptionalBranchesConf = NoInlineInOptionalBranchesConf;
class NoInlineInOptionalBranches extends _abap_rule_1.ABAPRule {
constructor() {
super(...arguments);
this.conf = new NoInlineInOptionalBranchesConf();
}
getMetadata() {
return {
key: "no_inline_in_optional_branches",
title: "Don't declare inline in optional branches",
shortDescription: `Don't declare inline in optional branches`,
extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#dont-declare-inline-in-optional-branches
Considered optional branches:
* inside IF/ELSEIF/ELSE
* inside LOOP
* inside WHILE
* inside CASE/WHEN, CASE TYPE OF
* inside DO
* inside SELECT loops
Not considered optional branches:
* TRY/CATCH/CLEANUP`,
tags: [_irule_1.RuleTag.Styleguide, _irule_1.RuleTag.SingleFile],
};
}
getConfig() {
return this.conf;
}
setConfig(conf) {
this.conf = conf;
}
runParsed(file) {
const output = [];
const version = this.reg.getConfig().getVersion();
if (version === version_1.Version.v700
|| version === version_1.Version.v702
|| version === version_1.Version.OpenABAP) {
return [];
}
const struc = file.getStructure();
if (struc === undefined) {
return []; // syntax error
}
const candidates = [
...struc.findAllStructures(Structures.If),
...struc.findAllStructures(Structures.Loop),
...struc.findAllStructures(Structures.While),
...struc.findAllStructures(Structures.Case),
...struc.findAllStructures(Structures.CaseType),
...struc.findAllStructures(Structures.Do),
...struc.findAllStructures(Structures.Select)
];
for (const c of candidates) {
const inline = c.findFirstExpression(Expressions.InlineData);
if (inline) {
const message = "Don't declare inline in optional branches";
const issue = issue_1.Issue.atToken(file, inline.getFirstToken(), message, this.getMetadata().key, this.getConfig().severity);
output.push(issue);
}
}
return output;
}
}
exports.NoInlineInOptionalBranches = NoInlineInOptionalBranches;
//# sourceMappingURL=no_inline_in_optional_branches.js.map