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 11206x 11206x 11206x 11206x 11206x 33444x 33444x 33444x 33444x 33444x 33444x 33444x 33444x 33444x 33444x 11206x 11206x 10642x 10642x 11206x 11206x 266x 266x 11206x 11206x 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 11206x 11206x | 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; } } |