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 55 56 57 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10968x 10968x 10968x 10968x 32705x 32705x 32705x 32705x 32705x 32705x 32705x 32705x 10968x 10968x 2x 2x 10968x 10968x 10417x 10417x 10968x 10968x 258x 258x 10968x 10968x 273x 273x 273x 273x 12x 12x 261x 261x 261x 273x 6x 6x 6x 2x 2x 2x 6x 261x 261x 261x 10968x | import {Issue} from "../issue"; import {ABAPRule} from "./_abap_rule"; import {Try, Catch, Cleanup} from "../abap/3_structures/structures"; import {BasicRuleConfig} from "./_basic_rule_config"; import {IRuleMetadata, RuleTag} from "./_irule"; import {ABAPFile} from "../abap/abap_file"; export class TryWithoutCatchConf extends BasicRuleConfig { } export class TryWithoutCatch extends ABAPRule { private conf = new TryWithoutCatchConf(); public getMetadata(): IRuleMetadata { return { key: "try_without_catch", title: "TRY without CATCH", shortDescription: `Checks for TRY blocks without a CATCH and CLEANUP block`, badExample: `TRY.\n WRITE 'hello world'.\nENDTRY.`, tags: [RuleTag.SingleFile], }; } private getMessage(): string { return "A TRY block must have a corresponding CATCH or CLEANUP block."; } public getConfig() { return this.conf; } public setConfig(conf: TryWithoutCatchConf) { this.conf = conf; } public runParsed(file: ABAPFile) { const issues: Issue[] = []; const stru = file.getStructure(); if (stru === undefined) { return []; } const tries = stru.findAllStructures(Try); for (const t of tries) { const clean = t.findDirectStructures(Cleanup); const c = t.findDirectStructures(Catch); if (c.length === 0 && clean.length === 0) { const issue = Issue.atToken(file, t.getFirstToken(), this.getMessage(), this.getMetadata().key, this.conf.severity); issues.push(issue); } } return issues; } } |