One Language, Two IDE Engines
by Lukas Wirth and Vlad Beskrovny
What makes an IDE different from a compiler — and why does Rust stretch that distinction to its limits? This talk explores what it means for an IDE to “understand” Rust code, and why features like name resolution, type inference, and powerful macros make that understanding so complex. We’ll trace the evolution of Rust IDE support — from matklad’s and others’ early work on IntelliJ Rust plugin and RLS into modern rust-analyzer and RustRover — and highlight how ideas, people, and approaches have crossed between the two ecosystems (including a few traces like the legendary “intellijrulez”).
We’ll then examine the architectural foundations behind these tools. rust-analyzer combines the roles of LSP server and query-based computational engine, designed for interactive, incremental analysis. RustRover builds on the IntelliJ PSI framework, layering its own system of code insight and type reasoning. Comparing how both engines handle project models, name resolution, macro expansion, type inference, and trait solving reveals two distinct but converging philosophies of IDE design — and points toward the next frontier: bringing MIR-level analysis and borrow checking into the editor itself.
Vlad Beskrovny
he/himRust since 2014. Joined the JetBrains Rust plugin team in 2017 and helped turn it into RustRover - a dedicated Rust IDE released in 2024. Still building RustRover, focused on code analysis and improving the IDE experience for Rust developers.
Lukas Wirth
he/himI have been working on rust-analyzer since late 2020, leading the team since the end of 2022. I’m currently a Rust Engineer at Zed Industries. I have co-authored the Ferrocene Language Specification and I am maintaining an updated fork of the The Little Book of Rust Macros.