LspError.data missing #[serde(default)] swallows the real jdtls error

Offen Anfängerfreundlich
#325 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Anfängerfreundlichkeit
88/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
json, rust
Bereich
backend

Rechercherichtung

Die Struktur LspError ist in src/lsp.rs definiert, und das untagged Enum LspResponse, das sie umschließt, ist die Stelle, an der das Parsen fehlschlägt. Lies zuerst diese beiden Definitionen und füge danach #[serde(default)] zum Feld data hinzu. Zur Überprüfung sendest du eine Proxy-Antwort mit einem Error-Objekt, das keinen data-Schlüssel hat, und bestätigst, dass das Feld message unverändert beim Benutzer ankommt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

Summary

src/lsp.rs defines

pub struct LspError {
    code: i64,
    message: String,
    data: Value,   // no #[serde(default)]
}

LSP allows error.data to be omitted. When jdtls returns an error without data, the Error variant fails to deserialize, and since LspResponse is an untagged enum, the whole parse fails with:

Failed to parse response from LSP proxy: data did not match any variant of untagged enum LspResponse

Impact

The actual error message is swallowed. In our case the real response was:

{"error":{"code":-32601,"message":"No delegateCommandHandler for vscode.java.resolveMainClass"},"id":"...","jsonrpc":"2.0"}

but Zed surfaced the misleading serde error, which pointed everyone (including maintainers reading our report) at "protocol/proxy problems" instead of the broken debug plugin (see #324). This cost a long debugging session.

Repro

  • Start a debug session while the java-debug bundle is broken/unloaded (e.g. #324)
  • Or directly: curl -X POST http://127.0.0.1:<proxy-port>/ -d '{"method":"workspace/executeCommand","params":{"command":"vscode.java.resolveMainClass","arguments":[]}}' — the response error has no data field

Fix

Add #[serde(default)] to data (one-liner) so the real message (No delegateCommandHandler ...) reaches the user.

Vorherrschende Sprache
Rust
Sterne
225
Forks
47
Ø Merge
3 Std. 51 Min.
Gemergte PRs (30 T.)
7

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

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 zed-extensions/java

Alle Issues in zed-extensions/java

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

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