All files / src/rules allowed_object_naming.ts

98.33% Statements 59/60
93.75% Branches 15/16
100% Functions 6/6
98.33% Lines 59/60

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 611x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 14655x 14655x 14655x 14655x 43747x 43747x 43747x 43747x 43747x 43747x 43747x 14655x 14655x 264x 264x 14655x 14655x 14064x 14064x 14655x 14655x 264x 264x 14655x 14655x 391x 391x 391x 391x 391x 1x 391x   390x 35x 5x 5x 390x 2x 2x 391x 391x 8x 8x 383x 383x 383x 14655x 14655x  
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";
 
const NAME_REGEX = /^(\/[A-Z_\d]{3,8}\/)?[A-Z_\d<> ]+$/i;
 
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, RuleTag.Syntax],
    };
  }
 
  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, allowed is " + allowed.maxLength;
    } 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, expected to match " + allowed.customRegex.toString();
      }
    } else if (name.match(NAME_REGEX) === null) {
      message = "Name not allowed";
    }
 
    if (message.length > 0) {
      return [Issue.atRow(obj.getFiles()[0], 1, message, this.getMetadata().key, this.conf.severity)];
    }
 
    return [];
  }
 
}