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 22643x 22643x 22643x 22643x 1x 11322x 11322x 11322x 11322x 11322x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 44636x 11322x 11322x 10825x 10825x 11322x 11322x 233x 233x 11322x 11322x 246x 246x 246x 246x 3x 3x 243x 246x 1373x 1373x 1370x 1370x 3x 3x 1373x 3x 3x 3x 1373x 1x 1373x 2x 2x 2x 2x 1373x 1373x 243x 243x 243x 11322x 11322x | 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;
}
} |