calculateForFile method

FileMaintainabilityResult calculateForFile(
  1. CompilationUnit unit
)

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),
  );
}