<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>rust-analyzer</title>
    <description>rust-analyzer: building a better Rust IDE</description>
    <link>https://rust-analyzer.github.io//</link>
    <atom:link href="https://rust-analyzer.github.io//feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 24 May 2026 00:53:02 +0000</pubDate>
    <lastBuildDate>Sun, 24 May 2026 00:53:02 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      <item>
        <title>Changelog #328</title>
        <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/05/18/changelog-328.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/05/18/changelog-328.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/ce81cf65580fb7a52d9f9a896092746356f39320&quot;&gt;&lt;code&gt;ce81cf6&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-05-18&quot;&gt;&lt;code&gt;2026-05-18&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2904&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;vs-code-extension-publishing-issue&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#vs-code-extension-publishing-issue&quot;&gt;&lt;/a&gt;VS Code Extension Publishing Issue&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release is not available on the VS Code Marketplace and OpenVSX due to an infrastructure issue.
Until it&amp;#8217;s fixed, you can still download it from the GitHub release page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22347&quot;&gt;&lt;code&gt;#22347&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22355&quot;&gt;&lt;code&gt;#22355&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22372&quot;&gt;&lt;code&gt;#22372&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22379&quot;&gt;&lt;code&gt;#22379&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22380&quot;&gt;&lt;code&gt;#22380&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22378&quot;&gt;&lt;code&gt;#22378&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;invalid-range-pat-type&lt;/code&gt;, &lt;code&gt;non-exhaustive-record-pat&lt;/code&gt;, &lt;code&gt;method-call-illegal-sized-bound&lt;/code&gt;, &lt;code&gt;fru-in-destructuring-assignment&lt;/code&gt;, &lt;code&gt;cannot-be-dereferenced&lt;/code&gt; and &lt;code&gt;explicit-drop-method-use&lt;/code&gt; diagnostics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22082&quot;&gt;&lt;code&gt;#22082&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22368&quot;&gt;&lt;code&gt;#22368&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22384&quot;&gt;&lt;code&gt;#22384&lt;/code&gt;&lt;/a&gt; add pattern type support.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;performance-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#performance-improvements&quot;&gt;&lt;/a&gt;Performance Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22329&quot;&gt;&lt;code&gt;#22329&lt;/code&gt;&lt;/a&gt; encode the name instead of index in &lt;code&gt;EnumVariantId&lt;/code&gt; for better incrementality.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22191&quot;&gt;&lt;code&gt;#22191&lt;/code&gt;&lt;/a&gt; use the &lt;code&gt;LineIndex&lt;/code&gt; in &lt;code&gt;RootDatabase&lt;/code&gt; in the proc macro server.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22358&quot;&gt;&lt;code&gt;#22358&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22381&quot;&gt;&lt;code&gt;#22381&lt;/code&gt;&lt;/a&gt; show &lt;code&gt;const&lt;/code&gt; and &lt;code&gt;unsafe&lt;/code&gt; in signature help.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22357&quot;&gt;&lt;code&gt;#22357&lt;/code&gt;&lt;/a&gt; show &lt;code&gt;Run&lt;/code&gt; lens for &lt;code&gt;fn main&lt;/code&gt; in bench targets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22363&quot;&gt;&lt;code&gt;#22363&lt;/code&gt;&lt;/a&gt; fix false positive &lt;code&gt;trait-impl-missing-assoc_item&lt;/code&gt; with &lt;code&gt;Self: Sized&lt;/code&gt; bounds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22376&quot;&gt;&lt;code&gt;#22376&lt;/code&gt;&lt;/a&gt; hide duplicate completions originating from &lt;code&gt;Deref&lt;/code&gt; chains.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22367&quot;&gt;&lt;code&gt;#22367&lt;/code&gt;&lt;/a&gt; fix spurious reference completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22386&quot;&gt;&lt;code&gt;#22386&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t complete &lt;code&gt;::&lt;/code&gt; before existing &lt;code&gt;::&lt;/code&gt; in paths.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22354&quot;&gt;&lt;code&gt;#22354&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t drop path segment in &lt;code&gt;qualify_path&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22344&quot;&gt;&lt;code&gt;#22344&lt;/code&gt;&lt;/a&gt; handle macro calls in &lt;code&gt;extract_function&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22335&quot;&gt;&lt;code&gt;#22335&lt;/code&gt;&lt;/a&gt; add parameter to the closures produced by &lt;code&gt;replace_method_eager_lazy&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22352&quot;&gt;&lt;code&gt;#22352&lt;/code&gt;&lt;/a&gt; (first contribution) migrate &lt;code&gt;inline_call&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22313&quot;&gt;&lt;code&gt;#22313&lt;/code&gt;&lt;/a&gt; refactor visiting and tracking of placeholder types.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22328&quot;&gt;&lt;code&gt;#22328&lt;/code&gt;&lt;/a&gt; remove interning from &lt;code&gt;#[query_group]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22119&quot;&gt;&lt;code&gt;#22119&lt;/code&gt;&lt;/a&gt; remove some usages of &lt;code&gt;DbInterner::conjure&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22391&quot;&gt;&lt;code&gt;#22391&lt;/code&gt;&lt;/a&gt; ignore &lt;code&gt;workspace/diagnostic/refresh&lt;/code&gt; in slow tests.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #327</title>
        <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/05/11/changelog-327.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/05/11/changelog-327.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/e266f5cab8f6525d0bc2ddccc0006418c534b5e6&quot;&gt;&lt;code&gt;e266f5c&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-05-11&quot;&gt;&lt;code&gt;2026-05-11&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2896&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22309&quot;&gt;&lt;code&gt;#22309&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22334&quot;&gt;&lt;code&gt;#22334&lt;/code&gt;&lt;/a&gt; (first contributions) add &lt;code&gt;functional-record-update-on-non-struct&lt;/code&gt; and &lt;code&gt;expected-array-or-slice-pat&lt;/code&gt; diagnostics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22235&quot;&gt;&lt;code&gt;#22235&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22326&quot;&gt;&lt;code&gt;#22326&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;duplicate-field&lt;/code&gt; diagnostic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22292&quot;&gt;&lt;code&gt;#22292&lt;/code&gt;&lt;/a&gt; add support for deref patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22259&quot;&gt;&lt;code&gt;#22259&lt;/code&gt;&lt;/a&gt; complete &lt;code&gt;::&lt;/code&gt; in module paths.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;performance-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#performance-improvements&quot;&gt;&lt;/a&gt;Performance Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22267&quot;&gt;&lt;code&gt;#22267&lt;/code&gt;&lt;/a&gt; improve performance of integer-based symbols.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22280&quot;&gt;&lt;code&gt;#22280&lt;/code&gt;&lt;/a&gt; cache more things related to lang items.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22303&quot;&gt;&lt;code&gt;#22303&lt;/code&gt;&lt;/a&gt; (first contribution) keep &lt;code&gt;ref&lt;/code&gt; and &lt;code&gt;mut&lt;/code&gt; when renaming bindings in macro-generated patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22284&quot;&gt;&lt;code&gt;#22284&lt;/code&gt;&lt;/a&gt; (first contribution) work around a &lt;code&gt;lsp-mode&lt;/code&gt; configuration bug.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22295&quot;&gt;&lt;code&gt;#22295&lt;/code&gt;&lt;/a&gt; (first contribution) use runnable kind to disambiguate between Cargo and shell commands.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22272&quot;&gt;&lt;code&gt;#22272&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t fetch diagnostics until proc macros are loaded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22198&quot;&gt;&lt;code&gt;#22198&lt;/code&gt;&lt;/a&gt; infer anonymous constants instead of signatures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22237&quot;&gt;&lt;code&gt;#22237&lt;/code&gt;&lt;/a&gt; provide an &lt;code&gt;InferCtxt&lt;/code&gt; to &lt;code&gt;TyLoweringContext&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22319&quot;&gt;&lt;code&gt;#22319&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t replace closure capture place types with errors if they fail to normalize.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22285&quot;&gt;&lt;code&gt;#22285&lt;/code&gt;&lt;/a&gt; unify types in &lt;code&gt;ref_match&lt;/code&gt; completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22275&quot;&gt;&lt;code&gt;#22275&lt;/code&gt;&lt;/a&gt; port async block expected type inference from &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22271&quot;&gt;&lt;code&gt;#22271&lt;/code&gt;&lt;/a&gt; port array and &lt;code&gt;ref&lt;/code&gt; expression inference from &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22299&quot;&gt;&lt;code&gt;#22299&lt;/code&gt;&lt;/a&gt; fix derive helper resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22290&quot;&gt;&lt;code&gt;#22290&lt;/code&gt;&lt;/a&gt; respect lint attributes for diagnostics that don&amp;#8217;t set their main node.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22276&quot;&gt;&lt;code&gt;#22276&lt;/code&gt;&lt;/a&gt; remove usage of &lt;code&gt;references_error&lt;/code&gt; in upvar inference.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22266&quot;&gt;&lt;code&gt;#22266&lt;/code&gt;&lt;/a&gt; fix handling of &lt;code&gt;self&lt;/code&gt; in &lt;code&gt;lower_coroutine_body_with_moved_arguments&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22318&quot;&gt;&lt;code&gt;#22318&lt;/code&gt;&lt;/a&gt; provide source map for the lowered &lt;code&gt;let self = self&lt;/code&gt; binding in async functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22274&quot;&gt;&lt;code&gt;#22274&lt;/code&gt;&lt;/a&gt; add missing lang items for the trait solver.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22282&quot;&gt;&lt;code&gt;#22282&lt;/code&gt;&lt;/a&gt; handle &lt;code&gt;#[rustc_reservation_impl = &quot;reason&quot;]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22315&quot;&gt;&lt;code&gt;#22315&lt;/code&gt;&lt;/a&gt; add whitespace to postfix completions in macro calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22286&quot;&gt;&lt;code&gt;#22286&lt;/code&gt;&lt;/a&gt; use cursor position for indentation in postfix completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22302&quot;&gt;&lt;code&gt;#22302&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t split &lt;code&gt;..=&lt;/code&gt; in &lt;code&gt;prettify_macro_expansion&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22291&quot;&gt;&lt;code&gt;#22291&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t add associated types with defaults in &lt;code&gt;add_missing_impl_members&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22304&quot;&gt;&lt;code&gt;#22304&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t offer &lt;code&gt;toggle_macro_delimiter&lt;/code&gt; on inner braces.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22312&quot;&gt;&lt;code&gt;#22312&lt;/code&gt;&lt;/a&gt; bump &lt;code&gt;rustc&lt;/code&gt; crates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22269&quot;&gt;&lt;code&gt;#22269&lt;/code&gt;&lt;/a&gt; fix nested edits in &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22308&quot;&gt;&lt;code&gt;#22308&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22204&quot;&gt;&lt;code&gt;#22204&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;split_import&lt;/code&gt; and &lt;code&gt;convert_closure_to_fn&lt;/code&gt; assists to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22261&quot;&gt;&lt;code&gt;#22261&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;missing_fields&lt;/code&gt; diagnostic to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22296&quot;&gt;&lt;code&gt;#22296&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;impl Trait&lt;/code&gt; completions to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22320&quot;&gt;&lt;code&gt;#22320&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22321&quot;&gt;&lt;code&gt;#22321&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22323&quot;&gt;&lt;code&gt;#22323&lt;/code&gt;&lt;/a&gt; migrate macro expansion to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22310&quot;&gt;&lt;code&gt;#22310&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;SourceChangeBuilder::make_mut&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22307&quot;&gt;&lt;code&gt;#22307&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;ted&lt;/code&gt;-based &lt;code&gt;increase_indent&lt;/code&gt; and &lt;code&gt;decrease_indent&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22256&quot;&gt;&lt;code&gt;#22256&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;SyntaxEditor&lt;/code&gt; version of &lt;code&gt;wrap_in_tree_list&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #326</title>
        <pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/05/04/changelog-326.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/05/04/changelog-326.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/f04c37286472e3687a2d32d3d1fad2772de515a1&quot;&gt;&lt;code&gt;f04c372&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-05-04&quot;&gt;&lt;code&gt;2026-05-04&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2887&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22238&quot;&gt;&lt;code&gt;#22238&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22239&quot;&gt;&lt;code&gt;#22239&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22253&quot;&gt;&lt;code&gt;#22253&lt;/code&gt;&lt;/a&gt; (first contributions) add &lt;code&gt;mismatched-array-pat-len&lt;/code&gt; and &lt;code&gt;unused-must-use&lt;/code&gt; diagnostics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22186&quot;&gt;&lt;code&gt;#22186&lt;/code&gt;&lt;/a&gt; diagnose trait errors 🎉.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22144&quot;&gt;&lt;code&gt;#22144&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22168&quot;&gt;&lt;code&gt;#22168&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22145&quot;&gt;&lt;code&gt;#22145&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22156&quot;&gt;&lt;code&gt;#22156&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22197&quot;&gt;&lt;code&gt;#22197&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22193&quot;&gt;&lt;code&gt;#22193&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22202&quot;&gt;&lt;code&gt;#22202&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;type-must-be-known&lt;/code&gt;, &lt;code&gt;generic-default-refers-to-self&lt;/code&gt;, &lt;code&gt;invalid-lhs-of-assignment&lt;/code&gt;, &lt;code&gt;pattern-arg-in-extern-fn&lt;/code&gt;, &lt;code&gt;non-exhaustive-record-expr&lt;/code&gt; and &lt;code&gt;union-expr-must-have-exactly-one-field&lt;/code&gt; diagnostics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21987&quot;&gt;&lt;code&gt;#21987&lt;/code&gt;&lt;/a&gt; add initial support for &lt;code&gt;gen&lt;/code&gt; blocks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22178&quot;&gt;&lt;code&gt;#22178&lt;/code&gt;&lt;/a&gt; allow renaming of elided lifetimes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22132&quot;&gt;&lt;code&gt;#22132&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22210&quot;&gt;&lt;code&gt;#22210&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;.new&lt;/code&gt; postfix completion based on expected type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22179&quot;&gt;&lt;code&gt;#22179&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;unwrap_block&lt;/code&gt; assist.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;performance-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#performance-improvements&quot;&gt;&lt;/a&gt;Performance Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22078&quot;&gt;&lt;code&gt;#22078&lt;/code&gt;&lt;/a&gt; (first contribution) store parse errors into a side table.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22192&quot;&gt;&lt;code&gt;#22192&lt;/code&gt;&lt;/a&gt; keep nonce when cloning &lt;code&gt;RootDatabase&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22187&quot;&gt;&lt;code&gt;#22187&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t intern &lt;code&gt;AdtDef&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22189&quot;&gt;&lt;code&gt;#22189&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22131&quot;&gt;&lt;code&gt;#22131&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22133&quot;&gt;&lt;code&gt;#22133&lt;/code&gt;&lt;/a&gt; drop some &lt;code&gt;Arc&lt;/code&gt;s.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22098&quot;&gt;&lt;code&gt;#22098&lt;/code&gt;&lt;/a&gt; (first contribution) avoid importing prelude paths when &lt;code&gt;imports.preferPrelude&lt;/code&gt; is disabled.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22134&quot;&gt;&lt;code&gt;#22134&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22195&quot;&gt;&lt;code&gt;#22195&lt;/code&gt;&lt;/a&gt; port pattern inference from &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22141&quot;&gt;&lt;code&gt;#22141&lt;/code&gt;&lt;/a&gt; bring type inference closer to &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22135&quot;&gt;&lt;code&gt;#22135&lt;/code&gt;&lt;/a&gt; suppress inference variables in monomorphization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22214&quot;&gt;&lt;code&gt;#22214&lt;/code&gt;&lt;/a&gt; visit all expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22169&quot;&gt;&lt;code&gt;#22169&lt;/code&gt;&lt;/a&gt; parse &lt;code&gt;impl&lt;/code&gt; restrictions after visibility.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22170&quot;&gt;&lt;code&gt;#22170&lt;/code&gt;&lt;/a&gt; parse &lt;code&gt;return #[attr] expr&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22124&quot;&gt;&lt;code&gt;#22124&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t pick an &lt;code&gt;impl Trait&lt;/code&gt; block in &lt;code&gt;generate_function&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22166&quot;&gt;&lt;code&gt;#22166&lt;/code&gt;&lt;/a&gt; fix placement of async closure capture hints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22183&quot;&gt;&lt;code&gt;#22183&lt;/code&gt;&lt;/a&gt; propagate ABI to functions declared in extern blocks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22201&quot;&gt;&lt;code&gt;#22201&lt;/code&gt;&lt;/a&gt; improve parser recovery in &lt;code&gt;(a, , b)&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22058&quot;&gt;&lt;code&gt;#22058&lt;/code&gt;&lt;/a&gt; improve &lt;code&gt;prettify_macro_expansion&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22229&quot;&gt;&lt;code&gt;#22229&lt;/code&gt;&lt;/a&gt; add parentheses in &lt;code&gt;convert_match_to_let_else&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22142&quot;&gt;&lt;code&gt;#22142&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t offer completions for already imported &lt;code&gt;Trait as _&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22154&quot;&gt;&lt;code&gt;#22154&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t complete &lt;code&gt;where&lt;/code&gt; after qualified paths.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22222&quot;&gt;&lt;code&gt;#22222&lt;/code&gt;&lt;/a&gt; emit &lt;code&gt;else&lt;/code&gt; clause in value postfix completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22240&quot;&gt;&lt;code&gt;#22240&lt;/code&gt;&lt;/a&gt; improve indentation in trait item completion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22244&quot;&gt;&lt;code&gt;#22244&lt;/code&gt;&lt;/a&gt; handle cycles in &lt;code&gt;expand_glob_import&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22150&quot;&gt;&lt;code&gt;#22150&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;is_some_and&lt;/code&gt; and &lt;code&gt;is_none_or&lt;/code&gt; in &lt;code&gt;apply_demorgan_iterator&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22151&quot;&gt;&lt;code&gt;#22151&lt;/code&gt;&lt;/a&gt; handle negation in &lt;code&gt;apply_demorgan_iterator&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22247&quot;&gt;&lt;code&gt;#22247&lt;/code&gt;&lt;/a&gt; handle match arms in &lt;code&gt;unwrap_branch&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22217&quot;&gt;&lt;code&gt;#22217&lt;/code&gt;&lt;/a&gt; add semicolon after expression in &lt;code&gt;unwrap_branch&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22184&quot;&gt;&lt;code&gt;#22184&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;unwrap_branch&lt;/code&gt; on non-block match arms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22180&quot;&gt;&lt;code&gt;#22180&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;replace_arith_op&lt;/code&gt; on compound assignments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22199&quot;&gt;&lt;code&gt;#22199&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;convert_to_guarded_return&lt;/code&gt; on &lt;code&gt;if&lt;/code&gt; expression with &lt;code&gt;else if&lt;/code&gt; clause.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22079&quot;&gt;&lt;code&gt;#22079&lt;/code&gt;&lt;/a&gt; handle &lt;code&gt;if matches!()&lt;/code&gt; in &lt;code&gt;replace_if_let_with_match&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22215&quot;&gt;&lt;code&gt;#22215&lt;/code&gt;&lt;/a&gt; fix a stack overflow when displaying projections.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22265&quot;&gt;&lt;code&gt;#22265&lt;/code&gt;&lt;/a&gt; fix panic on &lt;code&gt;impl ?Sized&lt;/code&gt; in &lt;code&gt;introduce_named_type_parameter&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22207&quot;&gt;&lt;code&gt;#22207&lt;/code&gt;&lt;/a&gt; fix some issues in &lt;code&gt;lower_coroutine_body_with_moved_arguments&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22122&quot;&gt;&lt;code&gt;#22122&lt;/code&gt;&lt;/a&gt; be more resilient to deleted directories in &lt;code&gt;Analysis::from_single_file&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22129&quot;&gt;&lt;code&gt;#22129&lt;/code&gt;&lt;/a&gt; lower non-destructuring assignments into &lt;code&gt;Pat::Expr&lt;/code&gt; instead of &lt;code&gt;Pat::Path&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22146&quot;&gt;&lt;code&gt;#22146&lt;/code&gt;&lt;/a&gt; clean up string references in postfix completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22190&quot;&gt;&lt;code&gt;#22190&lt;/code&gt;&lt;/a&gt; ignore a test that might be hanging.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22232&quot;&gt;&lt;code&gt;#22232&lt;/code&gt;&lt;/a&gt; refactor the &lt;code&gt;hir-ty&lt;/code&gt; generics data structures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22194&quot;&gt;&lt;code&gt;#22194&lt;/code&gt;&lt;/a&gt; refactor &lt;code&gt;InternedCoroutineClosureId&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22221&quot;&gt;&lt;code&gt;#22221&lt;/code&gt;&lt;/a&gt; fix incorrect offset with multiple indels.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22121&quot;&gt;&lt;code&gt;#22121&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;extract_function&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt; and remove old version of &lt;code&gt;generate_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22125&quot;&gt;&lt;code&gt;#22125&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22020&quot;&gt;&lt;code&gt;#22020&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22159&quot;&gt;&lt;code&gt;#22159&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;replace_qualified_name_with_use&lt;/code&gt;, &lt;code&gt;inline_call&lt;/code&gt; and &lt;code&gt;generate_function&lt;/code&gt; assists to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22137&quot;&gt;&lt;code&gt;#22137&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;convert_into_to_from&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt; and replace some usages of &lt;code&gt;mod_path_to_ast&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22241&quot;&gt;&lt;code&gt;#22241&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;insert_use&lt;/code&gt; and &lt;code&gt;insert_use_as_alias&lt;/code&gt; to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22245&quot;&gt;&lt;code&gt;#22245&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;AssocItemList::add_item&lt;/code&gt; to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22243&quot;&gt;&lt;code&gt;#22243&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;ast::make&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt; in &lt;code&gt;to_generic_args&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22246&quot;&gt;&lt;code&gt;#22246&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;WhereClause::add_predicate&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22242&quot;&gt;&lt;code&gt;#22242&lt;/code&gt;&lt;/a&gt; remove some unused methods in &lt;code&gt;edit_in_place&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #325</title>
        <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/04/27/changelog-325.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/04/27/changelog-325.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/8954b66d43225e62c92e8bbcc8500191b5cceb1e&quot;&gt;&lt;code&gt;8954b66&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-04-27&quot;&gt;&lt;code&gt;2026-04-27&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2878&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21979&quot;&gt;&lt;code&gt;#21979&lt;/code&gt;&lt;/a&gt; rename variables in constructors when renaming a field.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22116&quot;&gt;&lt;code&gt;#22116&lt;/code&gt;&lt;/a&gt; (first contribution) mark enum variants as deprecated when parent enum is deprecated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22101&quot;&gt;&lt;code&gt;#22101&lt;/code&gt;&lt;/a&gt; port call expression type checking and closure upvar inference from &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22107&quot;&gt;&lt;code&gt;#22107&lt;/code&gt;&lt;/a&gt; improve &quot;Go to definition&quot; on comparison operators.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22085&quot;&gt;&lt;code&gt;#22085&lt;/code&gt;&lt;/a&gt; reduce relevance of deprecated items.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22054&quot;&gt;&lt;code&gt;#22054&lt;/code&gt;&lt;/a&gt; (first contribution) de-duplicate lints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22104&quot;&gt;&lt;code&gt;#22104&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t check solver&amp;#8217;s cache validity on every access.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22105&quot;&gt;&lt;code&gt;#22105&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;wrap_unwrap_cfg_attr&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt; and replace &lt;code&gt;ast::make&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt; in few handlers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22111&quot;&gt;&lt;code&gt;#22111&lt;/code&gt;&lt;/a&gt; group unstable features in a struct.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #324</title>
        <pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/04/20/changelog-324.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/04/20/changelog-324.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/adef948679e1f550805eeb2a78d10e25c0279f54&quot;&gt;&lt;code&gt;adef948&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-04-20&quot;&gt;&lt;code&gt;2026-04-20&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2870&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21906&quot;&gt;&lt;code&gt;#21906&lt;/code&gt;&lt;/a&gt; exclude dependency and standard library results from reference search.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21740&quot;&gt;&lt;code&gt;#21740&lt;/code&gt;&lt;/a&gt; support &lt;code&gt;#[rust_analyzer::prefer_underscore_import]&lt;/code&gt; to import traits &lt;code&gt;as _&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22031&quot;&gt;&lt;code&gt;#22031&lt;/code&gt;&lt;/a&gt; (first contribution) demote &lt;code&gt;impl&lt;/code&gt; completions when an inherent &lt;code&gt;impl&lt;/code&gt; block already exists.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22083&quot;&gt;&lt;code&gt;#22083&lt;/code&gt;&lt;/a&gt; (first contribution) respect &lt;code&gt;#[deprecated]&lt;/code&gt; when deciding if a &lt;code&gt;ModuleDef&lt;/code&gt; completion is deprecated.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22046&quot;&gt;&lt;code&gt;#22046&lt;/code&gt;&lt;/a&gt; (first contribution) add parser support for unstable &lt;code&gt;type const&lt;/code&gt; items.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22022&quot;&gt;&lt;code&gt;#22022&lt;/code&gt;&lt;/a&gt; add parser support for &lt;code&gt;impl&lt;/code&gt; and &lt;code&gt;mut&lt;/code&gt; restrictions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22096&quot;&gt;&lt;code&gt;#22096&lt;/code&gt;&lt;/a&gt; use &lt;code&gt;ProofTreeVisitor&lt;/code&gt; for unsized coercion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22025&quot;&gt;&lt;code&gt;#22025&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t add extra dereference after indexing in &lt;code&gt;extract_function&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22044&quot;&gt;&lt;code&gt;#22044&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t complete unstable items that are gated by an internal feature.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22003&quot;&gt;&lt;code&gt;#22003&lt;/code&gt;&lt;/a&gt; complete variants of hidden enums through public aliases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21999&quot;&gt;&lt;code&gt;#21999&lt;/code&gt;&lt;/a&gt; fix ref-completion with keyword prefix.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22018&quot;&gt;&lt;code&gt;#22018&lt;/code&gt;&lt;/a&gt; enable completions inside strings in VS Code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22032&quot;&gt;&lt;code&gt;#22032&lt;/code&gt;&lt;/a&gt; allow ambiguity in associated type shorthands if they resolve to the same associated type from a supertrait.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22087&quot;&gt;&lt;code&gt;#22087&lt;/code&gt;&lt;/a&gt; fix incorrect lifetime hints with &lt;code&gt;self: Self&lt;/code&gt; parameter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22066&quot;&gt;&lt;code&gt;#22066&lt;/code&gt;&lt;/a&gt; recognize &lt;code&gt;#[std::prelude::vX::test]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21487&quot;&gt;&lt;code&gt;#21487&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;extract_variable&lt;/code&gt; in macro calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22067&quot;&gt;&lt;code&gt;#22067&lt;/code&gt;&lt;/a&gt; add parentheses on record literals in &lt;code&gt;replace_let_with_if_let&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22030&quot;&gt;&lt;code&gt;#22030&lt;/code&gt;&lt;/a&gt; fix MIR evaluation of sized &amp;amp;T with recursive const functions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22073&quot;&gt;&lt;code&gt;#22073&lt;/code&gt;&lt;/a&gt; fix panic on empty comments in &lt;code&gt;convert_comment_block&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22077&quot;&gt;&lt;code&gt;#22077&lt;/code&gt;&lt;/a&gt; fix a panic in &lt;code&gt;replace_if_let_with_match&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22055&quot;&gt;&lt;code&gt;#22055&lt;/code&gt;&lt;/a&gt; fixes some &lt;code&gt;upvars_mentioned&lt;/code&gt; issues.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22070&quot;&gt;&lt;code&gt;#22070&lt;/code&gt;&lt;/a&gt; handle name conflicts in &lt;code&gt;extract_type_alias&lt;/code&gt; a little better.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21835&quot;&gt;&lt;code&gt;#21835&lt;/code&gt;&lt;/a&gt; add &lt;code&gt;hir::Type::{as_raw_ptr,is_mutable_raw_ptr}&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22092&quot;&gt;&lt;code&gt;#22092&lt;/code&gt;&lt;/a&gt; synchronize function call argument check fudging with &lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22048&quot;&gt;&lt;code&gt;#22048&lt;/code&gt;&lt;/a&gt; bump &lt;code&gt;rustc&lt;/code&gt; crates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22061&quot;&gt;&lt;code&gt;#22061&lt;/code&gt;&lt;/a&gt; bump &lt;code&gt;salsa&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22050&quot;&gt;&lt;code&gt;#22050&lt;/code&gt;&lt;/a&gt; represent lower coroutines to closures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22049&quot;&gt;&lt;code&gt;#22049&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22069&quot;&gt;&lt;code&gt;#22069&lt;/code&gt;&lt;/a&gt; store a &lt;code&gt;SyntaxFactory&lt;/code&gt; inside &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22043&quot;&gt;&lt;code&gt;#22043&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22095&quot;&gt;&lt;code&gt;#22095&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22042&quot;&gt;&lt;code&gt;#22042&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22039&quot;&gt;&lt;code&gt;#22039&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;ast::make&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt; in &lt;code&gt;raw_string&lt;/code&gt;, &lt;code&gt;convert_range_for_to_while&lt;/code&gt;, &lt;code&gt;expand_glob_import&lt;/code&gt; and &lt;code&gt;generate_blanket_trait_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22091&quot;&gt;&lt;code&gt;#22091&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22036&quot;&gt;&lt;code&gt;#22036&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;generate_impl_text&lt;/code&gt; and &lt;code&gt;IdentPat::set_pat&lt;/code&gt; to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22081&quot;&gt;&lt;code&gt;#22081&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;convert_iter_for_each_to_for&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22037&quot;&gt;&lt;code&gt;#22037&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;set_visibility&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22041&quot;&gt;&lt;code&gt;#22041&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;GenericParamsOwnerEdit&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22057&quot;&gt;&lt;code&gt;#22057&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;clone_for_update&lt;/code&gt; from &lt;code&gt;move_const_to_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22063&quot;&gt;&lt;code&gt;#22063&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;LineIndexDatabase&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22065&quot;&gt;&lt;code&gt;#22065&lt;/code&gt;&lt;/a&gt; fix new Clippy lints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22084&quot;&gt;&lt;code&gt;#22084&lt;/code&gt;&lt;/a&gt; slim down &lt;code&gt;MiniCore&lt;/code&gt; &lt;code&gt;Debug&lt;/code&gt; output.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22074&quot;&gt;&lt;code&gt;#22074&lt;/code&gt;&lt;/a&gt; support &lt;code&gt;RUSTFMT_TOOLCHAIN&lt;/code&gt; for &lt;code&gt;xtask codegen&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22029&quot;&gt;&lt;code&gt;#22029&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22028&quot;&gt;&lt;code&gt;#22028&lt;/code&gt;&lt;/a&gt; run &lt;code&gt;rustdoc&lt;/code&gt; GitHub action on PRs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #323</title>
        <pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/04/13/changelog-323.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/04/13/changelog-323.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/7b6e1249b7320e16792e31ce67bb2e5f4acd6a8b&quot;&gt;&lt;code&gt;7b6e124&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-04-13&quot;&gt;&lt;code&gt;2026-04-13&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2862&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21978&quot;&gt;&lt;code&gt;#21978&lt;/code&gt;&lt;/a&gt; (first contribution) enhance runnable command placeholders.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21964&quot;&gt;&lt;code&gt;#21964&lt;/code&gt;&lt;/a&gt; (first contribution) allow passing extra arguments to &lt;code&gt;cargo metadata&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21012&quot;&gt;&lt;code&gt;#21012&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21982&quot;&gt;&lt;code&gt;#21982&lt;/code&gt;&lt;/a&gt; complete &lt;code&gt;&amp;#8594;&lt;/code&gt; in function return position.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21995&quot;&gt;&lt;code&gt;#21995&lt;/code&gt;&lt;/a&gt; (first contribution) don&amp;#8217;t let Cargo &lt;code&gt;[env]&lt;/code&gt; variables override the process ones.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21970&quot;&gt;&lt;code&gt;#21970&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21968&quot;&gt;&lt;code&gt;#21968&lt;/code&gt;&lt;/a&gt; (first contribution) load Markdown files into the VFS and watch for changes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21704&quot;&gt;&lt;code&gt;#21704&lt;/code&gt;&lt;/a&gt; (first contribution) load &lt;code&gt;rust-analyzer.toml&lt;/code&gt; in virtual workspaces.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21965&quot;&gt;&lt;code&gt;#21965&lt;/code&gt;&lt;/a&gt; improve handling of &lt;code&gt;#[cfg_attr]&lt;/code&gt; and &lt;code&gt;#[cfg]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21973&quot;&gt;&lt;code&gt;#21973&lt;/code&gt;&lt;/a&gt; take path context into account in &lt;code&gt;ImportAssets&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21962&quot;&gt;&lt;code&gt;#21962&lt;/code&gt;&lt;/a&gt; fix &lt;code&gt;SyntaxEditor&lt;/code&gt; upmapping of nodes with mapped ancestors that aren&amp;#8217;t mapped themselves.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21981&quot;&gt;&lt;code&gt;#21981&lt;/code&gt;&lt;/a&gt; emit diagnostic for &lt;code&gt;#![cfg]&lt;/code&gt;ed out crates.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21977&quot;&gt;&lt;code&gt;#21977&lt;/code&gt;&lt;/a&gt; disable the fix for &lt;code&gt;missing-fields&lt;/code&gt; when the fields are private.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22009&quot;&gt;&lt;code&gt;#22009&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22012&quot;&gt;&lt;code&gt;#22012&lt;/code&gt;&lt;/a&gt; fix spurious import completions in qualified paths with type anchors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21955&quot;&gt;&lt;code&gt;#21955&lt;/code&gt;&lt;/a&gt; add semicolon for postfix &lt;code&gt;print!&lt;/code&gt;-like completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21971&quot;&gt;&lt;code&gt;#21971&lt;/code&gt;&lt;/a&gt; check coercion, not unification, in &quot;Fill struct fields&quot;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21953&quot;&gt;&lt;code&gt;#21953&lt;/code&gt;&lt;/a&gt; improve type mismatch &quot;Add `Some`&quot; fix on block-like expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21952&quot;&gt;&lt;code&gt;#21952&lt;/code&gt;&lt;/a&gt; improve type mismatch fixes inside macro calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21920&quot;&gt;&lt;code&gt;#21920&lt;/code&gt;&lt;/a&gt; improve &lt;code&gt;add_missing_match_arms&lt;/code&gt; labels.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21957&quot;&gt;&lt;code&gt;#21957&lt;/code&gt;&lt;/a&gt; improve &lt;code&gt;onEnter&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22010&quot;&gt;&lt;code&gt;#22010&lt;/code&gt;&lt;/a&gt; fix &lt;code&gt;rustfmt&lt;/code&gt; with relative custom command.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21738&quot;&gt;&lt;code&gt;#21738&lt;/code&gt;&lt;/a&gt; fix stale diagnostics with custom &lt;code&gt;check&lt;/code&gt; command.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21969&quot;&gt;&lt;code&gt;#21969&lt;/code&gt;&lt;/a&gt; refrsh workspace when adding a Cargo config.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21988&quot;&gt;&lt;code&gt;#21988&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/22011&quot;&gt;&lt;code&gt;#22011&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21998&quot;&gt;&lt;code&gt;#21998&lt;/code&gt;&lt;/a&gt; add workflow to update generated lints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21996&quot;&gt;&lt;code&gt;#21996&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;extract_struct_from_enum_variant&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21993&quot;&gt;&lt;code&gt;#21993&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;make::trait_&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt; in &lt;code&gt;generate_trait_from_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21997&quot;&gt;&lt;code&gt;#21997&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;make&lt;/code&gt; constructors with &lt;code&gt;SyntaxFactory&lt;/code&gt; in &lt;code&gt;generate_single_field_struct_from&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21975&quot;&gt;&lt;code&gt;#21975&lt;/code&gt;&lt;/a&gt; handle token mutability in &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21960&quot;&gt;&lt;code&gt;#21960&lt;/code&gt;&lt;/a&gt; move &lt;code&gt;SyntaxEditor&lt;/code&gt; precondition handling to its constructor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21972&quot;&gt;&lt;code&gt;#21972&lt;/code&gt;&lt;/a&gt; remove some redundant &lt;code&gt;clone_subtree&lt;/code&gt;s.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21967&quot;&gt;&lt;code&gt;#21967&lt;/code&gt;&lt;/a&gt; derive &lt;code&gt;Clone, Copy, Hash&lt;/code&gt; for &lt;code&gt;vfs::ChangeKind&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21963&quot;&gt;&lt;code&gt;#21963&lt;/code&gt;&lt;/a&gt; bump ESLint and TypeScript.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21986&quot;&gt;&lt;code&gt;#21986&lt;/code&gt;&lt;/a&gt; fix &lt;code&gt;RecursiveMemoryLayoutNode&lt;/code&gt; field names in the Code extension.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21985&quot;&gt;&lt;code&gt;#21985&lt;/code&gt;&lt;/a&gt; use official npm registry for the Code extension dependencies.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #322</title>
        <pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/04/06/changelog-322.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/04/06/changelog-322.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/38fb8f92ac15853d7fa9fb47fc2d81fdd5cd6c7e&quot;&gt;&lt;code&gt;38fb8f9&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-04-06&quot;&gt;&lt;code&gt;2026-04-06&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2854&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;universal-vsix&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#universal-vsix&quot;&gt;&lt;/a&gt;Universal VSIX&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;This release adds a platform-independent VSIX that VS Code will install on platforms where rust-analyzer doesn&amp;#8217;t offer binaries.
