Skip to content

mcpp-language-server v0.0.15

Choose a tag to compare

@github-actions github-actions released this 13 Oct 17:47
· 1 commit to main since this release
4db7e91

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 -- so std:: 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 in provenance (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: authoritative makes 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's answers counts
    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 std without 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 xlings is 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.