# PHPStan

> Einrichtung und Konfiguration der statischen Analyse

---

Benötigt wird: [PHPstan](https://phpstan.org/)

Die statische Analyse ist über `phpstan.neon` konfiguriert (Level 6, Baseline in `phpstan-baseline.neon`).

### Ausführen

```bash
composer analyse
```

Die Analyse benötigt eine webtrees-Installation (für die `app/`-Klassen + `vendor/autoload.php`). Ausführen vom bind-mounted-Pfad:

```bash
cd /path/to/webtrees/modules_v4/linkenhancer
composer analyse
```

### Konfiguration

- **Level**: 6
- **Baseline**: `phpstan-baseline.neon` (bekannte Probleme)
- **Bootstrap**: <a href="https://codeberg.org/bschwede/linkenhancer/src/branch/main/phpstan-bootstrap.php" target="_blank" rel="noopener"><code>phpstan-bootstrap.php</code></a>
 registriert die PSR-4-Namespaces direkt (umgeht den versionsgeprüften Autoloader in [`wt-shared-libs`](../../wt-shared-libs))
- **Scan-Verzeichnisse**: `../../app/` (webtrees-Core-Klassen)
- **Ausgeschlossene Pfade**: <a href="https://codeberg.org/bschwede/linkenhancer/src/branch/main/src/LinkEnhancerModuleExt.php" target="_blank" rel="noopener"><code>LinkEnhancerModuleExt.php</code></a>
 (Verwendung im Zusammenhang mit [Vesta-Modulen](https://github.com/vesta-webtrees-2-custom-modules))
- **Speichergrenze**: 1G
- **Parallel**: deaktiviert (Single-Prozess, zuverlässiger in CI)

### Wichtige Einstellungen

- `treatPhpDocTypesAsCertain: false` — verhindert False Positives aus `@var`-Assertions
- `ignoreErrors` für:
  - `AccessLevel` Enum (nur-Klasse in WT 2.3, in der 2.2-Laufzeit nicht verfügbar)
  - `DB::prefix('')` — beabsichtigt (Präfix ohne Identifier holen)

### Baseline neu generieren

Nach beabsichtigten Änderungen, die neue (akzeptable) Fehler einführen:

```bash
vendor/bin/phpstan analyse -c phpstan.neon --memory-limit=1G --generate-baseline=phpstan-baseline.neon
```

> **Hinweis:** Dies über den direkten `vendor/bin/phpstan`-Aufruf ausführen — der `composer`-Script-Wrapper leitet zusätzliche Argumente nicht weiter.
