It's hard to understate how much of a difference rust-analyzer makes. Rust is a complex language, and the compiler is very pedantic. This makes it very hard for beginners--even with lots of systems experience--to scan lengthy compiler error messages, to locate the relative line that it is complaining about (necessary for context), and to try to make sense of the error (Rust error messages are very good, but good messaging can only get you so far with respect to difficult concepts like lifetimes). This feedback loop is on the order of minutes, and it only starts when the user invokes `cargo build` or similar. Rust-analyzer dramatically shortens this feedback loop by _immediately_ highlighting errors: fewer changes since the last known good state, and it visually points you to the errant expression.
For me, this (coupled with non-lexical lifetimes and error handling improvements) made the difference between "I can't justify using Rust because I can't be sufficiently productive" and "the productivity hit is sufficiently small that it makes good sense to use Rust for some of the applications I write, especially factoring in its rate of improvement".