All files / src/rules cds_legacy_view.ts

97.18% Statements 69/71
85.71% Branches 12/14
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 10505x 10505x 10505x 10505x 10505x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 31328x 10505x 10505x 9971x 9971x 10505x 10505x 251x 251x 10505x 10505x 254x 254x 254x 10505x 10505x 320x 320x 320x 320x     320x 320x 316x 316x 4x 4x 4x 4x 1x 1x 4x 1x 1x 1x 1x 1x 4x 3x 3x 3x 10505x 10505x
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";
 
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") {
      return [];
    }
 
    if (o instanceof DataDefinition) {
      const tree = o.getTree();
      if (tree === undefined) {
        return []; // parser error
      }
      if (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;
  }
 
}