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 8922x 8922x 8922x 8922x 8922x 35095x 35095x 35095x 35095x 35095x 35095x 35095x 8922x 8922x 2x 2x 8922x 8922x 8485x 8485x 8922x 8922x 202x 202x 8922x 8922x 217x 217x 217x 217x 217x 1448x 2x 2x 2x 2x 2x 2x 2x 1448x 217x 217x 217x 8922x
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;
  }
}