All files / src/rules colon_missing_space.ts

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

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 601x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 10272x 10272x 10272x 10272x 10272x 30646x 30646x 30646x 30646x 30646x 30646x 30646x 30646x 30646x 10272x 10272x 2x 2x 10272x 10272x 9761x 9761x 10272x 10272x 240x 240x 10272x 10272x 255x 255x 255x 255x 255x 5792x 5792x 5792x 5792x 5792x 2x 2x 2x 2x 2x 2x 5792x 255x 255x 255x 10272x
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],
      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[] = [];
 
    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;
  }
}