LspError.data missing #[serde(default)] swallows the real jdtls error
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 1/5
- Geschätzter Aufwand
- Unter einer Stunde
- Anfängerfreundlichkeit
- 88/100
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 nodatafield
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
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus zed-extensions/java
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
zed-extensions/java#133 · 1 Kommentar ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
zed-extensions/java#324 ·
-
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 45/100
zed-extensions/java#323 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 30/100
zed-extensions/java#272 · 6 Kommentare ·
-
language-server
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 25/100
zed-extensions/java#246 · 4 Kommentare ·
Alle Issues in zed-extensions/java
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
gitbutlerapp/gitbutler#16982 ·
Maintainer antworten meist innerhalb von 1 Tag
-
priority: high status: new topic: ga4gh-sdk type: docs type: maintenance workload: minutes
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
C-bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
rust-lang/rust-clippy#17976 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
aaif-goose/goose#13327 ·
Maintainer antworten meist innerhalb von 1 Tag
-
llm translation
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag