Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11567x 11567x 11567x 11567x 11567x 34546x 34546x 34546x 34546x 34546x 34546x 34546x 34546x 34546x 11567x 11567x 11069x 11069x 11567x 11567x 235x 235x 11567x 11567x 261x 261x 261x 261x 1397x 44x 44x 44x 6x 2x 2x 4x 4x 4x 4x 4x 44x 1397x 1397x 4x 4x 4x 4x 1397x 261x 261x 261x 11567x 11567x | import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {Issue} from "../issue";
import * as Expressions from "../abap/2_statements/expressions";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
import {CallScreen, SetScreen} from "../abap/2_statements/statements";
import {EditHelper} from "../edit_helper";
export class OmitPrecedingZerosConf extends BasicRuleConfig {
}
export class OmitPrecedingZeros extends ABAPRule {
private conf = new OmitPrecedingZerosConf();
public getMetadata(): IRuleMetadata {
return {
key: "omit_preceding_zeros",
title: "Omit preceding zeros",
shortDescription: `Omit preceding zeros from integer constants`,
tags: [RuleTag.SingleFile, RuleTag.Quickfix],
badExample: `int = -001.`,
goodExample: `int = -1.`,
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: OmitPrecedingZerosConf): void {
this.conf = conf;
}
public runParsed(file: ABAPFile) {
const issues: Issue[] = [];
const message = "Omit preceding zeros";
for (const s of file.getStatements()) {
for (const i of s.findAllExpressions(Expressions.Integer)) {
const token = i.getLastToken();
const str = token.getStr();
if (str.length > 1 && str.startsWith("0")) {
if (s.get() instanceof CallScreen || s.get() instanceof SetScreen) {
continue;
}
const replace = str.replace(/^0+/, "");
const fix = EditHelper.replaceRange(file, token.getStart(), token.getEnd(), replace);
const issue = Issue.atToken(file, token, message, this.getMetadata().key, this.getConfig().severity, fix);
issues.push(issue);
}
}
for (const i of s.findAllExpressions(Expressions.ParameterException)) {
const token = i.findDirectExpression(Expressions.SimpleName)?.getFirstToken();
const str = token?.getStr();
if (token && str && str.length > 1 && str.startsWith("0")) {
const replace = str.replace(/^0+/, "");
const fix = EditHelper.replaceRange(file, token.getStart(), token.getEnd(), replace);
const issue = Issue.atToken(file, token, message, this.getMetadata().key, this.getConfig().severity, fix);
issues.push(issue);
}
}
}
return issues;
}
} |