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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10982x 10982x 10982x 10982x 10982x 32758x 32758x 32758x 32758x 32758x 32758x 32758x 10982x 10982x 10431x 10431x 10982x 10982x 260x 260x 10982x 10982x 274x 274x 274x 274x 12x 12x 262x 262x 262x 262x 262x 274x 13x 13x 13x 13x 13x 12x 12x 13x 12x 12x 13x 11x 11x 13x 11x 11x 13x 11x 11x 13x 13x 2x 2x 2x 13x 262x 262x 262x 10982x 10982x | import * as Statements from "../abap/2_statements/statements"; import * as Structures from "../abap/3_structures/structures"; 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"; import {StatementNode} from "../abap/nodes/statement_node"; export class DbOperationInLoopConf extends BasicRuleConfig { } export class DbOperationInLoop extends ABAPRule { private conf = new DbOperationInLoopConf(); public getMetadata(): IRuleMetadata { return { key: "db_operation_in_loop", title: "Database operation in loop", shortDescription: `Database operation in LOOP/DO/WHILE`, tags: [RuleTag.SingleFile, RuleTag.Performance], }; } public getConfig() { return this.conf; } public setConfig(conf: DbOperationInLoopConf): void { this.conf = conf; } public runParsed(file: ABAPFile) { const issues: Issue[] = []; const stru = file.getStructure(); if (stru === undefined) { return issues; } const loops = stru.findAllStructures(Structures.Loop); loops.push(...stru.findAllStructures(Structures.Do)); loops.push(...stru.findAllStructures(Structures.While)); for (const l of loops) { let found: StatementNode | undefined = undefined; if (found === undefined) { found = l.findFirstStatement(Statements.Select); } if (found === undefined) { found = l.findFirstStatement(Statements.SelectLoop); } if (found === undefined) { found = l.findFirstStatement(Statements.InsertDatabase); } if (found === undefined) { found = l.findFirstStatement(Statements.DeleteDatabase); } if (found === undefined) { found = l.findFirstStatement(Statements.UpdateDatabase); } if (found === undefined) { found = l.findFirstStatement(Statements.ModifyDatabase); } if (found) { const message = "Database operation in loop"; issues.push(Issue.atStatement(file, found, message, this.getMetadata().key, this.conf.severity)); } } return issues; } } |