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 7653x 7653x 7653x 7653x 7653x 22816x 22816x 22816x 22816x 22816x 22816x 22816x 7653x 7653x 2x 2x 7653x 7653x 7346x 7346x 7653x 7653x 139x 139x 7653x 7653x 153x 153x 153x 153x 153x 1017x 2x 2x 2x 2x 2x 2x 2x 1017x 153x 153x 153x 7653x
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;
  }
}