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
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 58/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- compilers, developer-experience
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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 buildpasses) - 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
- 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-dirpointed at clangd 23 and-fmodule-filehints into the workspacemodule-hints/). mcppls check src/test.cppmpasses (clangd exit 0) — the failure only shows up in the serve-time hints pipeline, which makes it invisible to the check tooling.- Counter-experiment isolates it. A copy of the same project with
import hello.test;dropped (andtest.cppmremoved), everything else identical:std::ve→std::vector,hello::→greet, completions fully alive. - The failure cascades through the hints chain: with
hello.testunbuildable, dependent-fmodule-file=hello.test=…pcm/std.pcmhints reference pcms that never get produced (module file not foundwhen the prime files are compiled manually), so evenimport stdcompletions die — well beyond the one broken module.
Asks
- 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). - Root-cause the clangd 23.1 compile failure of this module — at default log level the underlying clang error is not surfaced (
--log=verbosehint comes from clangd itself). I can run the session with--log=verbose/--debug-modules-builderand attach the diagnostic bundle — tell me which you prefer.
Happy to provide the full project (it is ~6 small files) if useful.
- Lingua principale
- C++
- Stelle
- 25
- Fork
- 2
- Merge medio
- 21h 5m
- PR unite (30g)
- 13
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di Sunrisepeak/mcpp-language-server
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
Sunrisepeak/mcpp-language-server#80 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
Sunrisepeak/mcpp-language-server#66 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 1/100
Sunrisepeak/mcpp-language-server#77 · 3 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
Sunrisepeak/mcpp-language-server#71 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
Sunrisepeak/mcpp-language-server#59 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di Sunrisepeak/mcpp-language-server
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
xiaoyifang/goldendict-ng#3148 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
triton-inference-server/server#9069 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 4 giorni
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100