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 11121x 11121x 11121x 11121x 11121x 33169x 33169x 33169x 33169x 33169x 33169x 33169x 33169x 33169x 33169x 11121x 11121x 10558x 10558x 11121x 11121x 266x 266x 11121x 11121x 282x 282x 282x 282x 12x 12x 270x 282x 4x 2x 2x 2x 4x 270x 270x 270x 11121x 11121x | 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; } } |