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 10894x 10894x 10894x 10894x 10894x 32496x 32496x 32496x 32496x 32496x 32496x 32496x 32496x 32496x 32496x 10894x 10894x 10347x 10347x 10894x 10894x 258x 258x 10894x 10894x 274x 274x 274x 274x 12x 12x 262x 274x 4x 2x 2x 2x 4x 262x 262x 262x 10894x 10894x | 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; } } |