pre_rules.py

Code Hygiene Score: 88

Keine Issues gefunden.

Dependencies 10

Funktionen 1

Code

#!/usr/bin/env python3
"""
Pre-Hook Regeln (BLOCK) - Modular und erweiterbar ohne Claude-Neustart.

Alle P-Regeln aus dem Quality Gate Plan.
Importiert Regeln aus spezialisierten Modulen.
"""

from . import pre_rules_guard
from . import pre_rules_mvc
from . import pre_rules_layers
from . import pre_rules_validation
from . import pre_rules_htmx
from . import pre_rules_constants
from . import pre_rules_python
from . import pre_rules_deterministic
from . import pre_rules_tests
from .rule_base import allow


# =============================================================================
# REGEL-SAMMLUNGEN NACH DATEITYP
# =============================================================================

# PHP-Regeln (nur für .php Dateien)
PHP_RULES = [
    # Prüfung 1: SRP + KISS + Prüfung 4: OOP
    *pre_rules_guard.RULES,

    # Prüfung 2: MVC + CRUD
    *pre_rules_mvc.RULES,

    # Prüfung 3: PSR + Types
    *pre_rules_validation.RULES,

    # Prüfung 6: SOLID + DIP + H-Regeln
    *pre_rules_layers.RULES,

    # HTMX Contract (Contract #14)
    *pre_rules_htmx.RULES,

    # Prüfung 7: Constants + Magic Numbers
    *pre_rules_constants.RULES,

    # Prüfung 8: Deterministic Behavior
    *pre_rules_deterministic.RULES,

    # Prüfung 14: Test Isolation (nur für /tests/, /Test/)
    *pre_rules_tests.RULES,
]

# Python-Regeln (nur für .py Dateien)
PYTHON_RULES = [
    # PP1.x: Hardcoded Values
    *pre_rules_python.RULES,
]

# Legacy: Alle Regeln für Kompatibilität
RULES = PHP_RULES + PYTHON_RULES


# =============================================================================
# MAIN CHECK FUNCTION
# =============================================================================

def check(file_path: str, content: str) -> dict:
    """
    Führt Pre-Hook-Regeln basierend auf Dateityp aus.
    Stoppt beim ersten Verstoß.
    """
    # Regeln nach Dateityp auswählen
    if file_path.endswith(".php"):
        rules = PHP_RULES
    elif file_path.endswith(".py"):
        rules = PYTHON_RULES
    else:
        # Unbekannter Typ: durchlassen
        return allow()

    for rule in rules:
        result = rule(file_path, content)
        if result is not None:
            return result

    return allow()
← Übersicht