Repository navigation
mcpp-language-server v0.0.14
mcpp-language-server 0.0.14
What changed
The bundled engine is mcppls-clangd 0.0.15
(23.1.0-mcppls.3): 32 patches, three of them new. This release is about Windows: opening a project again and completion
as you type, where every check that a module is still good is a file operation that opens the file.
Completion as you type
- A module that includes
<windows.h>no longer carries all of it. A module's BMI kept every declaration of an
extern "C"block its global module fragment includes, used or not, and nearly all of<windows.h>-- and of a C
library's headers -- is in such blocks. The engine leaves the unused ones out, as it already did for a namespace's: a
module unit that includes<windows.h>builds a BMI of kilobytes instead of megabytes, and a completion in a file
that imports many of them reads only what they use (::in a file importing 25 of them: 2.2 s before, 0.3 s now). - A completion list comes whole. clangd gives up to 1000 items instead of 100, so a list whose matches fit is
complete and the editor filters it as you type instead of asking again at every key. A client that asks at every key
anyway is answered from the word's complete list at once. In a file whose modules include Qt, the requests while a
word is typed went down by about two fifths. - Checking a module costs less where its headers come from a package or the system. A header of an mcpp or xlings
package version -- the toolchain's own, such as llvm-mingw's<windows.h>, or a library's -- is checked by the
version's install markers instead of one by one; system headers, the Windows SDK's and Visual Studio's included, once
per session, as clang itself skips them. Your project's files are checked at every request, as before. - On Windows, preambles are kept in memory with 16 GiB or more, instead of being written to the temporary
directory and scanned there. New settingmcppls.engine.preambleStorage(auto,disk,memory).
Opening a project again
- What the last session learned is kept. Which BMIs were up to date and what each module unit imports are written to
the workspace cache and read back by the next session, each checked again before it is used, so a second opening
checks instead of hashing every input and preprocessing every module unit again. - The files you last worked in are ready first. The five files last opened or edited are opened in clangd as soon as
it starts, before the editor asks; the editor takes them over as they are. With 16 GiB or more, six ASTs of files you
switch between are kept instead of three.
Seeing what happens
- A slow completion (200 ms or more) in a module importer says in the log where its time went; the log says what the
last session left and which package stores are checked by their markers. On Windows, a cache that is not on a Dev
Drive is said once, in the log and the overview (about.cacheDevDrive); see "Windows: a cache on a Dev Drive" in the
troubleshooting guide. mcppls changes no security setting.
Fixes
- A cache sweep asked for by category (
mcppls.sweepCachewithcategories) ran none of them. - A completion clangd answered late was not let go of when its word was given up.
- Two test programs never reported their failures; they do now.
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.14.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.14.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.14.