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

Abierto Apto para principiantes
#325 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
1/5
Tiempo estimado
Menos de una hora
Aptitud para principiantes
88/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
json, rust
Área
backend

Línea de trabajo

La struct LspError está definida en src/lsp.rs, y el enum untagged LspResponse que la envuelve es donde falla el parseo. Empieza leyendo estas dos definiciones y luego añade #[serde(default)] al campo data. Para verificarlo, envía una respuesta del proxy con un objeto de error que no tenga la clave data y confirma que el campo message llega al usuario sin cambios.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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.

Lenguaje dominante
Rust
Estrellas
225
Forks
47
Merge medio
3 h 51 min
PR fusionados (30 d)
7

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de zed-extensions/java

Todos los issues de zed-extensions/java

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.