]> git.lizzy.rs Git - rust.git/commitdiff
highlight: trait path
authorbitgaoshu <bitgaoshu@gmail.com>
Fri, 24 Jun 2022 14:41:07 +0000 (22:41 +0800)
committerbitgaoshu <bitgaoshu@gmail.com>
Fri, 24 Jun 2022 15:04:35 +0000 (23:04 +0800)
crates/ide-assists/src/handlers/qualify_method_call.rs
crates/ide/src/syntax_highlighting/highlight.rs
crates/ide/src/syntax_highlighting/test_data/highlight_unsafe.html

index 71d3e0b212f84dbd4b09d6e0782bd51fa06f5119..61cb2f04792713d1027633dd9f5f1c7c5f1782d4 100644 (file)
@@ -69,17 +69,10 @@ fn item_for_path_search(db: &dyn HirDatabase, item: ItemInNs) -> Option<ItemInNs
         ItemInNs::Types(_) | ItemInNs::Values(_) => match item_as_assoc(db, item) {
             Some(assoc_item) => match assoc_item.container(db) {
                 AssocItemContainer::Trait(trait_) => ItemInNs::from(ModuleDef::from(trait_)),
-                AssocItemContainer::Impl(impl_) => {
-                    let impled_trait = if matches!(assoc_item, AssocItem::Function(..)) {
-                        impl_.trait_(db)
-                    } else {
-                        None
-                    };
-                    match impled_trait {
-                        None => ItemInNs::from(ModuleDef::from(impl_.self_ty(db).as_adt()?)),
-                        Some(t) => ItemInNs::from(ModuleDef::from(t)),
-                    }
-                }
+                AssocItemContainer::Impl(impl_) => match impl_.trait_(db) {
+                    None => ItemInNs::from(ModuleDef::from(impl_.self_ty(db).as_adt()?)),
+                    Some(trait_) => ItemInNs::from(ModuleDef::from(trait_)),
+                },
             },
             None => item,
         },
index 4c5bdfd967cadba109ea6222894b6487f2d788c7..121ddbc24b698c9e89e6a1f20e4bf7a3244ac773 100644 (file)
@@ -510,7 +510,11 @@ fn highlight_method_call(
     if func.is_async(sema.db) {
         h |= HlMod::Async;
     }
-    if func.as_assoc_item(sema.db).and_then(|it| it.containing_trait(sema.db)).is_some() {
+    if func
+        .as_assoc_item(sema.db)
+        .and_then(|it| it.containing_trait_or_trait_impl(sema.db))
+        .is_some()
+    {
         h |= HlMod::Trait;
     }
 
index 885aef16681d53b6a553c4502f8474a729c830e9..0716bae7513b9550553f6735b20bfc53cbc1dce7 100644 (file)
@@ -121,6 +121,6 @@ pre                 { color: #DCDCCC; background: #3F3F3F; font-size: 22px; padd
         <span class="keyword">let</span> <span class="struct">Packed</span> <span class="brace">{</span> <span class="field">a</span><span class="colon">:</span> <span class="keyword unsafe">ref</span> <span class="variable declaration reference">_a</span> <span class="brace">}</span> <span class="operator">=</span> <span class="variable">packed</span><span class="semicolon">;</span>
 
         <span class="comment">// unsafe auto ref of packed field</span>
-        <span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated reference unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
+        <span class="variable">packed</span><span class="operator">.</span><span class="field">a</span><span class="operator">.</span><span class="function associated reference trait unsafe">calls_autoref</span><span class="parenthesis">(</span><span class="parenthesis">)</span><span class="semicolon">;</span>
     <span class="brace">}</span>
 <span class="brace">}</span></code></pre>
\ No newline at end of file