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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 23338x 23338x 23338x 1x 11678x 11678x 11678x 11678x 11678x 11678x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 34835x 11678x 11678x 11654x 11654x 11678x 11678x 239x 239x 11678x 11678x 251x 251x 251x 251x 11678x 11678x 330x 71x 71x 259x 330x 259x 259x 330x 268x 268x 259x 259x 11678x 11678x | import {IRegistry} from "../_iregistry";
import {BasicRuleConfig} from "./_basic_rule_config";
import {ABAPObject} from "../objects/_abap_object";
import {IncludeGraph} from "../utils/include_graph";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {Issue} from "../issue";
import {IObject} from "../objects/_iobject";
import {Program} from "../objects";
import {Severity} from "../severity";
export class CheckIncludeConf extends BasicRuleConfig {
public allowUnused?: boolean = false;
}
export class CheckInclude implements IRule {
private reg: IRegistry;
private conf = new CheckIncludeConf();
private graph: IncludeGraph;
public getMetadata(): IRuleMetadata {
return {
key: "check_include",
title: "Check INCLUDEs",
shortDescription: `Checks INCLUDE statements`,
extendedInformation: `
* Reports unused includes
* Errors if the includes are not found
* Error if including a main program
* Skips ZX* includes`,
tags: [RuleTag.Syntax],
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: CheckIncludeConf) {
this.conf = conf;
}
public initialize(reg: IRegistry) {
this.reg = reg;
this.graph = new IncludeGraph(this.reg, this.getConfig().severity || Severity.Error, this.getConfig().allowUnused || false);
return this;
}
public run(obj: IObject): readonly Issue[] {
if (!(obj instanceof ABAPObject)) {
return [];
}
if (obj instanceof Program && obj.isInclude() === true && obj.getName().startsWith("ZX")) {
return [];
}
let ret: Issue[] = [];
for (const file of obj.getABAPFiles()) {
ret = ret.concat(this.graph.getIssuesFile(file));
}
return ret;
}
} |