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 11195x 11195x 11195x 11195x 11195x 33391x 33391x 33391x 33391x 33391x 33391x 33391x 11195x 11195x 10632x 10632x 11195x 11195x 266x 266x 11195x 11195x 273x 273x 11195x 11195x 339x 63x 63x 276x 276x 276x 276x 339x 283x 50x 50x 2x 2x 2x 50x 48x 48x 50x 283x 276x 276x 276x 11195x 11195x | 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; } } |