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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 22907x 22907x 22907x 22907x 22907x 22907x 22907x 22907x 1x 11454x 11454x 11454x 11454x 11454x 34263x 34263x 34263x 34263x 34263x 34263x 34263x 34263x 34263x 34263x 34263x 11454x 11454x 48x 48x 48x 48x 11454x 11454x 10927x 10927x 11454x 11454x 249x 249x 11454x 11454x 286x 286x 1x 1x 286x 286x 286x 286x 142x 45x 45x 97x 97x 97x 97x 142x 7x 142x 6x 90x 84x 84x 142x 97x 97x 142x 48x 48x 48x 48x 48x 48x 48x 142x 286x 286x 11454x 11454x | import {Issue} from "../issue";
import {ABAPRule} from "./_abap_rule";
import {NamingRuleConfig} from "./_naming_rule_config";
import {NameValidator} from "../utils/name_validator";
import {RuleTag} from "./_irule";
import {ABAPObject} from "../objects/_abap_object";
import {DDIC} from "../ddic";
import {ABAPFile} from "../abap/abap_file";
export class LocalClassNamingConf extends NamingRuleConfig {
/** The pattern for local class names */
public local: string = "^LCL_.+$";
/** The pattern for local exception names */
public exception: string = "^LCX_.+$";
/** The pattern for local test class names */
public test: string = "^LTCL_.+$";
}
export class LocalClassNaming extends ABAPRule {
private conf = new LocalClassNamingConf();
public getMetadata() {
return {
key: "local_class_naming",
title: "Local class naming conventions",
shortDescription: `Allows you to enforce a pattern, such as a prefix, for local class names.`,
tags: [RuleTag.Naming, RuleTag.SingleFile],
badExample: `CLASS helper DEFINITION.
ENDCLASS.`,
goodExample: `CLASS lcl_helper DEFINITION.
ENDCLASS.`,
};
}
private getDescription(expected: string, actual: string): string {
return this.conf.patternKind === "required" ?
"Local class name does not match pattern " + expected + ": " + actual :
"Local class name must not match pattern " + expected + ": " + actual;
}
public getConfig(): LocalClassNamingConf {
return this.conf;
}
public setConfig(conf: LocalClassNamingConf) {
this.conf = conf;
}
public runParsed(file: ABAPFile, obj: ABAPObject): Issue[] {
const issues: Issue[] = [];
if (this.conf.patternKind === undefined) {
this.conf.patternKind = "required";
}
const ddic = new DDIC(this.reg);
for (const classDef of file.getInfo().listClassDefinitions()) {
if (classDef.isGlobal) {
continue;
}
const className = classDef.name;
let expected = "";
if (classDef.isForTesting) {
expected = this.conf.test;
} else if (ddic.isException(classDef, obj)) {
expected = this.conf.exception;
} else {
expected = this.conf.local;
}
if (expected === undefined || expected.length === 0) {
continue;
}
const regex = new RegExp(expected, "i");
if (NameValidator.violatesRule(className, regex, this.conf)) {
issues.push(
Issue.atIdentifier(
classDef.identifier,
this.getDescription(expected, className),
this.getMetadata().key,
this.conf.severity));
}
}
return issues;
}
}
|