UNPKG

@abaplint/core

Version:
78 lines (76 loc) 3.08 kB
"use strict"; 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