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 11120x 11120x 11120x 11120x 33153x 33153x 33153x 33153x 33153x 33153x 33153x 33153x 11120x 11120x 2x 2x 11120x 11120x 10553x 10553x 11120x 11120x 266x 266x 11120x 11120x 281x 281x 281x 281x 12x 12x 269x 269x 269x 281x 6x 6x 6x 2x 2x 2x 6x 269x 269x 269x 11120x | 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; } } |