All files / src/rules line_length.ts

92.18% Statements 59/64
84.61% Branches 11/13
100% Functions 6/6
92.18% Lines 59/64

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 641x 1x 1x 1x 1x 1x 23149x 23149x 23149x 23149x 23149x 1x 11575x 11575x 11575x 11575x 11575x 34569x 34569x 34569x 34569x 34569x 34569x 34569x 34569x 34569x 11575x 11575x 11321x 11321x 11575x 11575x 237x 237x 11575x 11575x 250x 250x 250x 250x 250x 250x 2x 2x 250x 250x 250x 1657x 1657x 2x 2x 1657x       1657x 1657x     1657x 250x 250x 11575x 11575x
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;
  public maxIssuesPerFile: number | undefined = 10;
}
 
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;
 
    let max = this.getConfig().maxIssuesPerFile;
    if (max === undefined || max < 1) {
      max = 10;
    }
 
    const array = file.getRawRows();
    for (let rowIndex = 0; rowIndex < array.length; rowIndex++) {
      const row = array[rowIndex].replace("\r", "");
      if (row.length > maxLineLength) {
        const message = `Maximum allowed line length of ${maxLineLength} exceeded, currently ${row.length}`;
        issues.push(Issue.atRow(file, rowIndex + 1, message, this.getMetadata().key, this.conf.severity));
      } else if (row.length > this.conf.length) {
        const message = `Reduce line length to max ${this.conf.length}, currently ${row.length}`;
        issues.push(Issue.atRow(file, rowIndex + 1, message, this.getMetadata().key, this.conf.severity));
      }
 
      if (issues.length >= max) {
        break;
      }
    }
    return issues;
  }
 
}