Skip to content

Analyzer

provide.testkit.quality.complexity.analyzer

Complexity analysis implementation using radon.

Classes

ComplexityAnalyzer

ComplexityAnalyzer(config: dict[str, Any] | None = None)

Code complexity analyzer using radon and other tools.

Provides high-level interface for complexity analysis with automatic artifact management and integration with the quality framework.

Initialize complexity analyzer.

Parameters:

Name Type Description Default
config dict[str, Any] | None

Complexity analyzer configuration options

None
Source code in provide/testkit/quality/complexity/analyzer.py
def __init__(self, config: dict[str, Any] | None = None) -> None:
    """Initialize complexity analyzer.

    Args:
        config: Complexity analyzer configuration options
    """
    if not RADON_AVAILABLE:
        raise QualityToolError("Radon not available. Install with: pip install radon", tool="complexity")

    self.config = config or {}
    self.artifact_dir: Path | None = None
Functions
analyze
analyze(path: Path, **kwargs: Any) -> QualityResult

Run complexity analysis on the given path.

Parameters:

Name Type Description Default
path Path

Path to analyze

required
**kwargs Any

Additional options including artifact_dir

{}

Returns:

Type Description
QualityResult

QualityResult with complexity analysis data

Source code in provide/testkit/quality/complexity/analyzer.py
def analyze(self, path: Path, **kwargs: Any) -> QualityResult:
    """Run complexity analysis on the given path.

    Args:
        path: Path to analyze
        **kwargs: Additional options including artifact_dir

    Returns:
        QualityResult with complexity analysis data
    """
    self.artifact_dir = kwargs.get("artifact_dir", Path(".complexity"))
    start_time = time.time()

    try:
        # Run radon complexity analysis
        result = self._run_radon_analysis(path)
        result.execution_time = time.time() - start_time

        # Generate artifacts
        self._generate_artifacts(result)

        return result

    except Exception as e:
        return QualityResult(
            tool="complexity",
            passed=False,
            details={"error": str(e), "error_type": type(e).__name__},
            execution_time=time.time() - start_time,
        )
report
report(
    result: QualityResult, format: str = "terminal"
) -> str

Generate report from QualityResult (implements QualityTool protocol).

Parameters:

Name Type Description Default
result QualityResult

Complexity result

required
format str

Report format

'terminal'

Returns:

Type Description
str

Formatted report

Source code in provide/testkit/quality/complexity/analyzer.py
def report(self, result: QualityResult, format: str = "terminal") -> str:
    """Generate report from QualityResult (implements QualityTool protocol).

    Args:
        result: Complexity result
        format: Report format

    Returns:
        Formatted report
    """
    if format == "terminal":
        return self._generate_text_report(result)
    elif format == "json":
        return json.dumps(
            {
                "tool": result.tool,
                "passed": result.passed,
                "score": result.score,
                "details": result.details,
            },
            indent=2,
        )
    else:
        return str(result.details)

Functions