All files / src/utils form_length_stats.ts

93.1% Statements 54/58
87.5% Branches 14/16
100% Functions 2/2
93.1% Lines 54/58

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 581x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 321x 321x 321x 321x 321x 321x 321x 62x 62x 259x 321x 266x 1686x 1686x 33x 33x 33x 33x 1686x 33x 33x 33x     33x 1653x 1620x 1620x 123x 123x 1686x 266x 259x 259x 259x 1x 1x 33x 33x 33x 33x 33x     33x 33x 1x
import * as Statements from "../abap/2_statements/statements";
import {Position} from "../position";
import {FormName} from "../abap/2_statements/expressions";
import {StatementNode} from "../abap/nodes";
import {IObject} from "../objects/_iobject";
import {ABAPObject} from "../objects/_abap_object";
import {Empty, Comment} from "../abap/2_statements/statements/_statement";
import {IMethodLengthResult} from "./method_length_stats";
 
export class FormLengthStats {
  public static run(obj: IObject): IMethodLengthResult[] {
    const res: IMethodLengthResult[] = [];
    let pos: Position | undefined = undefined;
    let name: string = "";
    let count = 0;
    let form: boolean = false;
 
    if (!(obj instanceof ABAPObject)) {
      return [];
    }
 
    for (const file of obj.getABAPFiles()) {
      for (const stat of file.getStatements()) {
        const type = stat.get();
        if (type instanceof Statements.Form) {
          pos = stat.getFirstToken().getStart();
          name = this.findName(stat);
          form = true;
          count = 0;
        } else if (type instanceof Statements.EndForm) {
          if (pos) {
            res.push({name: name, className: "", count, file, pos});
          } else {
            continue;
          }
          form = false;
        } else if (form === true
            && !(type instanceof Comment)
            && !(type instanceof Empty)) {
          count = count + 1;
        }
      }
    }
 
    return res;
  }
 
  private static findName(stat: StatementNode): string {
    let name: string = "";
    const nameExpr = stat.findFirstExpression(FormName);
    if (nameExpr) {
      name = nameExpr.getFirstToken().getStr();
    } else {
      throw new Error("FormLength, findName, expected FormName");
    }
    return name;
  }
}