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 305x 305x 305x 66x 66x 239x 305x 246x 51x 51x 336x 336x 336x 336x 336x 336x 336x 336x 336x 336x 336x 336x 101x 101x 336x 51x 51x 51x 51x 51x 51x 51x 51x 51x 51x 51x 246x 239x 239x 239x 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;
}
} |