clangd 23 module builder: one failed module (hello.test) blanks ALL completions — "Failed to compile src/test.cppm" while the project toolchain builds it fine

Abierto
#47 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
58/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
cpp

Línea de trabajo

Start with the serve-time module-hints pipeline: locate where mcppls builds module hints (the log lines about 'routed to mcppls's own engine' and 'clangd could not build module') and where a failed module's -fmodule-file hints are assembled into the flags handed to clangd. Read how a build failure currently propagates into the hint set, and where a per-module exclusion could keep completions alive (Ask 1). For Ask 2, reproduce with mcppls serve --log=verbose on the reported project to surface the underlying clang diagnostic for src/test.cppm; mcppls check src/test.cppm and a mcpp build comparison isolate the clangd 23 vs 22 flag mismatch. Done = one unbuildable module no longer blanks completions, and either the compile error is explained or the flag mismatch is filed/documented.

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

Descripción

Environment

  • mcppls 0.0.11 payload (bundled clangd 23.1.0, kit mcppls-kit-libcxx-23.1.0-x86_64-unknown-linux-gnu), installed via xim
  • Project built by mcpp 2026.10.5.2 with toolchain clang 22.1.8 / libc++ 22.1.8 (mcpp build passes)
  • Linux x86_64, editor Neovim 0.12.5 via the mcppls-nvim plugin (plain LSP client, no other completion plugins)

Project shape

src/
  main.cpp        import std; import hello.greet; import hello.test; import hello.hhh; import hello.test.ccc;
  greet.cppm      export module hello.greet; …
  test.cppm       export module hello.test; import std; export namespace hello { auto test() { std::println("hello"); } }
  hhh.cppm / xxxx.cppm / test/ccc.cppm …
mcpp.toml, compile_commands.json (mcpp-written)

What happens

clangd's module builder fails on hello.test and, from that point on, every textDocument/completion is answered with 0 items instantly — std::, std::ve, hello::, all of them. The response arrives in ~1 ms with no error (err == nil), status keeps reporting ready, and no diagnostic is shown to the user, so it just looks like "completion is dead".

Server log (mcppls 0.0.11, serve pipeline):

[warning] clangd (…/test/mcpp/hello): E[…] Failed to build module hello.test; due to Failed to compile …/src/test.cppm. Use '--log=verbose' to view detailed failure reasons. …
[warning] 2 files routed to mcppls's own engine (…): 1 module cannot be prepared because hello.test failed: Failed to compile …/src/test.cppm
[warning] clangd could not build module hello.test (…): Failed to compile …/src/test.cppm
[warning] clangd (…) has kept a core busy for 30 s on main.cpp, which it is not building; restarting it
[warning] clangd (…): E[…] Transport error: Input/output error

Key data points

  1. The project toolchain compiles it fine. mcpp build (clang 22.1.8) passes; the failure is specific to clangd 23.1's own module-hints builder (build database flags come from the clang 22.1.8 cdb, with -resource-dir pointed at clangd 23 and -fmodule-file hints into the workspace module-hints/).
  2. mcppls check src/test.cppm passes (clangd exit 0) — the failure only shows up in the serve-time hints pipeline, which makes it invisible to the check tooling.
  3. Counter-experiment isolates it. A copy of the same project with import hello.test; dropped (and test.cppm removed), everything else identical: std::ve → std::vector, hello:: → greet, completions fully alive.
  4. The failure cascades through the hints chain: with hello.test unbuildable, dependent -fmodule-file=hello.test=…pcm/std.pcm hints reference pcms that never get produced (module file not found when the prime files are compiled manually), so even import std completions die — well beyond the one broken module.

Asks

  1. Graceful degradation: when one module fails to build, exclude it from the hint set and keep serving completions for the rest of the project (today one bad module blanks std:: and every other scope, which reads as "LSP is broken" to the user, with nothing on screen).
  2. Root-cause the clangd 23.1 compile failure of this module — at default log level the underlying clang error is not surfaced (--log=verbose hint comes from clangd itself). I can run the session with --log=verbose / --debug-modules-builder and attach the diagnostic bundle — tell me which you prefer.

Happy to provide the full project (it is ~6 small files) if useful.

Lenguaje dominante
C++
Estrellas
25
Forks
2
Merge medio
21 h 5 min
PR fusionados (30 d)
13

Preparar el entorno

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 Sunrisepeak/mcpp-language-server

Todos los issues de Sunrisepeak/mcpp-language-server

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.