All files / src/rules identical_form_names.ts

100% Statements 24/24
100% Branches 4/4
100% Functions 6/6
100% Lines 24/24

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 601x 1x     1x 1x   1x     1x   7265x     21661x                 7008x       114x       121x       139x 8x     131x 131x   131x 135x 13x 13x 2x 2x 2x   11x         131x      
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 {
}
 
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;
  }
 
}