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 331x 331x 331x 71x 71x 260x 331x 267x 57x 57x 348x 348x 348x 348x 348x 348x 348x 348x 348x 348x 348x 348x 101x 101x 348x 57x 57x 57x 57x 57x 57x 57x 57x 57x 57x 57x 267x 260x 260x 260x 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;
}
} |