All files / src/rules whitespace_end.ts

100% Statements 55/55
100% Branches 9/9
100% Functions 6/6
100% Lines 55/55

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 551x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 9361x 9361x 9361x 9361x 9361x 27925x 27925x 27925x 27925x 27925x 27925x 27925x 9361x 9361x 2x 2x 9361x 9361x 8898x 8898x 9361x 9361x 216x 216x 9361x 9361x 235x 235x 235x 235x 235x 1609x 2x 2x 2x 2x 2x 2x 2x 1609x 235x 235x 235x 9361x
import {Issue} from "../issue";
import {Position} from "../position";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {EditHelper} from "../edit_helper";
import {IRuleMetadata, RuleTag} from "./_irule";
import {ABAPFile} from "../abap/abap_file";
 
export class WhitespaceEndConf extends BasicRuleConfig {
}
 
export class WhitespaceEnd extends ABAPRule {
 
  private conf = new WhitespaceEndConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "whitespace_end",
      title: "Whitespace at end of line",
      shortDescription: `Checks for redundant whitespace at the end of each line.`,
      tags: [RuleTag.Whitespace, RuleTag.Quickfix, RuleTag.SingleFile],
    };
  }
 
  private getMessage(): string {
    return "Remove whitespace at end of line";
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: WhitespaceEndConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile) {
    const issues: Issue[] = [];
 
    const rows = file.getRawRows();
 
    for (let i = 0; i < rows.length; i++) {
      if (rows[i].endsWith(" ") || rows[i].endsWith(" \r")) {
        const match = / +\r?$/.exec(rows[i]);
        const start = new Position(i + 1, match!.index + 1);
        const end = new Position(i + 1, rows[i].length + 1);
        const fix = EditHelper.deleteRange(file, start, end);
        const issue = Issue.atRange(file, start, end, this.getMessage(), this.getMetadata().key, this.conf.severity, fix);
        issues.push(issue);
      }
    }
 
    return issues;
  }
}