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 71 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11715x 11715x 11715x 11715x 11715x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 57347x 11715x 11715x 11176x 11176x 11715x 11715x 253x 253x 11715x 11715x 257x 257x 257x 11715x 11715x 345x 345x 345x 345x 345x 345x 337x 337x 8x 8x 345x 2x 2x 6x 345x 1x 1x 1x 1x 1x 6x 6x 6x 11715x 11715x | import {Issue} from "../issue";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IObject} from "../objects/_iobject";
import {IRegistry} from "../_iregistry";
import {LanguageVersion, Release, releaseAtLeast} 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 (!releaseAtLeast(this.reg.getConfig().getRelease(), Release.v755)
&& this.reg.getConfig().getLanguageVersion() !== LanguageVersion.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;
}
} |