All files / src/rules cds_legacy_view.ts

97.18% Statements 69/71
87.5% Branches 14/16
100% Functions 6/6
97.18% Lines 69/71

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 63 64 65 66 67 68 69 70 711x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11149x 11149x 11149x 11149x 11149x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 33242x 11149x 11149x 10584x 10584x 11149x 11149x 266x 266x 11149x 11149x 270x 270x 270x 11149x 11149x 336x 336x 336x 336x     336x 336x 330x 330x 6x 6x 336x 2x 2x 4x 336x 1x 1x 1x 1x 1x 4x 4x 4x 11149x 11149x
import {Issue} from "../issue";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IObject} from "../objects/_iobject";
import {IRegistry} from "../_iregistry";
import {Version} from "../version";
import {BasicRuleConfig} from "./_basic_rule_config";
import {DataDefinition} from "../objects";
import {CDSDefineView} from "../cds/expressions";
 
export class CDSLegacyViewConf extends BasicRuleConfig {
}
 
export class CDSLegacyView implements IRule {
  private conf = new CDSLegacyViewConf();
  private reg: IRegistry;
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "cds_legacy_view",
      title: "CDS Legacy View",
      shortDescription: `Identify CDS Legacy Views`,
      extendedInformation: `Use DEFINE VIEW ENTITY instead of DEFINE VIEW
 
https://blogs.sap.com/2021/10/16/a-new-generation-of-cds-views-how-to-migrate-your-cds-views-to-cds-view-entities/
 
v755 and up`,
      tags: [RuleTag.SingleFile, RuleTag.Upport],
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: CDSLegacyViewConf) {
    this.conf = conf;
  }
 
  public initialize(reg: IRegistry): IRule {
    this.reg = reg;
    return this;
  }
 
  public run(o: IObject): Issue[] {
    const issues: Issue[] = [];
 
    if (this.reg.getConfig().getVersion() < Version.v755
        && this.reg.getConfig().getVersion() !== Version.Cloud) {
      return [];
    }
 
    if (o.getType() !== "DDLS" || !(o instanceof DataDefinition)) {
      return [];
    }
 
    const tree = o.getTree();
    if (tree === undefined) {
      return []; // parser error
    }
 
    if (tree.get() instanceof CDSDefineView && tree.findDirectTokenByText("ENTITY") === undefined) {
      const file = o.findSourceFile();
      if (file) {
        issues.push(Issue.atRow(file, 1, "CDS Legacy View", this.getMetadata().key, this.getConfig().severity));
      }
    }
 
    return issues;
  }
 
}