Releases

rust-analyzer speeds up multi-crate workspaces with shared proc-macro servers

rust-analyzer v0.3.2971 cut duplicate proc-macro work across workspaces, aiming to make macro-heavy Rust projects feel less sluggish.

Nina Kowalski··2 min read
Published
Listen to this article0:00 min
rust-analyzer speeds up multi-crate workspaces with shared proc-macro servers
Source: fasterthanli.me

rust-analyzer v0.3.2971 landed on July 13, 2026 with a change aimed straight at one of the slowest corners of Rust editing: proc-macro handling in large workspaces. The release now shares the same proc-macro servers between workspaces and uses two processes, reducing duplicate work in multi-crate projects. A quick fix for array length mismatches is the visible new feature, but the performance work is the part that should show up most clearly in daily write-compile-debug loops.

That focus makes sense for a tool that lives inside the editor. rust-analyzer is the Language Server Protocol implementation that powers completion, go-to-definition, and other IDE features in editors including VS Code, Emacs, and Vim, and proc-macro support has been a recurring trouble spot for it. Version mismatches, server crashes, and slow macro-heavy workspaces have all caused broken expansion or confusing diagnostics before, so consolidating proc-macro servers is the kind of change that can make a sprawling repository feel less brittle as soon as you open it.

AI-generated illustration
AI-generated illustration

The release also picked up support for Cargo 1.97’s resolver.lockfile-path setting, which Cargo stabilized on July 9, 2026. That option lets developers specify an alternate lockfile path, a practical fit for read-only source directories and other workflows where the default lockfile location is inconvenient. For teams juggling generated code, vendored trees, or unusual checkout layouts, that makes the language server track the same dependency story Cargo now supports without extra friction.

The rest of v0.3.2971 reads like a stabilization sweep built for people who notice when the editor hiccups. The changelog lists fixes for doc macro expansion, Default::default() completions, merge-imports panics, generate_function crashes, MIR lowering errors, #[cfg] handling in tail-expression macros, and proc-macro parsing of doc comments. It also removes dead database fields and simplifies several query paths, trimming internal complexity while tightening behavior at the edges.

rust-analyzer is developed by Ferrous Systems with support from Mozilla, Embark Studios, and freiheit.com, and releases like this show how much of its value comes from the unglamorous work of keeping macro expansion fast and dependable. In a workspace with many crates, that means fewer stalls in the proc-macro pipeline and a language server that spends less time duplicating itself and more time keeping up with the code.

This article was produced by Prism’s automated news system from verified source data, official records, and press releases, then run through automated quality and moderation checks before publishing. The system is built and supervised by the people who set the standards it runs under. Read our full AI policy.

Did this article answer your question?

Discussion

More Rust Programming News