Sprint 201: Panikfreies Parsen & CLI Härtung 🛡️
Willkommen zu Sprint 201! Aufsetzend auf den performanten Grundlagen von Sprint 200 haben wir ein wichtiges Stabilitäts-Refactoring abgeschlossen: Die Migration des gesamten Compilers von panikgesteuerter Fehlerfortpflanzung hin zu einem zur Compilezeit sicheren, Result-basierten Modell. Zudem haben wir ungeschützte `unwrap()`-Aufrufe aus der CLI entfernt, damit autonome KI-Agenten KnotenCore-Code sicher und ohne Absturzschleifen ausführen können.
🛡️ Result-Basiertes Parsen
Zuvor führte jede unerwartete Syntax oder ein unbekannter Token im Parser direkt zu einer harten Panik (mit einem JSON-Diagnose-Layout). Dies zwang unseren CLI-Runner dazu, Parser-Panics mittels `catch_unwind` abzufangen – ein schwerfälliges und in Rust unübliches Entwurfsmuster.
In Sprint 201 haben wir die Signaturen des Parsers so umgeschrieben, dass Fehler sicher mit dem `?`-Operator hochgereicht werden. Hierfür wurde das formale `ParseError`-Enum definiert:
pub enum ParseError {
InvalidJson(String),
MissingField(String),
UnexpectedToken { expected: String, found: String },
UnexpectedChar(char),
UnexpectedNode(String),
Other(String),
}
🗜️ Refactoring-Map: Bereinigung von Panics
Hier ist die Übersicht über die Transitionen von panikgesteuerter Logik zu strukturierter Fehlerbehandlung:
| Vorher | Nachher (Sprint 201) |
|---|---|
| parse() -> Node | parse() -> Result<Node, ParseError> |
| diagnostic_panic() -> panic!() | parse_error() -> Err(ParseError) |
| expect(token) -> panic!() | expect(token) -> Result<(), ParseError> |
| peek_char().unwrap() | peek_char().ok_or_else(...)? |
| s.parse().unwrap() | s.parse().map_err(...)? |
🔌 Betroffene Module & CLI-Updates
Alle Komponenten der Engine, die den Parser aufrufen, wurden an das neue `Result` angepasst:
src/bin/run_knc.rs: Altescatch_unwindentfernt; verarbeitet den Parser-Result-Typ direkt und beendet den Prozess im Fehlerfall kontrolliert.src/vm/compiler.rs: Fehler-Matching auf dem Ergebnis vonparser.parse().src/validator.rs: Veralteter Panik-Handler durch direkte Fehler-Konvertierung via.map_err(...)ersetzt.src/bin/knoten_build.rs: Der Compile-Scaffold verarbeitet Parser-Fehler nun sicher ohne Absturz.
🧪 Robustes Testen & CI
Zur Validierung haben wir den Regressionstest test_parser_invalid_syntax_returns_err hinzugefügt. Dieser übergibt fehlerhaften Code ("let x = ;") und stellt sicher, dass dieser als Err(ParseError) abgefangen wird, anstatt einen Thread-Absturz auszulösen.
Alle 140 Integration- und Unit-Tests laufen einwandfrei und grün durch, und cargo clippy liefert 0 Warnungen für die gesamte Codebasis!