about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2024-12-25 05:54:21 +0000
committerGitHub <noreply@github.com>2024-12-25 05:54:21 +0000
commit022bece913ef6dfd1010b127ac5fda9db7cd0ece (patch)
tree9a87e4bad1a7a512dc66141f8969f37092804994 /src
parent96f068c169928a35110193ee49761b3010330d4f (diff)
parent9e7d29688f8d3bf45ea6587b0f5b3398f7f70e56 (diff)
downloadrust-022bece913ef6dfd1010b127ac5fda9db7cd0ece.tar.gz
rust-022bece913ef6dfd1010b127ac5fda9db7cd0ece.zip
Merge pull request #18756 from roife/fix-18751
fix missing name enum when hovering on fields in variants
Diffstat (limited to 'src')
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/hover/render.rs15
-rw-r--r--src/tools/rust-analyzer/crates/ide/src/hover/tests.rs2
2 files changed, 14 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/hover/render.rs b/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
index 8c5c27c47cb..119a864eb96 100644
--- a/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/hover/render.rs
@@ -5,7 +5,7 @@ use either::Either;
 use hir::{
     db::ExpandDatabase, Adt, AsAssocItem, AsExternAssocItem, AssocItemContainer, CaptureKind,
     DynCompatibilityViolation, HasCrate, HasSource, HirDisplay, Layout, LayoutError,
-    MethodViolationCode, Name, Semantics, Symbol, Trait, Type, TypeInfo,
+    MethodViolationCode, Name, Semantics, Symbol, Trait, Type, TypeInfo, VariantDef,
 };
 use ide_db::{
     base_db::SourceDatabase,
@@ -378,7 +378,18 @@ pub(super) fn process_markup(
 
 fn definition_owner_name(db: &RootDatabase, def: &Definition, edition: Edition) -> Option<String> {
     match def {
-        Definition::Field(f) => Some(f.parent_def(db).name(db)),
+        Definition::Field(f) => {
+            let parent = f.parent_def(db);
+            let parent_name = parent.name(db);
+            let parent_name = parent_name.display(db, edition).to_string();
+            return match parent {
+                VariantDef::Variant(variant) => {
+                    let enum_name = variant.parent_enum(db).name(db);
+                    Some(format!("{}::{parent_name}", enum_name.display(db, edition)))
+                }
+                _ => Some(parent_name),
+            };
+        }
         Definition::Local(l) => l.parent(db).name(db),
         Definition::Variant(e) => Some(e.parent_enum(db).name(db)),
 
diff --git a/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs b/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
index cc926a5b568..ed8cd64cdbe 100644
--- a/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
+++ b/src/tools/rust-analyzer/crates/ide/src/hover/tests.rs
@@ -7294,7 +7294,7 @@ enum Enum {
             *field*
 
             ```rust
-            ra_test_fixture::RecordV
+            ra_test_fixture::Enum::RecordV
             ```
 
             ```rust