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 10423x 10423x 10423x 10423x 10423x 31098x 31098x 31098x 31098x 31098x 31098x 31098x 31098x 31098x 31098x 10423x 10423x 9906x 9906x 10423x 10423x 243x 243x 10423x 10423x 260x 260x 260x 260x 12x 12x 248x 260x 3x 2x 2x 2x 3x 248x 248x 248x 10423x 10423x | 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; } } |