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 21979x 21979x 21979x 21979x 1x 10990x 10990x 10990x 10990x 10990x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 32818x 10990x 10990x 10479x 10479x 10990x 10990x 240x 240x 10990x 10990x 254x 254x 254x 254x 3x 3x 251x 254x 1426x 1426x 1423x 1423x 3x 3x 1426x 3x 3x 3x 1426x 1x 1426x 2x 2x 2x 2x 1426x 1426x 251x 251x 251x 10990x 10990x | 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;
}
} |