All files / src/rules line_length.ts

94.44% Statements 51/54
90% Branches 9/10
100% Functions 6/6
94.44% Lines 51/54

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 541x 1x 1x 1x 1x 1x 20847x 20847x 20847x 20847x 1x 10424x 10424x 10424x 10424x 10424x 31099x 31099x 31099x 31099x 31099x 31099x 31099x 31099x 31099x 10424x 10424x 9906x 9906x 10424x 10424x 244x 244x 10424x 10424x 258x 258x 258x 258x 258x 258x 1747x 1747x 2x 2x 1747x       1747x 258x 258x 10424x 10424x
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;
 
    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));
      }
    }
    return issues;
  }
 
}