calculateForFile method
Calculates MI for a compilation unit (file-level).
Implementation
FileMaintainabilityResult calculateForFile(CompilationUnit unit) {
final functions = <String, MaintainabilityResult>{};
var totalMI = 0.0;
var count = 0;
final lineInfo = unit.lineInfo;
for (final declaration in unit.declarations) {
if (declaration is FunctionDeclaration) {
final body = declaration.functionExpression.body;
final result = calculate(body, lineInfo);
functions[declaration.name.lexeme] = result;
totalMI += result.maintainabilityIndex;
count++;
} else if (declaration is ClassDeclaration) {
for (final member in declaration.members) {
if (member is MethodDeclaration) {
final body = member.body;
final result = calculate(body, lineInfo);
final name = '${declaration.name.lexeme}.${member.name.lexeme}';
functions[name] = result;
totalMI += result.maintainabilityIndex;
count++;
}
}
}
}
final averageMI = count > 0 ? totalMI / count : 100.0;
return FileMaintainabilityResult(
functions: functions,
averageMaintainabilityIndex: averageMI,
rating: _getRating(averageMI),
);
}