Repository navigation
mcpp-language-server v0.0.15
mcpp-language-server 0.0.15
What changed
The bundled engine is mcppls-clangd 0.0.16
(23.1.0-mcppls.4): 35 patches, three of them new. This release is about answering at once what was answered before:
clangd stays the one source of correctness, and mcppls decides what an earlier correct answer is worth now.
Answers in under half a second
- What clangd answered before stands in while it is slow. Completion, hover, signature help and go-to-definition
keep clangd's answers under the place they were for, the type of what is before the.(learned from clangd in the
background), and the name before the::with its aliases spelled out -- sostd::asked in one file is answered in
another, and a list typed away and asked for again is there at once. When clangd is slower than
mcppls.answer.budget(450 ms), the kept answer goes out, and clangd's own replaces it as you type on; where clangd
has lately answered a file within its usual budget, mcppls waits just past clangd's pace instead, so clangd's complete
list is what goes out. A kept list goes out complete only when nothing it depends on changed; a request you cancel
goes on in the background and is kept for the next time. Kept answers survive a restart
(mcppls.answer.cache:on,memory,off). While clangd is idle, mcppls asks it in advance for the places after
a.,->or::near the cursor that have no answer yet (mcppls.answer.prefetch). - You do not see it. A list given so looks like clangd's own. Only an item mcppls doubts -- a member of a class
whose text changed since -- carries a small·after its description, and the members the class's text added or
removed are corrected in the list (mcppls.completion.provenance:subtle,off,verbose). A jump is given from
an earlier answer only while the file it lands in is as it was, or the declaration is found there again exactly once. - A list that came up empty comes back by itself. When a completion after
.,->or::had almost nothing in
time and clangd's answer arrives while you are still at the same place, VS Code shows the list without a keystroke
(cxxModules/completionReady, S3 5.9). - Agents and the command line are told which answers are which. A symbol or references result that rests on a
kept answer says so inprovenance(authoritative, the source, how old, whether the file that declares it
changed).fresh: true(MCP) and--fresh(mcppls query symbol|refs|calls) wait for clangd's own answers;
verify, impact and review always do;mcppls.answer.agent: authoritativemakes every query wait.
The engine
- A check that found a module's inputs as they were holds for 10 s while no file change is reported
(--module-input-recheck): an importer of 25 modules no longer re-checks every input at every completion, which cost
0.7-1.0 s on Windows. A save, a change on disk the editor reports or an edit with dirty headers checks again at once. - A file that imports no module completes as without module support. Sema no longer loads the preamble's
declarations the index already has (a header-heavy file: 0.6-0.7 s per completion to about 0.4 s); an import typed
since, or brought in by a header, is still loaded. - Completion and signature help have two slots of their own (
--interactive-actions), instead of queueing behind
other files' builds while modules are prepared. - With 15 GiB or more, eight ASTs of files you switch between are kept; with 31 GiB or more, twelve.
Seeing what happens
- The log says, at
info, only the answers worth reading: one given from an earlier answer while something it depends
on changed, and clangd's answer when it differed from what went out (diff=-<n>/+<n>). The report'sanswerscounts
how often, how fast and how often clangd's answer differed. See the troubleshooting guide.
Documentation
- A new guide, Laying out a module project: wrapper modules for heavy headers, each header
in one place,import stdwithout standard#includes, a minimal global module fragment, bodies in implementation
units, no re-export chains, and why each makes a large mixed project faster to build and to complete in.
Files
| File | What it is | How to install it |
|---|---|---|
mcppls-linux-x64.vsix |
The VS Code extension for one platform, with that platform's payload inside it | code --install-extension <file>, or the Extensions view's “Install from VSIX…” |
mcppls-linux-arm64.vsix |
The VS Code extension for one platform, with that platform's payload inside it | code --install-extension <file>, or the Extensions view's “Install from VSIX…” |
mcppls-darwin-arm64.vsix |
The VS Code extension for one platform, with that platform's payload inside it | code --install-extension <file>, or the Extensions view's “Install from VSIX…” |
mcppls-win32-x64.vsix |
The VS Code extension for one platform, with that platform's payload inside it | code --install-extension <file>, or the Extensions view's “Install from VSIX…” |
payload-linux-x64.tar.gz |
The server, the clangd it drives and the semantic kit, as one tree. What every non-VS-Code editor needs | Unpack it and put payload/bin/ on PATH; mcppls serve speaks LSP over stdio |
payload-linux-arm64.tar.gz |
The server, the clangd it drives and the semantic kit, as one tree. What every non-VS-Code editor needs | Unpack it and put payload/bin/ on PATH; mcppls serve speaks LSP over stdio |
payload-darwin-arm64.tar.gz |
The server, the clangd it drives and the semantic kit, as one tree. What every non-VS-Code editor needs | Unpack it and put payload/bin/ on PATH; mcppls serve speaks LSP over stdio |
payload-win32-x64.tar.gz |
The server, the clangd it drives and the semantic kit, as one tree. What every non-VS-Code editor needs | Unpack it and put payload/bin/ on PATH; mcppls serve speaks LSP over stdio |
mcppls-zed-0.0.15.tar.gz |
The Zed extension directory mcppls-zed/: extension.toml, the compiled extension.wasm and the crate it was compiled from, which Zed's dev-extension install compiles again. Platform-independent; the server comes from the payload |
Unpack it, put the payload's payload/bin/ on PATH, then Zed's command palette: zed: install dev extension, and choose mcppls-zed (Zed compiles it, which needs Rust through rustup) |
mcppls-clion-0.0.15.zip |
The IntelliJ-platform plugin archive Gradle produces. Gradle and the JDK it compiles with come from the clion feature (xim:gradle, xim:jdk-temurin), so it does not depend on whatever JDK the machine happens to default to |
Put the payload's payload/bin/ on PATH, then CLion: Settings → Plugins → the gear menu → Install Plugin from Disk, and restart |
SHA256SUMS |
sha256 of every other file in the release | sha256sum -c SHA256SUMS |
Not in a release
- The Claude Code plugin: it is consumed from the repository through its marketplace file, not downloaded as an archive.
- xlings-res archives and the rendered xim-pkgindex descriptors: the ecosystem publish path is deliberately out of scope for this release, so
mcppls-devtools release xlingsis not run. - The model gateway: a separate package, built and tested on its own, not part of what a user installs.
Generated from packaging/release.manifest.json for 0.0.15.