All files / src/rules line_length.ts

98.18% Statements 54/55
90.91% Branches 10/11
100% Functions 6/6
98.18% Lines 54/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 15307x 15307x 15307x 15307x 1x 7654x 7654x 7654x 7654x 7654x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 22817x 7654x 7654x 7346x 7346x 7654x 7654x 140x 140x 7654x 7654x 153x 153x 153x 153x 153x 1015x 1015x 1015x 2x 1015x   1013x 1013x 1013x 2x 153x 153x 153x 7654x 7654x
import {ABAPFile} from "../abap/abap_file";
import {Issue} from "../issue";
import {ABAPRule} from "./_abap_rule";
import {BasicRuleConfig} from "./_basic_rule_config";
import {RuleTag} from "./_irule";
 
export class LineLengthConf extends BasicRuleConfig {
  /** Maximum line length in characters, trailing whitespace ignored */
  public length: number = 120;
}
 
export class LineLength extends ABAPRule {
 
  private conf = new LineLengthConf();
 
  public getMetadata() {
    return {
      key: "line_length",
      title: "Line length",
      shortDescription: `Detects lines exceeding the provided maximum length.`,
      extendedInformation: `https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#stick-to-a-reasonable-line-length
https://docs.abapopenchecks.org/checks/04/`,
      tags: [RuleTag.Styleguide, RuleTag.SingleFile],
    };
  }
 
  public getConfig() {
    return this.conf;
  }
 
  public setConfig(conf: LineLengthConf) {
    this.conf = conf;
  }
 
  public runParsed(file: ABAPFile) {
    const issues: Issue[] = [];
    // maximum line length in abap files
    const maxLineLength: number = 255;
 
    file.getRawRows().forEach((row, rowIndex) => {
      row = row.replace("\r", "");
      let message = "";
      if (row.length > maxLineLength) {
        message = `Maximum allowed line length of ${maxLineLength} exceeded, currently  ${row.length}`;
      } else if (row.length > this.conf.length) {
        message = `Reduce line length to max ${this.conf.length}, currently ${row.length}`;
      } else {
        return;
      }
      issues.push(Issue.atRow(file, rowIndex + 1, message, this.getMetadata().key, this.conf.severity));
    });
    return issues;
  }
 
}