On supported platforms, the extension should keep working as before, but a Code bug might cause it to fail to activate.
If that happens, you should uninstall and reinstall the rust-analyzer extension.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21928&quot;&gt;&lt;code&gt;#21928&lt;/code&gt;&lt;/a&gt; (first contribution) support macro expansion in &lt;code&gt;#[doc = &amp;#8230;&amp;#8203;]&lt;/code&gt; attributes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/19956&quot;&gt;&lt;code&gt;#19956&lt;/code&gt;&lt;/a&gt; implement &lt;code&gt;#[feature(more_qualified_paths)]&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21322&quot;&gt;&lt;code&gt;#21322&lt;/code&gt;&lt;/a&gt; add option to put type hints at the end of the line.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/19659&quot;&gt;&lt;code&gt;#19659&lt;/code&gt;&lt;/a&gt; add support for folding ranges in chained expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21516&quot;&gt;&lt;code&gt;#21516&lt;/code&gt;&lt;/a&gt; publish universal VSIX without a built-in server binary, for unsupported platforms.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21792&quot;&gt;&lt;code&gt;#21792&lt;/code&gt;&lt;/a&gt; (first contribution) make &lt;code&gt;matching_brace&lt;/code&gt; work when cursor the cursor is not on a bracket.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21942&quot;&gt;&lt;code&gt;#21942&lt;/code&gt;&lt;/a&gt; (first contribution) silence type mismatch diagnostic when type is unknown.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21924&quot;&gt;&lt;code&gt;#21924&lt;/code&gt;&lt;/a&gt; (first contribution) update Neovim setup instructions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21915&quot;&gt;&lt;code&gt;#21915&lt;/code&gt;&lt;/a&gt; fix a cycle in bounds lowering.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21935&quot;&gt;&lt;code&gt;#21935&lt;/code&gt;&lt;/a&gt; support &lt;code&gt;#[cfg]&lt;/code&gt; on array elements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21926&quot;&gt;&lt;code&gt;#21926&lt;/code&gt;&lt;/a&gt; handle empty expressions in parameter inlay hints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21937&quot;&gt;&lt;code&gt;#21937&lt;/code&gt;&lt;/a&gt; wrap guard in parentheses in &lt;code&gt;replace_if_let_with_match&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21938&quot;&gt;&lt;code&gt;#21938&lt;/code&gt;&lt;/a&gt; fix indent in &lt;code&gt;convert_let_else_to_match&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21954&quot;&gt;&lt;code&gt;#21954&lt;/code&gt;&lt;/a&gt; handle empty &lt;code&gt;else&lt;/code&gt; block in &lt;code&gt;convert_let_else_to_match&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21951&quot;&gt;&lt;code&gt;#21951&lt;/code&gt;&lt;/a&gt; report &quot;expected type, found &lt;code&gt;{&lt;/code&gt;&quot; in parser.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21695&quot;&gt;&lt;code&gt;#21695&lt;/code&gt;&lt;/a&gt; match trait item order in &lt;code&gt;trait_impl_redundant_assoc_item&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21936&quot;&gt;&lt;code&gt;#21936&lt;/code&gt;&lt;/a&gt; handle comma at the end of argument in &lt;code&gt;extract_variable&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21902&quot;&gt;&lt;code&gt;#21902&lt;/code&gt;&lt;/a&gt; support &lt;code&gt;env!&lt;/code&gt; completions in nested macro calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21892&quot;&gt;&lt;code&gt;#21892&lt;/code&gt;&lt;/a&gt; prioritize type completions with the same name as enum variants.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21903&quot;&gt;&lt;code&gt;#21903&lt;/code&gt;&lt;/a&gt; handle negation in &lt;code&gt;if&lt;/code&gt; postfix completion.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20864&quot;&gt;&lt;code&gt;#20864&lt;/code&gt;&lt;/a&gt; fix naming of &lt;code&gt;self&lt;/code&gt; parameter in &lt;code&gt;extract_function&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21919&quot;&gt;&lt;code&gt;#21919&lt;/code&gt;&lt;/a&gt; support labels in &lt;code&gt;convert_to_guarded_return&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21912&quot;&gt;&lt;code&gt;#21912&lt;/code&gt;&lt;/a&gt; support tail expressions in &lt;code&gt;convert_to_guarded_return&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21940&quot;&gt;&lt;code&gt;#21940&lt;/code&gt;&lt;/a&gt; support multiple snippet placeholders in VS Code extension.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21921&quot;&gt;&lt;code&gt;#21921&lt;/code&gt;&lt;/a&gt; unconditionally pass &lt;code&gt;--include-ignored&lt;/code&gt; for test runnables.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21922&quot;&gt;&lt;code&gt;#21922&lt;/code&gt;&lt;/a&gt; use the correct project root when there are multiple workspaces.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21844&quot;&gt;&lt;code&gt;#21844&lt;/code&gt;&lt;/a&gt; support file systems that don&amp;#8217;t send &lt;code&gt;Create&lt;/code&gt; events.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21881&quot;&gt;&lt;code&gt;#21881&lt;/code&gt;&lt;/a&gt; fix missing argument error messages for &lt;code&gt;sched_getaffinity&lt;/code&gt; and &lt;code&gt;getenv&lt;/code&gt; shims.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21944&quot;&gt;&lt;code&gt;#21944&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;RootQueryDb&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21931&quot;&gt;&lt;code&gt;#21931&lt;/code&gt;&lt;/a&gt; move node mutability handling to &lt;code&gt;edit_algo&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21886&quot;&gt;&lt;code&gt;#21886&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;make&lt;/code&gt; constructors with &lt;code&gt;SyntaxFactory&lt;/code&gt; in &lt;code&gt;gen_trait_fn_body&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21930&quot;&gt;&lt;code&gt;#21930&lt;/code&gt;&lt;/a&gt; refactor &lt;code&gt;add_missing_impl_members&lt;/code&gt; to use more of &lt;code&gt;SyntaxFactory&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21909&quot;&gt;&lt;code&gt;#21909&lt;/code&gt;&lt;/a&gt; allow disabling fixture support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21933&quot;&gt;&lt;code&gt;#21933&lt;/code&gt;&lt;/a&gt; ensure tracing is configured in slow tests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21806&quot;&gt;&lt;code&gt;#21806&lt;/code&gt;&lt;/a&gt; document when crate cycles can occur.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21923&quot;&gt;&lt;code&gt;#21923&lt;/code&gt;&lt;/a&gt; set VS Code extension kind explicitly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21916&quot;&gt;&lt;code&gt;#21916&lt;/code&gt;&lt;/a&gt; bump &lt;code&gt;@vscode/vsce&lt;/code&gt; and &lt;code&gt;ovsx&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #321</title>
        <pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/03/30/changelog-321.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/03/30/changelog-321.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/f1297b21119565c626320c1ffc248965fffb2527&quot;&gt;&lt;code&gt;f1297b2&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-30&quot;&gt;&lt;code&gt;2026-03-30&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2845&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21588&quot;&gt;&lt;code&gt;#21588&lt;/code&gt;&lt;/a&gt; (first contribution) fix &lt;code&gt;asm!&lt;/code&gt; &lt;code&gt;sym&lt;/code&gt; operand parsing for parenthesized &lt;code&gt;expr&lt;/code&gt; fragments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21871&quot;&gt;&lt;code&gt;#21871&lt;/code&gt;&lt;/a&gt; revert &lt;code&gt;TyLoweringContext::store&lt;/code&gt; after lowering parent defaults.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21876&quot;&gt;&lt;code&gt;#21876&lt;/code&gt;&lt;/a&gt; keep value when trying to produce a &lt;code&gt;default&lt;/code&gt; call.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21904&quot;&gt;&lt;code&gt;#21904&lt;/code&gt;&lt;/a&gt; fix panic on trailing &lt;code&gt;|&lt;/code&gt; in &lt;code&gt;unmerge_match_arm&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21838&quot;&gt;&lt;code&gt;#21838&lt;/code&gt;&lt;/a&gt; skip usages inside macro expansions in &lt;code&gt;destructure_{struct,tuple}_binding&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21860&quot;&gt;&lt;code&gt;#21860&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21865&quot;&gt;&lt;code&gt;#21865&lt;/code&gt;&lt;/a&gt; wrap ascribed type in &lt;code&gt;Option&amp;lt;&amp;gt;&lt;/code&gt; or &lt;code&gt;Result&amp;lt;&amp;gt;&lt;/code&gt; in &lt;code&gt;desugar_try_expr&lt;/code&gt; with &lt;code&gt;let&lt;/code&gt; - &lt;code&gt;else&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21744&quot;&gt;&lt;code&gt;#21744&lt;/code&gt;&lt;/a&gt; keep comments in &lt;code&gt;add_missing_match_arms&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20681&quot;&gt;&lt;code&gt;#20681&lt;/code&gt;&lt;/a&gt; fix indent after fixing &lt;code&gt;trait_impl_redundant_assoc_item&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21411&quot;&gt;&lt;code&gt;#21411&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;merge_match_arms&lt;/code&gt; on ambiguous identifier patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21709&quot;&gt;&lt;code&gt;#21709&lt;/code&gt;&lt;/a&gt; fix spurious flychecks with multiple workspaces.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21874&quot;&gt;&lt;code&gt;#21874&lt;/code&gt;&lt;/a&gt; (first contribution) migrate &lt;code&gt;generate_default_from_new&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21879&quot;&gt;&lt;code&gt;#21879&lt;/code&gt;&lt;/a&gt; (first contribution) fix bounds check in &lt;code&gt;debug_assert!&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21823&quot;&gt;&lt;code&gt;#21823&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21859&quot;&gt;&lt;code&gt;#21859&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21900&quot;&gt;&lt;code&gt;#21900&lt;/code&gt;&lt;/a&gt; implement signature type inference.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21901&quot;&gt;&lt;code&gt;#21901&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21907&quot;&gt;&lt;code&gt;#21907&lt;/code&gt;&lt;/a&gt; only allocate non-empty item blocks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21897&quot;&gt;&lt;code&gt;#21897&lt;/code&gt;&lt;/a&gt; remove &lt;code&gt;Arc&lt;/code&gt; from &lt;code&gt;GenericParams&lt;/code&gt; and &lt;code&gt;AstIdMap&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21872&quot;&gt;&lt;code&gt;#21872&lt;/code&gt;&lt;/a&gt; rename &lt;code&gt;IndentLevel::single&lt;/code&gt; to &lt;code&gt;zero&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21856&quot;&gt;&lt;code&gt;#21856&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21867&quot;&gt;&lt;code&gt;#21867&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21866&quot;&gt;&lt;code&gt;#21866&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21870&quot;&gt;&lt;code&gt;#21870&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21884&quot;&gt;&lt;code&gt;#21884&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;make&lt;/code&gt; in &lt;code&gt;replace_derive_with_manual_impl&lt;/code&gt;, &lt;code&gt;generate_impl&lt;/code&gt;, &lt;code&gt;generate_new&lt;/code&gt;, &lt;code&gt;generate_trait_impl_text_intransitive&lt;/code&gt; and &lt;code&gt;getter&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21853&quot;&gt;&lt;code&gt;#21853&lt;/code&gt;&lt;/a&gt; extract &lt;code&gt;default_fill_expr&lt;/code&gt; to &lt;code&gt;utils&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21862&quot;&gt;&lt;code&gt;#21862&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t trigger GC on slow tests, take 2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #320</title>
        <pubDate>Mon, 23 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/03/23/changelog-320.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/03/23/changelog-320.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/b42b63f390a4dab14e6efa34a70e67f5b087cc62&quot;&gt;&lt;code&gt;b42b63f&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-23&quot;&gt;&lt;code&gt;2026-03-23&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2836&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;new-features&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#new-features&quot;&gt;&lt;/a&gt;New Features&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21395&quot;&gt;&lt;code&gt;#21395&lt;/code&gt;&lt;/a&gt; change &lt;code&gt;test_name&lt;/code&gt; placeholder to &lt;code&gt;executable_arg&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21784&quot;&gt;&lt;code&gt;#21784&lt;/code&gt;&lt;/a&gt; (first contribution) don&amp;#8217;t keep empty &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; after &lt;code&gt;inline_type_alias&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21817&quot;&gt;&lt;code&gt;#21817&lt;/code&gt;&lt;/a&gt; fix overlapping edits in &lt;code&gt;convert_named_struct_to_tuple_struct&lt;/code&gt; and &lt;code&gt;convert_tuple_struct_to_named_struct&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21333&quot;&gt;&lt;code&gt;#21333&lt;/code&gt;&lt;/a&gt; fix expected type analysis for tuple struct patterns.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21424&quot;&gt;&lt;code&gt;#21424&lt;/code&gt;&lt;/a&gt; support more runnable kinds in &lt;code&gt;rust-project.json&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20407&quot;&gt;&lt;code&gt;#20407&lt;/code&gt;&lt;/a&gt; move out doc comments in &lt;code&gt;generate_trait_from_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21768&quot;&gt;&lt;code&gt;#21768&lt;/code&gt;&lt;/a&gt; keep qualifiers in function parameter completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21756&quot;&gt;&lt;code&gt;#21756&lt;/code&gt;&lt;/a&gt; support postfix &lt;code&gt;let&lt;/code&gt; completions in closures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21839&quot;&gt;&lt;code&gt;#21839&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t add a second semicolon after postfix completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21324&quot;&gt;&lt;code&gt;#21324&lt;/code&gt;&lt;/a&gt; improve indentation after postfix completions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20594&quot;&gt;&lt;code&gt;#20594&lt;/code&gt;&lt;/a&gt; fix indent in &lt;code&gt;convert_closure_to_fn&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20614&quot;&gt;&lt;code&gt;#20614&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;no_such_field&lt;/code&gt; fix for empty structs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20762&quot;&gt;&lt;code&gt;#20762&lt;/code&gt;&lt;/a&gt; add fixes for &lt;code&gt;non_exhaustive_let&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20299&quot;&gt;&lt;code&gt;#20299&lt;/code&gt;&lt;/a&gt; name trait after first method in &lt;code&gt;generate_trait_from_impl&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21775&quot;&gt;&lt;code&gt;#21775&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;inline_local_variable&lt;/code&gt; in &lt;code&gt;let&lt;/code&gt;-chains.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21473&quot;&gt;&lt;code&gt;#21473&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;unwrap_block&lt;/code&gt; on &lt;code&gt;let&lt;/code&gt;-&lt;code&gt;else&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20984&quot;&gt;&lt;code&gt;#20984&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;add_label_to_loop&lt;/code&gt; on &lt;code&gt;for&lt;/code&gt; and &lt;code&gt;while&lt;/code&gt; expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20600&quot;&gt;&lt;code&gt;#20600&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;unwrap_tuple&lt;/code&gt; on &lt;code&gt;let&lt;/code&gt; expressions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21809&quot;&gt;&lt;code&gt;#21809&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;extract_variable&lt;/code&gt; on some paths.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21822&quot;&gt;&lt;code&gt;#21822&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;add_missing_match_arms&lt;/code&gt; on commas between arms.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21850&quot;&gt;&lt;code&gt;#21850&lt;/code&gt;&lt;/a&gt; offer &lt;code&gt;add_braces&lt;/code&gt; on assignments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20628&quot;&gt;&lt;code&gt;#20628&lt;/code&gt;&lt;/a&gt; support nested lifetimes in &lt;code&gt;add_lifetime_to_type&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20625&quot;&gt;&lt;code&gt;#20625&lt;/code&gt;&lt;/a&gt; support multiple attributes in &lt;code&gt;wrap_unwrap_cfg_attr&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/20566&quot;&gt;&lt;code&gt;#20566&lt;/code&gt;&lt;/a&gt; support partial selections in &lt;code&gt;merge_imports&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21787&quot;&gt;&lt;code&gt;#21787&lt;/code&gt;&lt;/a&gt; keep extra predicates in &lt;code&gt;replace_is_method_with_if_let_method&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21828&quot;&gt;&lt;code&gt;#21828&lt;/code&gt;&lt;/a&gt; prime caches in parallel in &lt;code&gt;scip&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21843&quot;&gt;&lt;code&gt;#21843&lt;/code&gt;&lt;/a&gt; (first contribution) migrate &lt;code&gt;convert_from_to_tryfrom&lt;/code&gt; assist to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21847&quot;&gt;&lt;code&gt;#21847&lt;/code&gt;&lt;/a&gt; migrate &lt;code&gt;qualify_method_call&lt;/code&gt;, &lt;code&gt;qualify_path&lt;/code&gt; and &lt;code&gt;desugar_try_expr&lt;/code&gt; assists to &lt;code&gt;SyntaxEditor&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21832&quot;&gt;&lt;code&gt;#21832&lt;/code&gt;&lt;/a&gt; use mappings in &lt;code&gt;SyntaxFactory&lt;/code&gt; constructor methods.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21826&quot;&gt;&lt;code&gt;#21826&lt;/code&gt;&lt;/a&gt; replace &lt;code&gt;ast::make&lt;/code&gt; with &lt;code&gt;SyntaxFactory&lt;/code&gt; in a few &lt;code&gt;ide-assists&lt;/code&gt; methods.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21848&quot;&gt;&lt;code&gt;#21848&lt;/code&gt;&lt;/a&gt; ignore mapping in &lt;code&gt;expr_underscore&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21779&quot;&gt;&lt;code&gt;#21779&lt;/code&gt;&lt;/a&gt; fix printing of IR types.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21827&quot;&gt;&lt;code&gt;#21827&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t trigger GC on slow tests.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21795&quot;&gt;&lt;code&gt;#21795&lt;/code&gt;&lt;/a&gt; fix &lt;code&gt;test_loading_rust_analyzer&lt;/code&gt; when rust-project.json is present.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21796&quot;&gt;&lt;code&gt;#21796&lt;/code&gt;&lt;/a&gt; add &lt;a href=&quot;https://codecov.io/&quot;&gt;codecov.io&lt;/a&gt; badge.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
      <item>
        <title>Changelog #319</title>
        <pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://rust-analyzer.github.io//thisweek/2026/03/16/changelog-319.html</link>
        <guid isPermaLink="true">https://rust-analyzer.github.io//thisweek/2026/03/16/changelog-319.html</guid>
        <description>&lt;div id=&quot;preamble&quot;&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;paragraph&quot;&gt;
