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 29991x 29991x 29991x 1x 15021x 15021x 15021x 15021x 15021x 15021x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 59219x 15021x 15021x 14967x 14967x 15021x 15021x 264x 264x 15021x 15021x 279x 279x 279x 279x 15021x 15021x 386x 80x 80x 306x 386x 306x 306x 386x 318x 318x 306x 306x 15021x 15021x | 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;
}
} |