UNPKG

@abaplint/core

Version:
85 lines 3.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ReduceStringTemplates = exports.ReduceStringTemplatesConf = void 0; const Expressions = require("../abap/2_statements/expressions"); 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"); class ReduceStringTemplatesConf extends _basic_rule_config_1.BasicRuleConfig { } exports.ReduceStringTemplatesConf = ReduceStringTemplatesConf; class ReduceStringTemplates extends _abap_rule_1.ABAPRule { constructor() { super(...arguments); this.conf = new ReduceStringTemplatesConf(); } getMetadata() { return { key: "reduce_string_templates", title: "Reduce string templates", shortDescription: `Checks for string templates`, tags: [_irule_1.RuleTag.SingleFile], badExample: `WRITE |{ |sdf| }|.\nWRITE |{ 'sdf' }|.`, goodExample: `WRITE |sdf|.`, }; } getConfig() { return this.conf; } setConfig(conf) { this.conf = conf; } runParsed(file, _obj) { const issues = []; const structure = file.getStructure(); if (structure === undefined) { return []; } for (const template of structure.findAllExpressions(Expressions.StringTemplate)) { for (const ts of template.findAllExpressions(Expressions.StringTemplateSource)) { for (const source of ts.findDirectExpressions(Expressions.Source)) { for (const second of source.findDirectExpressions(Expressions.StringTemplate)) { issues.push(issue_1.Issue.atToken(file, second.getFirstToken(), "Nested string templates, reduce", this.getMetadata().key, this.conf.severity)); } if (ts.findDirectExpression(Expressions.StringTemplateFormatting)) { continue; } for (const constant of source.findDirectExpressions(Expressions.Constant)) { for (const constantString of constant.findDirectExpressions(Expressions.ConstantString)) { issues.push(issue_1.Issue.atToken(file, constantString.getFirstToken(), "Constant string in text template, reduce", this.getMetadata().key, this.conf.severity)); } } } } } for (const source of structure.findAllExpressions(Expressions.Source)) { const children = source.getChildren(); if (children.length !== 3) { continue; } else if (!(children[0].get() instanceof Expressions.StringTemplate)) { continue; } else if (children[1].getFirstToken().getStr() !== "&&") { continue; } else if (!(children[2].get() instanceof Expressions.Source)) { continue; } const sub = children[2].getChildren(); if (sub.length !== 1) { continue; } const start = children[0].getFirstToken().getStart(); const end = sub[0].getLastToken().getEnd(); if (start.getRow() === end.getRow()) { const message = "Reduce template, remove \"&&\""; issues.push(issue_1.Issue.atToken(file, children[1].getFirstToken(), message, this.getMetadata().key, this.conf.severity)); } } return issues; } } exports.ReduceStringTemplates = ReduceStringTemplates; //# sourceMappingURL=reduce_string_templates.js.map