All files / src/rules line_break_style.ts

96.96% Statements 64/66
93.33% Branches 14/15
100% Functions 6/6
96.96% Lines 64/66

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 60 61 62 63 64 65 661x 1x 1x 1x 1x 1x 1x 1x 1x 1x 14685x 14685x 14685x 14685x 128630x 128630x 128630x 128630x 128630x 128630x 128630x 128630x 128630x 128630x 14685x 14685x 273x 273x 14685x 14685x 14120x 14120x 14685x 14685x 264x 264x 14685x 14685x 370x 370x 370x 1x 1x 369x 370x 412x 412x 401x     401x 401x 4439x 2x 2x 2x 2x 2x 4439x 401x 412x 369x 369x 369x 14685x 14685x
import {Issue} from "../issue";
import {BasicRuleConfig} from "./_basic_rule_config";
import {IObject} from "../objects/_iobject";
import {IRule, IRuleMetadata, RuleTag} from "./_irule";
import {IRegistry} from "../_iregistry";
import {MIMEObject, WebMIME} from "../objects";
 
export class LineBreakStyleConf extends BasicRuleConfig {
}
 
export class LineBreakStyle implements IRule {
  private conf = new LineBreakStyleConf();
 
  public getMetadata(): IRuleMetadata {
    return {
      key: "line_break_style",
      title: "Makes sure line breaks are consistent",
      shortDescription: `Enforces LF as newlines in ABAP and XML files
 
abapGit does not work with CRLF`,
      extendedInformation: `SMIM and W3MI files are not checked.`,
      tags: [RuleTag.Whitespace, RuleTag.SingleFile],
    };
  }
 
  public initialize(_reg: IRegistry) {
    return this;
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: LineBreakStyleConf) {
    this.conf = conf;
  }
 
  public run(obj: IObject): Issue[] {
    const output: Issue[] = [];
 
    if (obj instanceof MIMEObject || obj instanceof WebMIME) {
      return output;
    }
 
    for (const file of obj.getFiles()) {
      const filename = file.getFilename();
      if (filename.endsWith(".abap") || filename.endsWith(".xml")) {
        if (filename.endsWith(".xslt.source.xml")) {
          continue;
        }
        const rows = file.getRawRows();
        for (let i = 0; i < rows.length; i++) {
          if (rows[i].endsWith("\r") === true) {
            const message = "Line contains carriage return";
            const issue = Issue.atRow(file, i + 1, message, this.getMetadata().key, this.conf.severity);
            output.push(issue);
            break; // only one finding per file
          }
        }
      }
    }
 
    return output;
  }
 
}