analyzeFile method

Future<List<Diagnostic>> analyzeFile(
  1. String filePath
)

Analyzes a file and returns diagnostics.

Implementation

Future<List<Diagnostic>> analyzeFile(String filePath) async {
  if (!_initialized) {
    throw StateError('Server not initialized');
  }

  final diagnostics = <Diagnostic>[];
  final result = await _sourceLoader.resolveFile(filePath);

  if (result == null) {
    return diagnostics;
  }

  // Calculate file-level metrics
  final fileResult = _miCalculator.calculateForFile(result.unit);

  // Report functions with poor maintainability (ADR-015 1.3 - actual source positions)
  for (final entry in fileResult.needsAttention) {
    final node = _findFunctionNode(result.unit, entry.key);
    final range = node != null
        ? _nodeToRange(result.unit, node)
        : Range.zero;

    diagnostics.add(Diagnostic(
      message:
          'Function "${entry.key}" has low maintainability index: ${entry.value.maintainabilityIndex.toStringAsFixed(1)}',
      severity: DiagnosticSeverity.warning,
      range: range,
      source: 'anteater',
      code: 'low_maintainability_index',
    ));
  }

  // Check cyclomatic complexity thresholds
  for (final entry in fileResult.functions.entries) {
    final node = _findFunctionNode(result.unit, entry.key);
    final range = node != null
        ? _nodeToRange(result.unit, node)
        : Range.zero;

    if (entry.value.cyclomaticComplexity > 20) {
      diagnostics.add(Diagnostic(
        message:
            'Function "${entry.key}" has high cyclomatic complexity: ${entry.value.cyclomaticComplexity}',
        severity: DiagnosticSeverity.warning,
        range: range,
        source: 'anteater',
        code: 'high_cyclomatic_complexity',
      ));
    }

    if (entry.value.cognitiveComplexity > 15) {
      diagnostics.add(Diagnostic(
        message:
            'Function "${entry.key}" has high cognitive complexity: ${entry.value.cognitiveComplexity}',
        severity: DiagnosticSeverity.hint,
        range: range,
        source: 'anteater',
        code: 'high_cognitive_complexity',
      ));
    }
  }

  return diagnostics;
}