# Validierungstools für EspoCRM Custom-Entwicklung ## Installierte Tools ### 1. PHP-CLI (v8.2.29) **Zweck:** Validierung von PHP-Syntax **Installation:** ```bash sudo apt install -y php-cli ``` **Verwendung im Script:** ```bash php -l /pfad/zur/datei.php ``` **Validiert:** - PHP-Syntax-Fehler - Parse-Fehler - Fehlende Klammern/Semikolons - Ungültige Funktionsdeklarationen --- ### 2. CSSLint (v1.0.4) **Zweck:** CSS-Validierung und Best-Practice-Checks **Installation:** ```bash sudo apt install -y nodejs npm sudo npm install -g csslint ``` **Verwendung im Script:** ```bash csslint --format=compact --quiet /pfad/zur/datei.css ``` **Validiert:** - CSS-Syntax-Fehler - Ungültige Properties - Vendor-Prefix-Probleme - Performance-Probleme - Kompatibilitätsprobleme **Konfiguration:** Das Script verwendet standardmäßig alle csslint-Regeln. Für custom Rules kann eine `.csslintrc` Datei erstellt werden. --- ### 3. JSHint (v2.13.6) **Zweck:** JavaScript-Code-Qualität und Syntax-Validierung **Installation:** ```bash sudo npm install -g jshint ``` **Verwendung im Script:** ```bash jshint --config=/dev/null /pfad/zur/datei.js ``` **Validiert:** - JavaScript-Syntax-Fehler - Potenzielle Bugs - Code-Style-Probleme - Ungültige Variablen-Deklarationen - Scope-Probleme **Konfiguration:** Aktuell nutzt das Script minimale Konfiguration. Für erweiterte Checks kann eine `.jshintrc` Datei erstellt werden: ```json { "esversion": 6, "browser": true, "jquery": true, "unused": true, "undef": true } ``` --- ## Integration im Validierungsscript Das Script `custom/scripts/validate_and_rebuild.py` nutzt diese Tools automatisch: ### Automatische Erkennung ```python # Prüft ob Tool verfügbar ist try: subprocess.run(['csslint', '--version'], capture_output=True) use_csslint = True except FileNotFoundError: use_csslint = False # Fallback auf Basis-Validierung ``` ### Fallback-Mechanismus Falls ein Tool nicht verfügbar ist, verwendet das Script eine Basis-Validierung: - **CSS:** Klammer-Matching, Attribut-Selektoren - **JavaScript:** Klammer-Matching (rund, eckig, geschweift) - **PHP:** Übersprungen mit Warnung --- ## Validierungsebenen ### Kritische Fehler (Rebuild wird abgebrochen) - JSON-Syntax-Fehler - PHP-Syntax-Fehler - CSS-Syntax-Fehler (schwerwiegend) - JavaScript-Syntax-Fehler - Fehlende Relationship-Definitionen ### Warnungen (Rebuild wird fortgesetzt) - CSS-Best-Practice-Verletzungen - Fehlende i18n-Übersetzungen - Code-Style-Probleme - Performance-Hinweise --- ## Manuelle Verwendung der Tools ### CSS prüfen ```bash # Einzelne Datei csslint client/custom/css/my-styles.css # Alle CSS-Dateien find client/custom/css -name "*.css" -exec csslint {} \; # Mit spezifischen Regeln csslint --errors=errors,duplicate-properties client/custom/css/ ``` ### JavaScript prüfen ```bash # Einzelne Datei jshint client/custom/src/views/my-view.js # Alle JS-Dateien find client/custom/src -name "*.js" -exec jshint {} \; # Mit Konfiguration jshint --config .jshintrc client/custom/src/ ``` ### PHP prüfen ```bash # Einzelne Datei php -l custom/Espo/Custom/Classes/MyClass.php # Alle PHP-Dateien find custom/Espo -name "*.php" -exec php -l {} \; | grep -v "No syntax errors" ``` --- ## Zusätzliche empfohlene Tools (optional) ### 1. ESLint (moderne Alternative zu JSHint) ```bash sudo npm install -g eslint eslint --init # Erstellt .eslintrc Konfiguration ``` ### 2. Stylelint (moderne Alternative zu CSSLint) ```bash sudo npm install -g stylelint stylelint-config-standard # Benötigt .stylelintrc Konfiguration ``` ### 3. PHPStan (statische PHP-Analyse) ```bash composer require --dev phpstan/phpstan vendor/bin/phpstan analyse custom/Espo ``` ### 4. PHP_CodeSniffer (PHP Code-Style) ```bash sudo apt install -y php-codesniffer phpcs --standard=PSR12 custom/Espo/ ``` --- ## Troubleshooting ### Tool nicht gefunden ```bash # Prüfe Installation which csslint which jshint which php # Installiere fehlende Tools sudo apt update sudo apt install -y nodejs npm php-cli sudo npm install -g csslint jshint ``` ### Validierung zu streng Bearbeite das Script und passe die Tool-Parameter an: ```python # Weniger strikte CSS-Validierung result = subprocess.run( ['csslint', '--format=compact', '--errors=errors', str(css_file)], ... ) ``` ### Performance-Probleme Für große Projekte mit vielen Dateien: ```python # Parallele Validierung mit ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=4) as executor: results = executor.map(validate_css_file, css_files) ``` --- ## Best Practices 1. **Vor jedem Commit:** Führe Validierung aus ```bash python3 custom/scripts/validate_and_rebuild.py --dry-run ``` 2. **Automatisierung:** Integriere in Git pre-commit hook ```bash # .git/hooks/pre-commit #!/bin/bash python3 custom/scripts/validate_and_rebuild.py --dry-run if [ $? -ne 0 ]; then echo "Validierung fehlgeschlagen. Commit abgebrochen." exit 1 fi ``` 3. **CI/CD Integration:** Nutze in Build-Pipeline ```yaml # .gitlab-ci.yml / .github/workflows/ validate: script: - python3 custom/scripts/validate_and_rebuild.py --dry-run ``` 4. **IDE Integration:** Konfiguriere Editor für Live-Feedback - VSCode: ESLint/Stylelint Extensions - PHPStorm: Built-in PHP/JS/CSS Validierung --- ## Maintenance ### Updates der Tools ```bash # System-Packages sudo apt update && sudo apt upgrade # NPM-Packages sudo npm update -g csslint jshint # Prüfe Versionen php --version csslint --version jshint --version ``` ### Entfernung ```bash # NPM-Tools sudo npm uninstall -g csslint jshint # APT-Packages sudo apt remove php-cli nodejs npm sudo apt autoremove ``` --- **Letzte Aktualisierung:** Januar 2026 **Maintainer:** Custom Scripts Team **Dokumentation:** `custom/scripts/VALIDATION_TOOLS.md`