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 11651x 11651x 11651x 11651x 11651x 34802x 34802x 34802x 34802x 34802x 34802x 34802x 11651x 11651x 11142x 11142x 11651x 11651x 239x 239x 11651x 11651x 246x 246x 11651x 11651x 320x 71x 71x 249x 249x 249x 249x 320x 256x 13x 13x 2x 2x 2x 13x 11x 11x 13x 256x 249x 249x 249x 11651x 11651x | 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;
}
} |