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 11587x 11587x 11587x 11587x 11587x 34610x 34610x 34610x 34610x 34610x 34610x 34610x 34610x 34610x 11587x 11587x 2x 2x 11587x 11587x 11078x 11078x 11587x 11587x 239x 239x 11587x 11587x 255x 255x 255x 1448x 1448x 1448x 1448x 1277x 1277x 171x 171x 171x 171x 171x 171x 1448x 1138x 1138x 1138x 1138x 1138x 2x 2x 2x 2x 2x 2x 1138x 171x 255x 255x 255x 11587x | 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;
}
} |