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 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 365x 365x 365x 80x 80x 285x 365x 295x 64x 64x 372x 372x 372x 372x 372x 372x 372x 372x 372x 372x 372x 372x 102x 102x 372x 64x 64x 64x 64x 64x 64x 64x 64x 64x 64x 64x 295x 285x 285x 285x 1x 1x | import * as Expressions from "../abap/2_statements/expressions";
import * as Statements from "../abap/2_statements/statements";
import * as Structures from "../abap/3_structures/structures";
import {IFile} from "../files/_ifile";
import {Position} from "../position";
import {IObject} from "../objects/_iobject";
import {ABAPObject} from "../objects/_abap_object";
// only methods are reported
export interface ICyclomaticComplexityResult {
file: IFile;
pos: Position;
name: string;
count: number;
}
export class CyclomaticComplexityStats {
public static run(obj: IObject): ICyclomaticComplexityResult[] {
const res: ICyclomaticComplexityResult[] = [];
if (!(obj instanceof ABAPObject)) {
return [];
}
for (const file of obj.getABAPFiles()) {
for (const m of file.getStructure()?.findAllStructures(Structures.Method) || []) {
let count = 0;
for (const s of m.findAllStatementNodes()) {
const type = s.get();
if (type instanceof Statements.Assert
|| type instanceof Statements.Check
|| type instanceof Statements.ElseIf
|| type instanceof Statements.If
|| type instanceof Statements.While
|| type instanceof Statements.Case
|| type instanceof Statements.SelectLoop
|| type instanceof Statements.Catch
|| type instanceof Statements.Cleanup
|| type instanceof Statements.EndAt
|| type instanceof Statements.Loop) {
count += 1;
}
}
const name = m.findDirectStatement(Statements.MethodImplementation)?.findDirectExpression(
Expressions.MethodName)?.getFirstToken().getStr();
res.push({
file,
pos: m.getFirstToken().getStart(),
name: name ? name : "Error!",
count,
});
}
}
return res;
}
} |