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 71 72 73 74 75 76 77 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 30939x 30939x 30939x 30939x 1x 15470x 15470x 15470x 15470x 15470x 15470x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 105914x 15470x 15470x 14908x 14908x 15470x 15470x 264x 264x 264x 15470x 15470x 295x 295x 295x 3x 3x 292x 295x 1644x 1644x 1632x 1632x 12x 12x 1644x 12x 12x 12x 1644x 2x 1644x 10x 10x 10x 10x 1644x 1644x 292x 292x 292x 15470x 15470x | import {Issue} from "../issue";
import {ABAPRule} from "./_abap_rule";
import * as Statements from "../abap/2_statements/statements";
import * as Expressions from "../abap/2_statements/expressions";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
import {ABAPObject} from "../objects/_abap_object";
import {TypePool} from "../objects";
export class MacroNamingConf extends BasicRuleConfig {
/** The pattern for macros, case insensitive */
public pattern: string = "^_.+$";
}
export class MacroNaming extends ABAPRule {
private conf = new MacroNamingConf();
private regex = new RegExp(this.conf.pattern, "i");
public getMetadata(): IRuleMetadata {
return {
key: "macro_naming",
title: "Macro naming conventions",
shortDescription: `Allows you to enforce a pattern for macro definitions`,
extendedInformation: `Use rule "avoid_use" to avoid macros altogether.`,
tags: [RuleTag.Naming, RuleTag.SingleFile],
badExample: `DEFINE something.
END-OF-DEFINITION.`,
goodExample: `DEFINE _something.
END-OF-DEFINITION.`,
};
}
public getConfig(): MacroNamingConf {
return this.conf;
}
public setConfig(conf: MacroNamingConf) {
this.conf = conf;
this.regex = new RegExp(this.conf.pattern, "i");
}
public runParsed(file: ABAPFile, obj: ABAPObject) {
const issues: Issue[] = [];
if (obj instanceof TypePool) {
return [];
}
for (const stat of file.getStatements()) {
if (!(stat.get() instanceof Statements.Define)) {
continue;
}
const expr = stat.findDirectExpression(Expressions.MacroName);
if (expr === undefined) {
continue;
}
const token = expr.getFirstToken();
if (this.regex.exec(token.getStr())) {
continue;
} else {
const message = "Bad macro name naming, expected \"" + this.conf.pattern + "\", got \"" + token.getStr() + "\"";
const issue = Issue.atToken(file, token, message, this.getMetadata().key, this.conf.severity);
issues.push(issue);
}
}
return issues;
}
} |