rust-analyzer rust-analyzer: building a better Rust IDE https://rust-analyzer.github.io// Mon, 16 Mar 2026 05:33:25 +0000 Mon, 16 Mar 2026 05:33:25 +0000 Jekyll v3.9.0 Changelog #319 Mon, 16 Mar 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/03/16/changelog-319.html https://rust-analyzer.github.io//thisweek/2026/03/16/changelog-319.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/90c8906e6443e7cee18cece9c2621a8b1c10794c"><code>90c8906</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-16"><code>2026-03-16</code></a> (<code>v0.3.2828</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21793"><code>#21793</code></a> (first contribution) handle multi-byte UTF-8 identifiers in <code>NameGenerator::suggest_name</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21767"><code>#21767</code></a> remove crate from <code>EditionedFileId</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21785"><code>#21785</code></a> allow duplicate associated type shorthand resolution if it points to the same associated type.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21820"><code>#21820</code></a> infer generic args for <code>TraitRef</code> and its associated types.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21794"><code>#21794</code></a> validate naming convention for union types.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21771"><code>#21771</code></a> make file watcher recursive.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21818"><code>#21818</code></a> refactor <code>MirLowerCtx</code> to use <code>&amp;ExpressionStore</code> instead of <code>&amp;Body</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21788"><code>#21788</code></a> don&#8217;t re-query source roots per-crate in <code>analysis-stats</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21804"><code>#21804</code></a> disambiguate error messages when <code>proc-macro-srv</code> changes the working directory.</p> </li> </ul> </div> </div> </div> Changelog #318 Mon, 09 Mar 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/03/09/changelog-318.html https://rust-analyzer.github.io//thisweek/2026/03/09/changelog-318.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/51966da92da795f1cda89bef70d7c61266d4123a"><code>51966da</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-09"><code>2026-03-09</code></a> (<code>v0.3.2819</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21752"><code>#21752</code></a> go to <code>From</code> impl when on "Go to definition" for <code>?</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21745"><code>#21745</code></a> fix a bug in associated type lowering.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21750"><code>#21750</code></a> don&#8217;t use <code>TypingMode::PostAnalysis</code> for IDE method resolution.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21747"><code>#21747</code></a> allow never coercions in struct update syntax.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21726"><code>#21726</code></a> align <code>is_rust</code> ABI check with <code>rustc</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21705"><code>#21705</code></a> support expressions in <code>cfg_select!</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21728"><code>#21728</code></a> use correct range for <code>add_missing_match_arms</code> in macro calls.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21719"><code>#21719</code></a> improve formatting in <code>replace_if_let_with_match</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21687"><code>#21687</code></a> offer <code>destructure_struct_binding</code> on <code>self</code> parameters.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21671"><code>#21671</code></a> complete postfix <code>let</code> on references in <code>match</code> arms.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21770"><code>#21770</code></a> update VFS when a watched file is deleted.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21763"><code>#21763</code></a> tweak <code>-Zlockfile-path</code> pre-release check for <code>beta</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21782"><code>#21782</code></a> (first contribution) add <code>rust-analyzer parse --json</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21755"><code>#21755</code></a> (first contribution) add <code>has_pending</code> methods to <code>Incoming</code>/<code>Outgoing</code>/<code>ReqQueue</code> in <code>lsp_server</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21764"><code>#21764</code></a> improve <code>smol_str</code> API surface in anticipation for <code>1.0.0</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21774"><code>#21774</code></a> migrate <code>unqualify_method_call</code> assist to <code>SyntaxEditor</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21734"><code>#21734</code></a> replace <code>ast::make</code> in already migrated assists.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21660"><code>#21660</code></a> set up <code>codecov</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21732"><code>#21732</code></a> define rules for LLMs.</p> </li> </ul> </div> </div> </div> Changelog #317 Mon, 02 Mar 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/03/02/changelog-317.html https://rust-analyzer.github.io//thisweek/2026/03/02/changelog-317.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/566fe415d158452c72feb026f43e8d81e249ccb0"><code>566fe41</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-02"><code>2026-03-02</code></a> (<code>v0.3.2811</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21699"><code>#21699</code></a> enable diagnostic for adding auto traits by casting <code>*dyn Tr</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21654"><code>#21654</code></a> mark the RHS of compound assignments as <code>ExprIsRead::Yes</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21725"><code>#21725</code></a> fix wrong condition in <code>Visibility::min</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21669"><code>#21669</code></a> support <code>Span::parent</code> in proc macro expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21716"><code>#21716</code></a> use <code>-Zlockfile-path</code> on pre-release 1.95 toolchains as well.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21708"><code>#21708</code></a> don&#8217;t panic on invalid LSP notifications.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21706"><code>#21706</code></a> don&#8217;t duplicate enum variants in pattern completion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21698"><code>#21698</code></a> fix scrutinee indent in <code>replace_if_let_with_match</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21710"><code>#21710</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21720"><code>#21720</code></a> (first contribution) migrate <code>fix_visibility</code> and <code>generate_derive</code> assists to <code>SyntaxEditor</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21681"><code>#21681</code></a> skip <code>rustfmt</code> test if nightly toolchain is missing.</p> </li> </ul> </div> </div> </div> Changelog #316 Mon, 23 Feb 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/02/23/changelog-316.html https://rust-analyzer.github.io//thisweek/2026/02/23/changelog-316.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/0c746f699034e70e1c3f11036b8c2895a0b1071c"><code>0c746f6</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-02-23"><code>2026-02-23</code></a> (<code>v0.3.2803</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21635"><code>#21635</code></a> (first contribution) improve <code>#[cfg]</code> handling when inserting or merging imports.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21665"><code>#21665</code></a> (first contribution) don&#8217;t qualify parameter names in <code>add_missing_impl_members</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21675"><code>#21675</code></a> (first contribution) exclude references in macro calls inside tests when <code>excludeTests</code> is enabled.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21664"><code>#21664</code></a> handle cycles in <code>sizedness_constraint_for_ty</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21652"><code>#21652</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21692"><code>#21692</code></a> fix predicates of built-in derive traits with two parameters defaulting to <code>Self</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21655"><code>#21655</code></a> complete derive helpers on empty namerefs.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21594"><code>#21594</code></a> complete postfix <code>let</code> and <code>letm</code> in match arms.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21600"><code>#21600</code></a> complete postfix <code>let</code> on block tail expression.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21650"><code>#21650</code></a> don&#8217;t complete suggested parameters in complex patterns.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21536"><code>#21536</code></a> offer <code>toggle_macro_delimiter</code> in nested macro calls.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21623"><code>#21623</code></a> offer <code>replace_is_method_with_if_let_method</code> on <code>is_some_and</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21684"><code>#21684</code></a> pick the enclosing instead of first impl block in <code>generate_function</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21688"><code>#21688</code></a> correctly parenthesize inverted condition in <code>convert_bool_then</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/20353"><code>#20353</code></a> support selecting only a subset of fields in <code>generate_getter_or_setter</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21389"><code>#21389</code></a> handle references better in <code>convert_to_guarded_return</code>, <code>replace_if_let_with_match</code> and <code>replace_let_with_if_let</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21657"><code>#21657</code></a> support <code>Span::source</code> in proc macro expansion.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21631"><code>#21631</code></a> refactor handling of associated type shorthands.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21630"><code>#21630</code></a> use <code>CARGO_RESOLVER_LOCKFILE_PATH</code> for lockfile copies on <code>1.95</code> and later.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21643"><code>#21643</code></a> replace <code>edit_in_place::Indent</code> in <code>generate_impl</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21661"><code>#21661</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21666"><code>#21666</code></a> add integration tests for flycheck.</p> </li> </ul> </div> </div> </div> Changelog #315 Mon, 16 Feb 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/02/16/changelog-315.html https://rust-analyzer.github.io//thisweek/2026/02/16/changelog-315.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/00a9173e57f5c4ba45e380ce065b31afb17436ad"><code>00a9173</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-02-16"><code>2026-02-16</code></a> (<code>v0.3.2795</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21574"><code>#21574</code></a> filter auto-import candidates to make sure the resulting path resolves.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21591"><code>#21591</code></a> split long parameter lists into multiple lines for hover.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21647"><code>#21647</code></a> (first contribution) handle <code>ref mut</code> bindings in <code>contains_explicit_ref_binding</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21649"><code>#21649</code></a> treat dereferencing <code>*mut !</code> right-hand side values in assignments as reads.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21611"><code>#21611</code></a> update <code>allow_normalization</code> to match <code>rustc</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21627"><code>#21627</code></a> revert "implement fine-grained request cancellation support".</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21644"><code>#21644</code></a> revert "fix stale diagnostics with <code>rust-project.json</code> and <code>rustc</code> JSON".</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21632"><code>#21632</code></a> treat <code>extern fn</code> parameters as identifiers, not patterns.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21633"><code>#21633</code></a> don&#8217;t resolve proc macros in value as functions outside their defining crate.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21608"><code>#21608</code></a> use the right index for the close span in <code>set_top_subtree_delimiter_span</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21402"><code>#21402</code></a> don&#8217;t insert semicolon after function call in array literal.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21583"><code>#21583</code></a> keep associated type bounds in <code>replace_derive_with_manual_impl</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21381"><code>#21381</code></a> fix <code>Self</code> handling in <code>inline_call</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21609"><code>#21609</code></a> use <code>rayon</code> for proc macro loading.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21606"><code>#21606</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21507"><code>#21507</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21618"><code>#21618</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21619"><code>#21619</code></a> migrate <code>generate_getter_or_setter</code>, <code>introduce_named_lifetime</code>, <code>destructure_tuple_binding</code> and <code>convert_tuple_return_type</code> assists to <code>SyntaxEditor</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21636"><code>#21636</code></a> replace <code>edit_in_place::Indent</code> in migrated assists.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21584"><code>#21584</code></a> add expression, pattern and binding types iterators to <code>DefWithBody</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21581"><code>#21581</code></a> run clippy as a separate CI step.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21628"><code>#21628</code></a> temporarily pin <code>miri</code> job toolchain.</p> </li> </ul> </div> </div> </div> Changelog #314 Mon, 09 Feb 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/02/09/changelog-314.html https://rust-analyzer.github.io//thisweek/2026/02/09/changelog-314.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/c75729db6845c73605115b18d819917dbf6a8972"><code>c75729d</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-02-09"><code>2026-02-09</code></a> (<code>v0.3.2786</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21380"><code>#21380</code></a> implement fine-grained request cancellation support.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21572"><code>#21572</code></a> add support for new <code>try { &#8230;&#8203; }</code> and <code>try bikeshed Ty { &#8230;&#8203;}</code> blocks.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21561"><code>#21561</code></a> fix a glob issue affecting <code>windows::core::HRESULT</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21579"><code>#21579</code></a> fix a panic on lowering cycles.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21573"><code>#21573</code></a> infer the expected len in <code>include_bytes!()</code> to avoid type mismatches.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21569"><code>#21569</code></a> parenthesise more cases like <code>&amp;(impl Trait1 + Trait2)</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21578"><code>#21578</code></a> use <code>display_source_code()</code> in <code>ReferenceConversion</code> to avoid trying to parse <code>{unknown}</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21526"><code>#21526</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21557"><code>#21557</code></a> complete postfix <code>not</code> and <code>let</code> in conditions.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21508"><code>#21508</code></a> emit <code>else</code> branch in <code>move_guard</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21571"><code>#21571</code></a> fix stale diagnostics with <code>rust-project.json</code> and <code>rustc</code> JSON.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21580"><code>#21580</code></a> truncate display version of commands consistently.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21488"><code>#21488</code></a> remove <code>Edition::CURRENT_FIXME</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21599"><code>#21599</code></a> simplify binding hash computation in syntax highlighting.</p> </li> </ul> </div> </div> </div> Changelog #313 Mon, 02 Feb 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/02/02/changelog-313.html https://rust-analyzer.github.io//thisweek/2026/02/02/changelog-313.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/7cb789d98202b88c34e9710e53f8aeac0fa5096e"><code>7cb789d</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-02-02"><code>2026-02-02</code></a> (<code>v0.3.2777</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21408"><code>#21408</code></a> add support for default field values.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21460"><code>#21460</code></a> add support for <code>#![feature(new_range)]</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21564"><code>#21564</code></a> fix upvar analysis of nested closures and re-enable <code>unused_variables</code> and <code>unused_mut</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21527"><code>#21527</code></a> match <code>&#8658;</code> and <code>==</code> after <code>meta</code> in macros.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21528"><code>#21528</code></a> handle <code>Self::EnumVariant</code> and <code>Self</code> on traits in doclinks.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21533"><code>#21533</code></a> fix panic when an opaque was constrained to an impossible type in method autoderef.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21555"><code>#21555</code></a> clear diagnostics on panic.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21542"><code>#21542</code></a> complete inferred types in statics.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21495"><code>#21495</code></a> complete <code>else</code> before tuples.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21513"><code>#21513</code></a> use binding name for the new function in <code>extract_function</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21522"><code>#21522</code></a> add semicolon in <code>toggle_macro_delimiter</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21514"><code>#21514</code></a> handle <code>continue</code> in <code>convert_range_for_to_while</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21534"><code>#21534</code></a> don&#8217;t panic if spawning the workspace discovery command fails.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21548"><code>#21548</code></a> make JSON and postcard protocols explicit, drop generic <code>Codec</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21410"><code>#21410</code></a> handle cancellation in bidirectional proc macro calls.</p> </li> </ul> </div> </div> </div> Changelog #312 Mon, 26 Jan 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/01/26/changelog-312.html https://rust-analyzer.github.io//thisweek/2026/01/26/changelog-312.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/2532c48f1ed25de1b90d0287c364ee4f306bec0e"><code>2532c48</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-01-26"><code>2026-01-26</code></a> (<code>v0.3.2769</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21497"><code>#21497</code></a> (first contribution) allow const evaluation errors in method resolution.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21491"><code>#21491</code></a> insert type variables for statics.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21490"><code>#21490</code></a> don&#8217;t mix up regular and built-in derives in "Expand macro recursively".</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21485"><code>#21485</code></a> avoid emitting redundant block in <code>move_guard</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21499"><code>#21499</code></a> don&#8217;t offer <code>apply_demorgan</code> on <code>if let</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21492"><code>#21492</code></a> fix parameter capture and drop order in async functions.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21385"><code>#21385</code></a> parallelize proc macro expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21479"><code>#21479</code></a> add tests for bidirectional communication in proc macro expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21509"><code>#21509</code></a> add tests for renaming keywords in imports.</p> </li> </ul> </div> </div> </div> Changelog #311 Mon, 19 Jan 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/01/19/changelog-311.html https://rust-analyzer.github.io//thisweek/2026/01/19/changelog-311.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/080e70378c543d26a3a817899cb66934ba76360b"><code>080e703</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-01-19"><code>2026-01-19</code></a> (<code>v0.3.2761</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21483"><code>#21483</code></a> trigger flycheck when non-workspace files get modified.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21475"><code>#21475</code></a> (first contribution) look up flycheck by ID instead of vector index.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21462"><code>#21462</code></a> sync cast checks to <code>rustc</code> once again.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21456"><code>#21456</code></a> make <code>naked_asm!()</code> always return <code>!</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21364"><code>#21364</code></a> fix lowering crash with supertrait predicates.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21445"><code>#21445</code></a> disable <code>unused_variables</code> and <code>unused_mut</code> warnings.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21459"><code>#21459</code></a> hide macro-generated renamed imports from symbol index.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21464"><code>#21464</code></a> respect re-exports in path symbol search.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21484"><code>#21484</code></a> don&#8217;t show sysroot dependencies in symbol search.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21451"><code>#21451</code></a> complete <code>mut</code> and <code>raw</code> on <code>&amp;x.foo()</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21442"><code>#21442</code></a> keep <code>#[cfg]</code> and <code>#[track_caller]</code> after <code>extract_function</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21412"><code>#21412</code></a> keep guard expression in <code>move_guard</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/20946"><code>#20946</code></a> offer <code>convert_to_guarded_return</code> on <code>if let &#8230;&#8203; else</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21465"><code>#21465</code></a> don&#8217;t offer <code>remove_parentheses</code> on <code>(2 as i32) &lt; 3</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21458"><code>#21458</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21443"><code>#21443</code></a> migrate <code>unwrap_block</code> and <code>generate_mut_trait_impl</code> assists to <code>SyntaxEditor</code>.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21466"><code>#21466</code></a> remove <code>postcard-legacy</code> proc macro server protocol.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21468"><code>#21468</code></a> improve <code>workspace.discoverConfig</code> docs.</p> </li> </ul> </div> </div> </div> Changelog #310 Mon, 12 Jan 2026 00:00:00 +0000 https://rust-analyzer.github.io//thisweek/2026/01/12/changelog-310.html https://rust-analyzer.github.io//thisweek/2026/01/12/changelog-310.html <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p>Commit: <a href="https://github.com/rust-analyzer/rust-analyzer/commit/dd4877761e927e985593f756e8d71e64f1a99241"><code>dd48777</code></a><br> Release: <a href="https://github.com/rust-analyzer/rust-analyzer/releases/2026-01-12"><code>2026-01-12</code></a> (<code>v0.3.2753</code>)</p> </div> </div> </div> <div class="sect1"> <h2 id="new-features"><a class="anchor" href="#new-features"></a>New Features</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21415"><code>#21415</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21446"><code>#21446</code></a> allow Rust paths in symbol search.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/18043"><code>#18043</code></a> support configuring flycheck using <code>workspace.discoverConfig</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="performance-improvements"><a class="anchor" href="#performance-improvements"></a>Performance Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21407"><code>#21407</code></a> reuse scratch allocations for <code>try_evaluate_obligations</code>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="fixes"><a class="anchor" href="#fixes"></a>Fixes</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21414"><code>#21414</code></a> (first contribution) include traits defined in other crates in flyimport.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21436"><code>#21436</code></a> (first contribution) handle <code>#[ignore = "reason"]</code> on tests.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21405"><code>#21405</code></a> (first contribution) support <code>Span::line</code> and <code>Span::column</code> in proc macro expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21416"><code>#21416</code></a> support <code>Span::byte_range</code> in proc macro expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21421"><code>#21421</code></a> fix recursive built-in derive expansion.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21399"><code>#21399</code></a> properly lower <code>SelfOnly</code> predicates.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21434"><code>#21434</code></a> remove code made redundant by method resolution rewrite.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21432"><code>#21432</code></a> fix missing lifetimes diagnostics with function pointers.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21420"><code>#21420</code></a> ignore escapes when string highlighting is disabled.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="internal-improvements"><a class="anchor" href="#internal-improvements"></a>Internal Improvements</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21438"><code>#21438</code></a>, <a href="https://github.com/rust-analyzer/rust-analyzer/pull/21439"><code>#21439</code></a> add integration test infrastructure to proc macro server.</p> </li> <li> <p><a href="https://github.com/rust-analyzer/rust-analyzer/pull/21433"><code>#21433</code></a> include private definitions in generated docs.</p> </li> </ul> </div> </div> </div>