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 11206x 11206x 11206x 11206x 11206x 33424x 33424x 33424x 33424x 33424x 33424x 33424x 33424x 33424x 11206x 11206x 2x 2x 11206x 11206x 10643x 10643x 11206x 11206x 266x 266x 11206x 11206x 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 11206x | 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; } } |