All files / src/rules allowed_object_naming.ts

94.82% Statements 55/58
87.5% Branches 14/16
100% Functions 6/6
94.82% Lines 55/58

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 591x 1x 1x 1x 1x 1x 1x 1x 1x 10153x 10153x 10153x 10153x 30226x 30226x 30226x 30226x 30226x 30226x 30226x 10153x 10153x 238x 238x 10153x 10153x 9625x 9625x 10153x 10153x 238x 238x 10153x 10153x 324x 324x 324x 324x 324x 1x 324x   323x 3x     323x 2x 2x 324x 324x 3x 3x 321x 321x 321x 10153x 10153x  
import {Issue} from "../issue";
import {IObject} from "../objects/_iobject";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRegistry} from "../_iregistry";
 
export class AllowedObjectNamingConf extends BasicRuleConfig {
}
 
export class AllowedObjectNaming implements IRule {
  private conf = new AllowedObjectNamingConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "allowed_object_naming",
      title: "Allowed object naming",
      shortDescription: `Enforces basic name length and namespace restrictions, see note SAP 104010`,
      tags: [RuleTag.Naming, RuleTag.SingleFile],
    };
  }
 
  public initialize(_reg: IRegistry) {
    return this;
  }
 
  public getConfig(): AllowedObjectNamingConf {
    return this.conf;
  }
 
  public setConfig(conf: AllowedObjectNamingConf) {
    this.conf = conf;
  }
 
  public run(obj: IObject): Issue[] {
    const allowed = obj.getAllowedNaming();
    const name = obj.getName();
    let message = "";
 
    if (name.length > allowed.maxLength) {
      message = "Name exceeds max length";
    } else if (allowed.allowNamespace === false && name.indexOf("/") >= 0) {
      message = "Namespace not allowed for object type";
    } else if (allowed.customRegex !== undefined) {
      if (name.match(allowed.customRegex) === null) {
        message = "Name not allowed";
      }
    } else if (name.match(/^(\/[A-Z_\d]{3,8}\/)?[A-Z_\d<> ]+$/i) === null) {
      message = "Name not allowed";
    }
 
    if (message.length > 0) {
      return [Issue.atRow(obj.getFiles()[0], 1, message, this.getMetadata().key, this.conf.severity)];
    }
 
    return [];
  }
 
}