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 10995x 10995x 10995x 10995x 10995x 32797x 32797x 32797x 32797x 32797x 32797x 32797x 32797x 32797x 32797x 10995x 10995x 10444x 10444x 10995x 10995x 260x 260x 10995x 10995x 276x 276x 276x 276x 12x 12x 264x 276x 4x 2x 2x 2x 4x 264x 264x 264x 10995x 10995x | 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; } } |