&lt;p&gt;Commit: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/commit/90c8906e6443e7cee18cece9c2621a8b1c10794c&quot;&gt;&lt;code&gt;90c8906&lt;/code&gt;&lt;/a&gt;&lt;br&gt;
Release: &lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/releases/2026-03-16&quot;&gt;&lt;code&gt;2026-03-16&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;v0.3.2828&lt;/code&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;fixes&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#fixes&quot;&gt;&lt;/a&gt;Fixes&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21793&quot;&gt;&lt;code&gt;#21793&lt;/code&gt;&lt;/a&gt; (first contribution) handle multi-byte UTF-8 identifiers in &lt;code&gt;NameGenerator::suggest_name&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21767&quot;&gt;&lt;code&gt;#21767&lt;/code&gt;&lt;/a&gt; remove crate from &lt;code&gt;EditionedFileId&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21785&quot;&gt;&lt;code&gt;#21785&lt;/code&gt;&lt;/a&gt; allow duplicate associated type shorthand resolution if it points to the same associated type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21820&quot;&gt;&lt;code&gt;#21820&lt;/code&gt;&lt;/a&gt; infer generic args for &lt;code&gt;TraitRef&lt;/code&gt; and its associated types.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21794&quot;&gt;&lt;code&gt;#21794&lt;/code&gt;&lt;/a&gt; validate naming convention for union types.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21771&quot;&gt;&lt;code&gt;#21771&lt;/code&gt;&lt;/a&gt; make file watcher recursive.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;sect1&quot;&gt;
&lt;h2 id=&quot;internal-improvements&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#internal-improvements&quot;&gt;&lt;/a&gt;Internal Improvements&lt;/h2&gt;
&lt;div class=&quot;sectionbody&quot;&gt;
&lt;div class=&quot;ulist&quot;&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21818&quot;&gt;&lt;code&gt;#21818&lt;/code&gt;&lt;/a&gt; refactor &lt;code&gt;MirLowerCtx&lt;/code&gt; to use &lt;code&gt;&amp;amp;ExpressionStore&lt;/code&gt; instead of &lt;code&gt;&amp;amp;Body&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21788&quot;&gt;&lt;code&gt;#21788&lt;/code&gt;&lt;/a&gt; don&amp;#8217;t re-query source roots per-crate in &lt;code&gt;analysis-stats&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/rust-analyzer/rust-analyzer/pull/21804&quot;&gt;&lt;code&gt;#21804&lt;/code&gt;&lt;/a&gt; disambiguate error messages when &lt;code&gt;proc-macro-srv&lt;/code&gt; changes the working directory.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      </item>
    
  </channel>
</rss>
