Error recovery/resilience

Offen
#68 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
25/100
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Veraltet
Tech-Stack
rust
Bereich
compilers

Rechercherichtung

Beginne damit, die parse-Funktionen des Parsers zu lesen und zu prüfen, wie sie derzeit Result<ast, ParseError> zurückgeben. Sieh dir das verlinkte Material zu LALRPOP und resilientem LL-Parsing an, um die Ansätze zur Fehlerbehandlung zu vergleichen. Als abgeschlossen gilt die Aufgabe, wenn das Projekt eine abgestimmte Entscheidung darüber getroffen hat, ob Fehlerbehandlung im Umfang enthalten ist, und falls ja, ein konkretes Design zur Bewahrung erfolgreich geparster Teile vorliegt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Currently, all of the parse functions return Result<ast, ParseError>. This means that if the file has a syntax error, we get the error and nothing else. However, there are some use cases in which having access to parts which did parse successfully would be beneficial:

  • Language servers usually want to keep functioning when the file is temporarily broken during editing.
  • Linters might want to skip over broken parts and continue reporting lints, or maybe up to the syntax error.

On the other hand, interpreters usually don't have too much use for this AFAIK.

lalrpop seems to have some support for error recovery: https://lalrpop.github.io/lalrpop/tutorial/008_error_recovery.html
Alex Kladov has written about error recovery, most recently here: https://matklad.github.io/2023/05/21/resilient-ll-parsing-tutorial.html

Is RustPython/Parser interested in error recovery or is it out of scope?

Vorherrschende Sprache
Rust
Sterne
117
Forks
38
Ø Merge
4 T. 7 Std.
Gemergte PRs (30 T.)
1

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus RustPython/Parser

Alle Issues in RustPython/Parser

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.