@abaplint/core
Version:
abaplint - Core API
85 lines • 3.78 kB
JavaScript
;
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