Files
espocrm/custom/docs/tools/VALIDATION_TOOLS.md

293 lines
5.8 KiB
Markdown

# 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`