Skip to the content.

Complete documentation for code quality metrics and analysis.

Location: callflow_tracer/code_quality.py (633 lines)


Overview

The Code Quality module analyzes Python code for complexity, maintainability, and technical debt metrics using AST analysis.

Key Components

ComplexityMetrics (Dataclass)

Measures cyclomatic and cognitive complexity.

Attributes:

Complexity Ratings:

MaintainabilityMetrics (Dataclass)

Measures code maintainability using Halstead metrics.

Attributes:

Maintainability Ratings:

TechnicalDebtIndicator (Dataclass)

Identifies technical debt in code.

Attributes:

ComplexityAnalyzer (Class)

Analyzes cyclomatic complexity using AST.

Methods:

MaintainabilityAnalyzer (Class)

Analyzes maintainability using Halstead metrics.

Methods:

TechnicalDebtAnalyzer (Class)

Identifies technical debt issues.

Methods:

Debt Scoring:

QualityTrendAnalyzer (Class)

Tracks quality metrics over time.

Methods:

Usage Examples

Analyze Single File

from callflow_tracer.code_quality import ComplexityAnalyzer

analyzer = ComplexityAnalyzer()
metrics = analyzer.analyze_file("my_module.py")

for metric in metrics:
    print(f"{metric.function_name}: {metric.complexity_rating}")

Analyze Entire Codebase

from callflow_tracer.code_quality import analyze_codebase

results = analyze_codebase("./src")
print(f"Average Complexity: {results['summary']['average_complexity']:.2f}")
print(f"Critical Issues: {results['summary']['critical_issues']}")
from callflow_tracer.code_quality import QualityTrendAnalyzer

trend_analyzer = QualityTrendAnalyzer()
trend = trend_analyzer.add_snapshot(complexity, maintainability, debt)
trends = trend_analyzer.analyze_trends()
print(f"Complexity Trend: {trends['complexity_trend']}")

Identify Technical Debt

from callflow_tracer.code_quality import TechnicalDebtAnalyzer

debt_analyzer = TechnicalDebtAnalyzer()
debt_indicators = debt_analyzer.analyze_from_metrics(complexity, maintainability)

for indicator in debt_indicators:
    if indicator.severity == "Critical":
        print(f"CRITICAL: {indicator.function_name}")
        print(f"  Issues: {', '.join(indicator.issues)}")

CLI Usage

# Analyze code quality
callflow-tracer quality . -o quality_report.html

# With trend tracking
callflow-tracer quality . --track-trends --format json

# Specific directory
callflow-tracer quality ./src -o src_quality.html

Output Format

{
  "complexity_metrics": [
    {
      "function_name": "process_data",
      "module": "data_processor",
      "cyclomatic_complexity": 8,
      "cognitive_complexity": 6,
      "nesting_depth": 3,
      "num_branches": 4,
      "num_loops": 2,
      "num_returns": 3,
      "lines_of_code": 45
    }
  ],
  "maintainability_metrics": [
    {
      "function_name": "process_data",
      "module": "data_processor",
      "maintainability_index": 72.5,
      "halstead_volume": 245.3,
      "halstead_difficulty": 12.4,
      "halstead_effort": 3041.7,
      "lines_of_code": 45,
      "comment_ratio": 0.15
    }
  ],
  "debt_indicators": [
    {
      "function_name": "process_data",
      "module": "data_processor",
      "debt_score": 25.0,
      "issues": ["High cyclomatic complexity (8)"],
      "severity": "Medium",
      "estimated_hours": 2.5
    }
  ],
  "summary": {
    "total_functions": 42,
    "average_complexity": 6.8,
    "average_maintainability": 68.3,
    "total_debt_score": 245.0,
    "critical_issues": 2,
    "high_issues": 5
  }
}

Interpretation Guide

Complexity Levels

Maintainability Index

Technical Debt