Zum Hauptinhalt springen
ai-slop/swallowed-exceptionmanuelle Behebung

Verschluckte Exception.

Ein try/catch, dessen catch-Block leer ist oder nur einen Kommentar enthält – Fehler verschwinden lautlos, ohne Log, ohne Rethrow, ohne Recovery.

Beanstandete und saubere Form.

Jedes Beispiel zeigt genau die Codeform, nach der die Regel sucht, und dann die kleinste Version, die die Absicht bewahrt, ohne Risiken zu verstecken oder Rauschen hinzuzufügen.

swallowed-exception.ts
✗ Beanstandet
try {
  await processPayment(order)
} catch (e) {
  // ignore
}
Warum das anschlägt

Deterministischer AST-Abgleich: beanstandet catch-Klauseln, deren Rumpf leer ist oder nur Kommentare enthält, ohne Log, Rethrow oder Recovery-Aufruf.

swallowed-exception.ts
✓ Sauber
try {
  await processPayment(order)
} catch (e) {
  log.error('payment failed', { orderId: order.id, error: e })
  throw e // or: return failure result, depending on caller contract
}
Was sich geändert hat

Mach den Fehler sichtbar oder behandle ihn. Logge nützlichen Kontext und wirf erneut, gib ein typisiertes Fehlerergebnis zurück oder implementiere einen echten Recovery-Pfad mit einer Begründung, die der nächste Maintainer prüfen kann.

Agenten packen riskante Aufrufe in try/catch, um „auf Nummer sicher“ zu gehen, ohne zu überlegen, was im Fehlerfall passieren soll. Das Ergebnis ist ein Ausfall, dessen Diagnose Stunden dauert, weil es nirgends eine Logzeile gibt.

Wie diese Regel begründet ist.

Regel-ID

ai-slop/swallowed-exception

Prüfende Engine

ai-slop

Erkennungsstrategie

Deterministischer AST-Abgleich: beanstandet catch-Klauseln, deren Rumpf leer ist oder nur Kommentare enthält, ohne Log, Rethrow oder Recovery-Aufruf.

Legitimer Code, der NICHT beanstandet wird

catch-Blöcke, die loggen, erneut werfen, ein Fehlerergebnis zurückgeben oder bewusst eine Recovery durchführen (mit begründendem Kommentar), werden nicht beanstandet.

Belege

Verschluckte Exceptions tauchten im ersten öffentlichen Scan-Batch in voneinander unabhängigen Projekten auf.