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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 23305x 23305x 23305x 23305x 23305x 23305x 23305x 23305x 1x 11653x 11653x 11653x 11653x 11653x 34850x 34850x 34850x 34850x 34850x 34850x 34850x 11653x 11653x 48x 48x 48x 48x 11653x 11653x 11142x 11142x 11653x 11653x 241x 241x 11653x 11653x 269x 269x 1x 1x 269x 269x 269x 269x 139x 45x 45x 94x 94x 94x 94x 139x 7x 139x 6x 87x 81x 81x 139x 94x 94x 139x 48x 48x 48x 48x 48x 48x 48x 139x 269x 269x 11653x 11653x | 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],
};
}
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;
}
} |