Rust with rust-analyzer is IMHO very good nowadays, probably on par if not better than the experience with C++ on paid IDEs. The fact Rust grammar is context-free makes writing tools way easier because there's way less room for breakage, unlike when you write an extra > in C++ and parsing burns down in flames.
(Rust’s grammar is technically not context free but the part that’s context sensitive is rarely used and even more rarely at a depth greater than one, so you’re right in spirit but I feel the need to be a bit pedantic about it for fairness’ sake)
(I know, but if you take raw literals out of the equation it more or less is, thankfully you can implement raw literals as a big huge lexer hack and ignore it during parsing. There's also macros, which are a separate pickle, but then the user more or less expects they may cause some magic, sure it's vastly better than `bob<flop>(blaz)` which is not sane in any metric I can think of)