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 79 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11121x 11121x 11121x 11121x 11121x 33189x 33189x 33189x 33189x 33189x 33189x 33189x 33189x 33189x 33189x 11121x 11121x 10557x 10557x 11121x 11121x 266x 266x 11121x 11121x 287x 287x 287x 287x 1601x 1601x 1422x 1422x 179x 179x 179x 1601x 2x 2x 2x 179x 179x 179x 1601x 3x 3x 3x 179x 1601x 1601x 1601x 110x 1601x 44x 44x 25x 25x 25x 25x 25x 25x 287x 287x 287x 11121x 11121x | 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"; import {StatementNode} from "../abap/nodes"; 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: StatementNode | undefined = 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; } } |