]> git.lizzy.rs Git - rust.git/commitdiff
Fix source_to_def for named enum variant fields
authorJonas Schievink <jonasschievink@gmail.com>
Fri, 9 Oct 2020 00:57:35 +0000 (02:57 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Fri, 9 Oct 2020 00:57:35 +0000 (02:57 +0200)
crates/hir/src/semantics/source_to_def.rs
crates/ide/src/references.rs

index 5918b9541be2ecd0c79ace07e72a8cbb451167b2..66fc11611b1ff5cfb4729acee9b6c96adc0321c1 100644 (file)
@@ -189,6 +189,10 @@ pub(super) fn find_container(&mut self, src: InFile<&SyntaxNode>) -> Option<Chil
                         let def = self.type_alias_to_def(container.with_value(it))?;
                         def.into()
                     },
+                    ast::Variant(it) => {
+                        let def = self.enum_variant_to_def(container.with_value(it))?;
+                        VariantId::from(def).into()
+                    },
                     _ => continue,
                 }
             };
index e0830eb4fc6fbcc49ca263c15dc008ea456a82c7..ae68b4392eda741ab70f5b3b37127286553abc6f 100644 (file)
@@ -405,6 +405,23 @@ enum Foo {
         );
     }
 
+    #[test]
+    fn test_find_all_refs_enum_var_field() {
+        check(
+            r#"
+enum Foo {
+    A,
+    B { field<|>: u8 },
+    C,
+}
+"#,
+            expect![[r#"
+                field RECORD_FIELD FileId(0) 26..35 26..31 Other
+
+            "#]],
+        );
+    }
+
     #[test]
     fn test_find_all_refs_two_modules() {
         check(