Skip to content

Commit

Permalink
Site updated: 2023-11-27 22:32:05
Browse files Browse the repository at this point in the history
  • Loading branch information
Young-Flash committed Nov 27, 2023
1 parent 0b8f8f5 commit cd09180
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@

<span class="post-meta mr-2">
<i class="iconfont icon-chart"></i>
653
643
</span>


Expand Down Expand Up @@ -245,9 +245,9 @@ <h2 id="定位问题"><a class="markdownIt-Anchor" href="#定位问题"></a> 定
一番浏览下来,发现了这个新增的 crates/ide-diagnostics/src/handlers/trait_impl_missing_assoc_item.rs,从名字上看就很可疑,然后仔细浏览这个文件,发现正是他的问题。这个文件所在的 <a target="_blank" rel="noopener" href="https://github.com/rust-lang/rust-analyzer/pull/15895">PR</a> 增加了一个新的 diagnostic,使得 RA 可以检测出用户在为 struct impl trait 的时候哪些 associate item 没有实现。<br />
<img src="/img/blog_pic/2023/missing_assoc_item.png" srcset="/img/loading.gif" alt="" /></p>
<h2 id="解决问题"><a class="markdownIt-Anchor" href="#解决问题"></a> 解决问题</h2>
<p>这个 PR 是这样<a target="_blank" rel="noopener" href="https://github.com/rust-lang/rust-analyzer/pull/15895/files#diff-9ded74602cbdce03cc0b20f094e733658a7b43d14ffe0f9167bc79a0851e7e53R665-R704">检测未在 impl 体中实现的 associate item 的</a>,对于 <code>AssocItemId::ConstId(_) =&gt; true,</code> 的处理是直接返回 true,也就是默认为必须在 impl 体中实现而漏掉了在 trait 的定义中可能有为这个 const item 设置默认值的情况。知道了问题所在,剩下的就比较好解决了,直接将针对 const item 的处理修改为 <code>Const::from(id).value(db).is_none()</code>,也就是判断这一项有没有设置了默认值,如果有的话就不必作为 required_items 从而引发错误的 diagnostic</p>
<p>这个 PR 是这样<a target="_blank" rel="noopener" href="https://github.com/rust-lang/rust-analyzer/pull/15895/files#diff-9ded74602cbdce03cc0b20f094e733658a7b43d14ffe0f9167bc79a0851e7e53R665-R704">检测未在 impl 体中实现的 associate item 的</a>,对于 <code>AssocItemId::ConstId(_) =&gt; true,</code> 的处理是直接返回 true,也就是默认为必须在 impl 体中实现而漏掉了在 trait 的定义中可能有为这个 const item 设置默认值的情况。知道了问题所在,剩下的就比较好解决了,将针对 const item 的处理修改为 <code>Const::from(id).value(db).is_none()</code>,也就是判断这一项有没有设置了默认值,如果有的话就不必作为 required_items 从而引发错误的 diagnostic</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs rust"><span class="hljs-keyword">let</span> <span class="hljs-variable">required_items</span> = items.<span class="hljs-title function_ invoke__">iter</span>().<span class="hljs-title function_ invoke__">filter</span>(|&amp;(_, assoc)| <span class="hljs-keyword">match</span> *assoc &#123;<br> AssocItemId::<span class="hljs-title function_ invoke__">FunctionId</span>(it) =&gt; !db.<span class="hljs-title function_ invoke__">function_data</span>(it).<span class="hljs-title function_ invoke__">has_body</span>(),<br> AssocItemId::<span class="hljs-title function_ invoke__">ConstId</span>(_) =&gt; <span class="hljs-literal">true</span>,<br> AssocItemId::<span class="hljs-title function_ invoke__">TypeAliasId</span>(it) =&gt; db.<span class="hljs-title function_ invoke__">type_alias_data</span>(it).type_ref.<span class="hljs-title function_ invoke__">is_none</span>(),<br>&#125;);<br></code></pre></td></tr></table></figure>
<p>接着再为这个小 fix 增加一个验证的 test,跑一遍 cargo test 确保所有测试都没问题之后就可以提 PR 修复了:<a target="_blank" rel="noopener" href="https://github.com/rust-lang/rust-analyzer/pull/15911">fix: handle default constant values in trait_impl_missing_assoc_item diagnostic</a></p>
<p>接着再为这个小 fix 增加一个验证的 test,跑一遍 cargo test 确保所有测试都没问题之后就可以提 <a target="_blank" rel="noopener" href="https://github.com/rust-lang/rust-analyzer/pull/15911">PR</a> 修复了</p>
<figure class="highlight rust"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs rust"> <span class="hljs-meta">#[test]</span><br><span class="hljs-keyword">fn</span> <span class="hljs-title function_">trait_with_default_value</span>() &#123;<br> <span class="hljs-title function_ invoke__">check_diagnostics</span>(<br> <span class="hljs-string">r#&quot;</span><br><span class="hljs-string">trait Marker &#123;</span><br><span class="hljs-string"> const FLAG: bool = false;</span><br><span class="hljs-string">&#125;</span><br><span class="hljs-string">struct Foo;</span><br><span class="hljs-string">impl Marker for Foo &#123;&#125;</span><br><span class="hljs-string"> &quot;#</span>,<br> )<br>&#125;<br></code></pre></td></tr></table></figure>
<h2 id="最后"><a class="markdownIt-Anchor" href="#最后"></a> 最后</h2>
<p>Rust Analyzer 会自动发 nightly releases,这样看来频繁发版还是有好处的,相邻版本之间的 diff 不会太大,发版后引发的 bug 才比较好定位,要是版本之间的 diff 上千个文件我可能就不会一个个去看了哈哈哈</p>
Expand Down
48 changes: 24 additions & 24 deletions categories/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dca0003k0ev5nttdhgq" role="tab" data-toggle="collapse" href="#collapse-clph00dca0003k0ev5nttdhgq"
id="heading-clph0co4200039gev14d8gz39" role="tab" data-toggle="collapse" href="#collapse-clph0co4200039gev14d8gz39"
aria-expanded="false"
>
技术
Expand All @@ -203,8 +203,8 @@
<div class="category-collapse">


