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 10892x 10892x 10892x 10892x 10892x 32490x 32490x 32490x 32490x 32490x 32490x 32490x 10892x 10892x 10345x 10345x 10892x 10892x 258x 258x 10892x 10892x 265x 265x 10892x 10892x 331x 63x 63x 268x 268x 268x 268x 331x 275x 48x 48x 2x 2x 2x 48x 46x 46x 48x 275x 268x 268x 268x 10892x 10892x | 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; } } |