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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 11120x 11120x 11120x 11120x 11120x 33166x 33166x 33166x 33166x 33166x 33166x 33166x 33166x 33166x 11120x 11120x 2x 2x 11120x 11120x 10557x 10557x 11120x 11120x 266x 266x 11120x 11120x 282x 282x 282x 1600x 1600x 1600x 1600x 1427x 1427x 173x 173x 173x 173x 173x 173x 1600x 1140x 1140x 1140x 1140x 1140x 2x 2x 2x 2x 2x 2x 1140x 173x 282x 282x 282x 11120x | import {Issue} from "../issue"; import {ABAPRule} from "./_abap_rule"; import {BasicRuleConfig} from "./_basic_rule_config"; import {Position} from "../position"; import {EditHelper} from "../edit_helper"; import {IRuleMetadata, RuleTag} from "./_irule"; import {ABAPFile} from "../abap/abap_file"; import {Comment, NativeSQL} from "../abap/2_statements/statements/_statement"; export class ColonMissingSpaceConf extends BasicRuleConfig { } export class ColonMissingSpace extends ABAPRule { private conf = new ColonMissingSpaceConf(); public getMetadata(): IRuleMetadata { return { key: "colon_missing_space", title: "Colon missing space", shortDescription: `Checks for missing spaces after colons in chained statements.`, tags: [RuleTag.Whitespace, RuleTag.Quickfix, RuleTag.SingleFile], badExample: `WRITE:hello, world.`, goodExample: `WRITE: hello, world.`, }; } private getMessage(): string { return "Missing space after the colon"; } public getConfig() { return this.conf; } public setConfig(conf: ColonMissingSpaceConf) { this.conf = conf; } public runParsed(file: ABAPFile) { const issues: Issue[] = []; for (const statement of file.getStatements()) { const colon = statement.getColon(); if (colon === undefined || statement.get() instanceof NativeSQL || statement.get() instanceof Comment) { continue; } // todo: this can be more smart, performance wise const tokens = [...statement.getTokens()]; tokens.push(colon); tokens.sort((a, b) => a.getStart().isAfter(b.getStart()) ? 1 : -1 ); for (let i = 0; i < tokens.length; i++) { const token = tokens[i]; if (token.getStr() === ":" && tokens[i + 1] !== undefined && tokens[i + 1].getRow() === token.getRow() && tokens[i + 1].getCol() === token.getCol() + 1) { const start = token.getStart(); const end = new Position(start.getRow(), start.getCol() + 1); const fix = EditHelper.insertAt(file, end, " "); const issue = Issue.atRange(file, start, end, this.getMessage(), this.getMetadata().key, this.conf.severity, fix); issues.push(issue); } } } return issues; } } |