<div id="collapse-clph00dca0003k0ev5nttdhgq" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dca0003k0ev5nttdhgq">
<div id="collapse-clph0co4200039gev14d8gz39" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co4200039gev14d8gz39">



Expand Down Expand Up @@ -295,7 +295,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dct0014k0eve0y53k19" role="tab" data-toggle="collapse" href="#collapse-clph00dct0014k0eve0y53k19"
id="heading-clph0co4j00149gevgse421da" role="tab" data-toggle="collapse" href="#collapse-clph0co4j00149gevgse421da"
aria-expanded="false"
>
开源
Expand All @@ -308,8 +308,8 @@
<div class="category-collapse">


<div id="collapse-clph00dct0014k0eve0y53k19" class="collapse in " role="tabpanel"
aria-labelledby="heading-clph00dct0014k0eve0y53k19">
<div id="collapse-clph0co4j00149gevgse421da" class="collapse in " role="tabpanel"
aria-labelledby="heading-clph0co4j00149gevgse421da">



Expand All @@ -318,7 +318,7 @@
<div class="category-sub row">
<a
class="category-subitem collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dd1001vk0eva541bhii" role="tab" data-toggle="collapse" href="#collapse-clph00dd1001vk0eva541bhii"
id="heading-clph0co4s001w9gevfjhg99fs" role="tab" data-toggle="collapse" href="#collapse-clph0co4s001w9gevfjhg99fs"
aria-expanded="false"
>
Rust Analyzer
Expand All @@ -331,8 +331,8 @@
<div class="category-collapse">


