All files / src/rules line_length.ts

98.18% Statements 54/55
90.9% 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 17845x 17845x 17845x 17845x 1x 8923x 8923x 8923x 8923x 8923x 26611x 26611x 26611x 26611x 26611x 26611x 26611x 26611x 26611x 8923x 8923x 8485x 8485x 8923x 8923x 203x 203x 8923x 8923x 217x 217x 217x 217x 217x 1446x 1446x 1446x 2x 1446x   1444x 1444x 1444x 2x 217x 217x 217x 8923x 8923x
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;
  }
 
}