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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 22015x 22015x 22015x 22015x 1x 11008x 11008x 11008x 11008x 11008x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 32890x 11008x 11008x 10491x 10491x 11008x 11008x 243x 243x 11008x 11008x 266x 266x 266x 266x 3x 3x 263x 266x 1471x 1471x 1464x 1464x 7x 7x 1471x 7x 7x 7x 1471x 2x 1471x 5x 5x 5x 5x 1471x 1471x 263x 263x 263x 11008x 11008x | 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();
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;
}
public runParsed(file: ABAPFile, obj: ABAPObject) {
const issues: Issue[] = [];
const testRegex = new RegExp(this.conf.pattern, "i");
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 (testRegex.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;
}
} |