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 77 78 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10022x 10022x 10022x 10022x 10022x 29917x 29917x 29917x 29917x 29917x 29917x 29917x 29917x 29917x 29917x 10022x 10022x 9530x 9530x 10022x 10022x 230x 230x 10022x 10022x 251x 251x 251x 251x 1416x 1416x 1261x 1261x 155x 155x 155x 1416x 2x 2x 2x 155x 155x 155x 1416x 2x 2x 2x 155x 1416x 1416x 1416x 95x 1416x 38x 38x 22x 22x 22x 22x 22x 22x 251x 251x 251x 10022x 10022x | import {Issue} from "../issue"; import {ABAPRule} from "./_abap_rule"; import {BasicRuleConfig} from "./_basic_rule_config"; import {IRuleMetadata, RuleTag} from "./_irule"; import {ABAPFile} from "../abap/abap_file"; import {EditHelper} from "../edit_helper"; import {Comment} from "../abap/2_statements/statements/_statement"; export class UnnecessaryChainingConf extends BasicRuleConfig { } export class UnnecessaryChaining extends ABAPRule { private conf = new UnnecessaryChainingConf(); public getMetadata(): IRuleMetadata { return { key: "unnecessary_chaining", title: "Unnecessary Chaining", shortDescription: `Find unnecessary chaining, all statements are checked`, extendedInformation: ``, tags: [RuleTag.SingleFile, RuleTag.Quickfix], badExample: `WRITE: bar.`, goodExample: `WRITE bar.`, }; } public getConfig() { return this.conf; } public setConfig(conf: UnnecessaryChainingConf) { this.conf = conf; } public runParsed(file: ABAPFile) { const issues: Issue[] = []; const statements = file.getStatements(); for (let i = 0; i < statements.length; i++) { const colon = statements[i].getColon(); if (colon === undefined) { continue; } let j = 1; let nextStatement = statements[i + j]; while (nextStatement?.get() instanceof Comment) { j++; nextStatement = statements[i + j]; } j = 1; let prevStatement = statements[i - j]; while (prevStatement?.get() instanceof Comment) { j--; prevStatement = statements[i - j]; } const next = nextStatement?.getColon(); const prev = prevStatement?.getColon(); if (next !== undefined && colon.getStart().equals(next.getStart())) { continue; } else if (prev !== undefined && colon.getStart().equals(prev.getStart())) { continue; } const fix = EditHelper.deleteRange(file, colon.getStart(), colon.getEnd()); const message = "Unnecessary chaining"; const issue = Issue.atToken(file, colon, message, this.getMetadata().key, this.conf.severity, fix); issues.push(issue); } return issues; } } |