<div id="collapse-clph00dd1001vk0eva541bhii" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dd1001vk0eva541bhii">
<div id="collapse-clph0co4s001w9gevfjhg99fs" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co4s001w9gevfjhg99fs">



Expand Down Expand Up @@ -367,7 +367,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dcz001nk0evb84f883r" role="tab" data-toggle="collapse" href="#collapse-clph00dcz001nk0evb84f883r"
id="heading-clph0co4p001o9gevbmwpglaf" role="tab" data-toggle="collapse" href="#collapse-clph0co4p001o9gevbmwpglaf"
aria-expanded="false"
>
Rust
Expand All @@ -380,8 +380,8 @@
<div class="category-collapse">


<div id="collapse-clph00dcz001nk0evb84f883r" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dcz001nk0evb84f883r">
<div id="collapse-clph0co4p001o9gevbmwpglaf" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co4p001o9gevbmwpglaf">



Expand Down Expand Up @@ -431,7 +431,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dci000dk0ev3i9z7pod" role="tab" data-toggle="collapse" href="#collapse-clph00dci000dk0ev3i9z7pod"
id="heading-clph0co4a000d9gevfzi1gmdg" role="tab" data-toggle="collapse" href="#collapse-clph0co4a000d9gevfzi1gmdg"
aria-expanded="false"
>
GSoC
Expand All @@ -444,8 +444,8 @@
<div class="category-collapse">


<div id="collapse-clph00dci000dk0ev3i9z7pod" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dci000dk0ev3i9z7pod">
<div id="collapse-clph0co4a000d9gevfzi1gmdg" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co4a000d9gevfzi1gmdg">



Expand Down Expand Up @@ -488,7 +488,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dd90026k0ev80h65wbw" role="tab" data-toggle="collapse" href="#collapse-clph00dd90026k0ev80h65wbw"
id="heading-clph0co4w00269gevg5tz6zim" role="tab" data-toggle="collapse" href="#collapse-clph0co4w00269gevg5tz6zim"
aria-expanded="false"
>
瞎搞
Expand All @@ -501,8 +501,8 @@
<div class="category-collapse">


<div id="collapse-clph00dd90026k0ev80h65wbw" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dd90026k0ev80h65wbw">
<div id="collapse-clph0co4w00269gevg5tz6zim" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co4w00269gevg5tz6zim">



Expand All @@ -524,7 +524,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00ddc002ek0ev0xup8ksg" role="tab" data-toggle="collapse" href="#collapse-clph00ddc002ek0ev0xup8ksg"
id="heading-clph0co56002e9gevhx76h621" role="tab" data-toggle="collapse" href="#collapse-clph0co56002e9gevhx76h621"
aria-expanded="false"
>
工具
Expand All @@ -537,8 +537,8 @@
<div class="category-collapse">


<div id="collapse-clph00ddc002ek0ev0xup8ksg" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00ddc002ek0ev0xup8ksg">
<div id="collapse-clph0co56002e9gevhx76h621" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co56002e9gevhx76h621">



Expand All @@ -560,7 +560,7 @@
<div class="category row">
<a
class="category-item collapsed list-group-item category-item-action col-10 col-md-11"
id="heading-clph00dde002nk0evefrfadqz" role="tab" data-toggle="collapse" href="#collapse-clph00dde002nk0evefrfadqz"
id="heading-clph0co58002o9gevbs4p4vpw" role="tab" data-toggle="collapse" href="#collapse-clph0co58002o9gevbs4p4vpw"
aria-expanded="false"
>
工作
Expand All @@ -573,8 +573,8 @@
<div class="category-collapse">


<div id="collapse-clph00dde002nk0evefrfadqz" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph00dde002nk0evefrfadqz">
<div id="collapse-clph0co58002o9gevbs4p4vpw" class="collapse in" role="tabpanel"
aria-labelledby="heading-clph0co58002o9gevbs4p4vpw">



Expand Down
Loading

0 comments on commit cd09180

Please sign in to comment.