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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11184x 11184x 11184x 11184x 11184x 44073x 44073x 44073x 44073x 44073x 44073x 44073x 44073x 44073x 44073x 11184x 11184x 10661x 10661x 11184x 11184x 246x 246x 11184x 11184x 271x 271x 271x 271x 12x 12x 259x 271x 3x 2x 2x 2x 3x 259x 259x 259x 11184x 11184x | import * as Statements from "../abap/2_statements/statements";
import * as Expressions from "../abap/2_statements/expressions";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {Issue} from "../issue";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
export class NoExternalFormCallsConf extends BasicRuleConfig {
}
export class NoExternalFormCalls extends ABAPRule {
private conf = new NoExternalFormCallsConf();
public getMetadata(): IRuleMetadata {
return {
key: "no_external_form_calls",
title: "No external FORM calls",
shortDescription: `Detect external form calls`,
badExample: `PERFORM foo IN PROGRAM bar.
PERFORM foo(bar).`,
tags: [RuleTag.SingleFile],
};
}
public getConfig() {
return this.conf;
}
public setConfig(conf: NoExternalFormCallsConf): void {
this.conf = conf;
}
public runParsed(file: ABAPFile) {
const issues: Issue[] = [];
const stru = file.getStructure();
if (stru === undefined) {
return issues; // parser error
}
for (const p of stru.findAllStatements(Statements.Perform)) {
if (p.findDirectExpression(Expressions.IncludeName) || p.findDirectTokenByText("PROGRAM")) {
const message = "No external FORM calls";
issues.push(Issue.atStatement(file, p, message, this.getMetadata().key, this.conf.severity));
}
}
return issues;
}
} |