-
Notifications
You must be signed in to change notification settings - Fork 70
/
space_before_colon.ts
66 lines (54 loc) · 2.12 KB
/
space_before_colon.ts
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
import {Position} from "../position";
import {ABAPFile} from "../abap/abap_file";
import {EditHelper} from "../edit_helper";
import {Issue} from "../issue";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IRuleMetadata, RuleTag} from "./_irule";
export class SpaceBeforeColonConf extends BasicRuleConfig {
}
export class SpaceBeforeColon extends ABAPRule {
private conf = new SpaceBeforeColonConf();
public getMetadata(): IRuleMetadata {
return {
key: "space_before_colon",
title: "Space before colon",
shortDescription: `Checks that there are no spaces in front of colons in chained statements.`,
extendedInformation: `https://docs.abapopenchecks.org/checks/80/`,
tags: [RuleTag.Whitespace, RuleTag.SingleFile, RuleTag.Quickfix],
badExample: `DATA : foo TYPE string.`,
goodExample: `DATA: foo TYPE string.`,
};
}
private getMessage(): string {
return "Remove space before colon";
}
public getConfig() {
return this.conf;
}
public setConfig(conf: SpaceBeforeColonConf) {
this.conf = conf;
}
public runParsed(file: ABAPFile) {
const issues: Issue[] = [];
let prev = file.getTokens()[0];
for (const token of file.getTokens()) {
if (token.getStr() === ":" && !prev) {
const issue = Issue.atToken(file, token, this.getMessage(), this.getMetadata().key, this.conf.severity);
issues.push(issue);
} else if (token.getStr() === ":"
&& prev.getRow() === token.getRow()
&& prev.getCol() + prev.getStr().length < token.getCol()) {
const start = new Position(token.getRow(), prev.getEnd().getCol());
const end = new Position(token.getRow(), token.getStart().getCol());
const fix = EditHelper.deleteRange(file, start, end);
const issue = Issue.atRowRange(file, start.getRow(),
start.getCol(), end.getCol(),
this.getMessage(), this.getMetadata().key, this.conf.severity, fix);
issues.push(issue);
}
prev = token;
}
return issues;
}
}