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 14682x 14682x 14682x 14682x 14682x 142750x 142750x 142750x 142750x 142750x 142750x 142750x 14682x 14682x 14120x 14120x 14682x 14682x 264x 264x 14682x 14682x 271x 271x 14682x 14682x 368x 80x 80x 288x 288x 288x 288x 368x 298x 17x 17x 2x 2x 2x 17x 15x 15x 17x 298x 288x 288x 288x 14682x 14682x | 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;
}
} |