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 23508x 23508x 23508x 1x 11763x 11763x 11763x 11763x 11763x 11763x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 46313x 11763x 11763x 11739x 11739x 11763x 11763x 253x 253x 11763x 11763x 265x 265x 265x 265x 11763x 11763x 358x 79x 79x 279x 358x 279x 279x 358x 290x 290x 279x 279x 11763x 11763x | 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;
}
} |