dependencies.py

Code Hygiene Score: 100

Keine Issues gefunden.

Dependencies 2

Funktionen 1

Code

"""code_dependencies - Was nutzt diese Klasse? (outgoing)"""

from db import execute_query, execute_single


def register_dependencies_tool(mcp):
    """Registriert code_dependencies Tool."""

    @mcp.tool()
    def code_dependencies(
        fqcn: str,
        dependency_type: str = None,
    ) -> dict:
        """
        Zeigt Dependencies einer Klasse (outgoing - was nutzt diese Klasse).

        Args:
            fqcn: Vollstaendiger Klassenname (z.B. Controller\\HomeController)
            dependency_type: Filter nach Typ: extends, implements, constructor, use, trait (optional)

        Returns:
            Dict mit dependencies: [{target_fqcn, dependency_type}]
        """
        # FQCN in Namespace und Klassennamen aufteilen
        parts = fqcn.rsplit("\\", 1)
        if len(parts) == 2:
            namespace, class_name = parts
        else:
            namespace = None
            class_name = fqcn

        # analysis_id finden
        if namespace:
            sql = "SELECT id FROM code_analysis WHERE namespace = %s AND classes LIKE %s LIMIT 1"
            params = (namespace, f'%"{class_name}"%')
        else:
            sql = "SELECT id FROM code_analysis WHERE namespace IS NULL AND classes LIKE %s LIMIT 1"
            params = (f'%"{class_name}"%',)

        row = execute_single(sql, params)

        if not row:
            return {"error": f"Klasse nicht gefunden: {fqcn}", "dependencies": []}

        # Dependencies laden - SQL aus PHP CodeAnalysisRepository::getDependencies() (Zeile 318-329)
        dep_sql = """
            SELECT dependency_type, target_fqcn
            FROM code_dependencies
            WHERE analysis_id = %s
        """
        dep_params = [row["id"]]

        if dependency_type:
            dep_sql += " AND dependency_type = %s"
            dep_params.append(dependency_type)

        dep_sql += " ORDER BY dependency_type, target_fqcn"

        dependencies = execute_query(dep_sql, tuple(dep_params))

        return {
            "fqcn": fqcn,
            "dependencies": dependencies,
            "count": len(dependencies),
        }
← Übersicht