All files / src/rules cds_parser_error.ts

100% Statements 53/53
92.85% Branches 13/14
100% Functions 6/6
100% Lines 53/53

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 531x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10546x 10546x 10546x 10546x 31480x 31480x 31480x 31480x 31480x 31480x 31480x 31480x 10546x 10546x 10036x 10036x 10546x 10546x 240x 240x 10546x 10546x 243x 243x 10546x 10546x 317x 317x 317x 317x 5x 5x 5x 3x 3x 3x 3x 5x 317x 317x 317x 10546x 10546x
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 {CDSMetadataExtension, DataDefinition} from "../objects";
 
export class CDSParserErrorConf extends BasicRuleConfig {
}
 
export class CDSParserError implements IRule {
  private conf = new CDSParserErrorConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "cds_parser_error",
      title: "CDS Parser Error",
      shortDescription: `CDS parsing`,
      extendedInformation: `Parses CDS and issues parser errors`,
      tags: [RuleTag.Syntax, RuleTag.SingleFile],
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: CDSParserErrorConf) {
    this.conf = conf;
  }
 
  public initialize(_reg: IRegistry): IRule {
    return this;
  }
 
  public run(object: IObject): Issue[] {
    const issues: Issue[] = [];
 
    if ((object.getType() === "DDLS" && object instanceof DataDefinition) ||
        (object.getType() === "DDLX" && object instanceof CDSMetadataExtension)) {
      const hasError = object.hasParserError();
      const file = object.findSourceFile();
      if (hasError === true && file) {
        const empty = file.getRaw().length === 0 ? ", empty file" : "";
        const message = "CDS Parser error" + empty;
        issues.push(Issue.atRow(file, 1, message, this.getMetadata().key, this.getConfig().severity));
      }
    }
 
    return issues;
  }
 
}