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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11712x 11712x 11712x 11712x 11712x 34999x 34999x 34999x 34999x 34999x 34999x 34999x 11712x 11712x 11175x 11175x 11712x 11712x 253x 253x 11712x 11712x 260x 260x 11712x 11712x 348x 79x 79x 269x 269x 269x 269x 348x 278x 16x 16x 2x 2x 2x 16x 14x 14x 16x 278x 269x 269x 269x 11712x 11712x | import {Issue} from "../issue";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IObject} from "../objects/_iobject";
import {IRegistry} from "../_iregistry";
import {BasicRuleConfig} from "./_basic_rule_config";
import {ABAPObject} from "../objects/_abap_object";
export class IdenticalFormNamesConf extends BasicRuleConfig {
}
// todo: deprecation candidate? this is/should be handled by the syntax check?
export class IdenticalFormNames implements IRule {
private conf = new IdenticalFormNamesConf();
public getMetadata(): IRuleMetadata {
return {
key: "identical_form_names",
title: "Identical FORM names",
shortDescription: `Detects identically named FORMs`,
tags: [RuleTag.Syntax],
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: IdenticalFormNamesConf) {
this.conf = conf;
}
public initialize(_reg: IRegistry) {
return this;
}
public run(obj: IObject): Issue[] {
if (!(obj instanceof ABAPObject)) {
return [];
}
const ret: Issue[] = [];
const found: string[] = [];
for (const file of obj.getABAPFiles()) {
for (const form of file.getInfo().listFormDefinitions()) {
const name = form.name.toUpperCase();
if (found.indexOf(name) >= 0) {
const message = "Identical FORM Names: \"" + name + "\"";
const issue = Issue.atIdentifier(form.identifier, message, this.getMetadata().key, this.conf.severity);
ret.push(issue);
} else {
found.push(name);
}
}
}
return ret;
}
} |