All files / src/rules colon_missing_space.ts

100% Statements 58/58
100% Branches 11/11
100% Functions 6/6
100% Lines 58/58

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 581x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 9361x 9361x 9361x 9361x 9361x 27924x 27924x 27924x 27924x 27924x 27924x 27924x 9361x 9361x 1x 1x 9361x 9361x 8898x 8898x 9361x 9361x 216x 216x 9361x 9361x 234x 234x 234x 234x 234x 5365x 5365x 5365x 5365x 5365x 1x 1x 1x 1x 1x 1x 5365x 234x 234x 234x 9361x
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";
 
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],
    };
  }
 
  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[] = [];
 
    const tokens = file.getTokens();
 
    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;
  }
}