about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Barsky <me@davidbarsky.com>2025-01-27 17:20:11 -0500
committerDavid Barsky <me@davidbarsky.com>2025-01-27 17:30:34 -0500
commitf22e331a408f32111cbb7c7743b65b5eba95baa6 (patch)
tree44d0d38c0455b3e7b2e2fecce62315bd2ed07416
parentff2656d67152a6d3e5f279bdd59081c404bb54f3 (diff)
downloadrust-f22e331a408f32111cbb7c7743b65b5eba95baa6.tar.gz
rust-f22e331a408f32111cbb7c7743b65b5eba95baa6.zip
Back out "Add a test for field default value body as defining usage of TAIT"
This backs out commit 4fe18a6fb5a1181a04c47391f558ebab5b8b0f39.
-rw-r--r--src/tools/rust-analyzer/crates/hir-def/src/lib.rs6
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/tests.rs112
-rw-r--r--src/tools/rust-analyzer/crates/hir-ty/src/tests/type_alias_impl_traits.rs50
3 files changed, 27 insertions, 141 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-def/src/lib.rs b/src/tools/rust-analyzer/crates/hir-def/src/lib.rs
index 80aa5516602..cf97d27fd1f 100644
--- a/src/tools/rust-analyzer/crates/hir-def/src/lib.rs
+++ b/src/tools/rust-analyzer/crates/hir-def/src/lib.rs
@@ -1399,7 +1399,11 @@ impl HasModule for DefWithBodyId {
             DefWithBodyId::ConstId(it) => it.module(db),
             DefWithBodyId::VariantId(it) => it.module(db),
             DefWithBodyId::InTypeConstId(it) => it.lookup(db).owner.module(db),
-            DefWithBodyId::FieldId(it) => it.module(db),
+            DefWithBodyId::FieldId(it) => match it.parent {
+                VariantId::EnumVariantId(it) => it.module(db),
+                VariantId::StructId(it) => it.module(db),
+                VariantId::UnionId(it) => it.module(db),
+            },
         }
     }
 }
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/tests.rs b/src/tools/rust-analyzer/crates/hir-ty/src/tests.rs
index 5177ed07b1f..a5af712b42f 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/tests.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/tests.rs
@@ -16,7 +16,6 @@ use std::env;
 use std::sync::LazyLock;
 
 use base_db::SourceDatabaseFileInputExt as _;
-use either::Either;
 use expect_test::Expect;
 use hir_def::{
     db::DefDatabase,
@@ -24,14 +23,12 @@ use hir_def::{
     hir::{ExprId, Pat, PatId},
     item_scope::ItemScope,
     nameres::DefMap,
-    src::{HasChildSource, HasSource},
-    AdtId, AssocItemId, DefWithBodyId, FieldId, HasModule, LocalModuleId, Lookup, ModuleDefId,
-    SyntheticSyntax,
+    src::HasSource,
+    AssocItemId, DefWithBodyId, HasModule, LocalModuleId, Lookup, ModuleDefId, SyntheticSyntax,
 };
 use hir_expand::{db::ExpandDatabase, FileRange, InFile};
 use itertools::Itertools;
 use rustc_hash::FxHashMap;
-use span::TextSize;
 use stdx::format_to;
 use syntax::{
     ast::{self, AstNode, HasName},
@@ -135,40 +132,14 @@ fn check_impl(
             None => continue,
         };
         let def_map = module.def_map(&db);
-        visit_module(&db, &def_map, module.local_id, &mut |it| match it {
-            ModuleDefId::FunctionId(it) => defs.push(it.into()),
-            ModuleDefId::EnumVariantId(it) => {
-                defs.push(it.into());
-                let variant_id = it.into();
-                let vd = db.variant_data(variant_id);
-                defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
-                    if fd.has_default {
-                        let field = FieldId { parent: variant_id, local_id, has_default: true };
-                        Some(DefWithBodyId::FieldId(field))
-                    } else {
-                        None
-                    }
-                }));
-            }
-            ModuleDefId::ConstId(it) => defs.push(it.into()),
-            ModuleDefId::StaticId(it) => defs.push(it.into()),
-            ModuleDefId::AdtId(it) => {
-                let variant_id = match it {
-                    AdtId::StructId(it) => it.into(),
-                    AdtId::UnionId(it) => it.into(),
-                    AdtId::EnumId(_) => return,
-                };
-                let vd = db.variant_data(variant_id);
-                defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
-                    if fd.has_default {
-                        let field = FieldId { parent: variant_id, local_id, has_default: true };
-                        Some(DefWithBodyId::FieldId(field))
-                    } else {
-                        None
-                    }
-                }));
-            }
-            _ => {}
+        visit_module(&db, &def_map, module.local_id, &mut |it| {
+            defs.push(match it {
+                ModuleDefId::FunctionId(it) => it.into(),
+                ModuleDefId::EnumVariantId(it) => it.into(),
+                ModuleDefId::ConstId(it) => it.into(),
+                ModuleDefId::StaticId(it) => it.into(),
+                _ => return,
+            })
         });
     }
     defs.sort_by_key(|def| match def {
@@ -189,20 +160,12 @@ fn check_impl(
             loc.source(&db).value.syntax().text_range().start()
         }
         DefWithBodyId::InTypeConstId(it) => it.source(&db).syntax().text_range().start(),
-        DefWithBodyId::FieldId(it) => {
-            let cs = it.parent.child_source(&db);
-            match cs.value.get(it.local_id) {
-                Some(Either::Left(it)) => it.syntax().text_range().start(),
-                Some(Either::Right(it)) => it.syntax().text_range().end(),
-                None => TextSize::new(u32::MAX),
-            }
-        }
+        DefWithBodyId::FieldId(_) => unreachable!(),
     });
     let mut unexpected_type_mismatches = String::new();
     for def in defs {
         let (body, body_source_map) = db.body_with_source_map(def);
         let inference_result = db.infer(def);
-        dbg!(&inference_result);
 
         for (pat, mut ty) in inference_result.type_of_pat.iter() {
             if let Pat::Bind { id, .. } = body.pats[pat] {
@@ -426,40 +389,14 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
     let def_map = module.def_map(&db);
 
     let mut defs: Vec<DefWithBodyId> = Vec::new();
-    visit_module(&db, &def_map, module.local_id, &mut |it| match it {
-        ModuleDefId::FunctionId(it) => defs.push(it.into()),
-        ModuleDefId::EnumVariantId(it) => {
-            defs.push(it.into());
-            let variant_id = it.into();
-            let vd = db.variant_data(variant_id);
-            defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
-                if fd.has_default {
-                    let field = FieldId { parent: variant_id, local_id, has_default: true };
-                    Some(DefWithBodyId::FieldId(field))
-                } else {
-                    None
-                }
-            }));
-        }
-        ModuleDefId::ConstId(it) => defs.push(it.into()),
-        ModuleDefId::StaticId(it) => defs.push(it.into()),
-        ModuleDefId::AdtId(it) => {
-            let variant_id = match it {
-                AdtId::StructId(it) => it.into(),
-                AdtId::UnionId(it) => it.into(),
-                AdtId::EnumId(_) => return,
-            };
-            let vd = db.variant_data(variant_id);
-            defs.extend(vd.fields().iter().filter_map(|(local_id, fd)| {
-                if fd.has_default {
-                    let field = FieldId { parent: variant_id, local_id, has_default: true };
-                    Some(DefWithBodyId::FieldId(field))
-                } else {
-                    None
-                }
-            }));
-        }
-        _ => {}
+    visit_module(&db, &def_map, module.local_id, &mut |it| {
+        defs.push(match it {
+            ModuleDefId::FunctionId(it) => it.into(),
+            ModuleDefId::EnumVariantId(it) => it.into(),
+            ModuleDefId::ConstId(it) => it.into(),
+            ModuleDefId::StaticId(it) => it.into(),
+            _ => return,
+        })
     });
     defs.sort_by_key(|def| match def {
         DefWithBodyId::FunctionId(it) => {
@@ -479,14 +416,7 @@ fn infer_with_mismatches(content: &str, include_mismatches: bool) -> String {
             loc.source(&db).value.syntax().text_range().start()
         }
         DefWithBodyId::InTypeConstId(it) => it.source(&db).syntax().text_range().start(),
-        DefWithBodyId::FieldId(it) => {
-            let cs = it.parent.child_source(&db);
-            match cs.value.get(it.local_id) {
-                Some(Either::Left(it)) => it.syntax().text_range().start(),
-                Some(Either::Right(it)) => it.syntax().text_range().end(),
-                None => TextSize::new(u32::MAX),
-            }
-        }
+        DefWithBodyId::FieldId(_) => unreachable!(),
     });
     for def in defs {
         let (body, source_map) = db.body_with_source_map(def);
@@ -547,7 +477,7 @@ pub(crate) fn visit_module(
                     let body = db.body(it.into());
                     visit_body(db, &body, cb);
                 }
-                ModuleDefId::AdtId(AdtId::EnumId(it)) => {
+                ModuleDefId::AdtId(hir_def::AdtId::EnumId(it)) => {
                     db.enum_data(it).variants.iter().for_each(|&(it, _)| {
                         let body = db.body(it.into());
                         cb(it.into());
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/tests/type_alias_impl_traits.rs b/src/tools/rust-analyzer/crates/hir-ty/src/tests/type_alias_impl_traits.rs
index a2aada57da9..e2b7bf379cc 100644
--- a/src/tools/rust-analyzer/crates/hir-ty/src/tests/type_alias_impl_traits.rs
+++ b/src/tools/rust-analyzer/crates/hir-ty/src/tests/type_alias_impl_traits.rs
@@ -157,53 +157,5 @@ static ALIAS: i32 = {
             217..218 '5': i32
             205..211: expected impl Trait + ?Sized, got Struct
         "#]],
-    );
-}
-
-#[test]
-fn defining_type_alias_impl_trait_from_default_fields() {
-    check_no_mismatches(
-        r#"
-trait Trait {}
-
-struct Struct;
-
-impl Trait for Struct {}
-
-type AliasTy = impl Trait;
-
-struct Foo {
-    foo: AliasTy = {
-        let x: AliasTy = Struct;
-        x
-    },
-}
-"#,
-    );
-
-    check_infer_with_mismatches(
-        r#"
-trait Trait {}
-
-struct Struct;
-
-impl Trait for Struct {}
-
-type AliasTy = impl Trait;
-
-struct Foo {
-    foo: i32 = {
-        let x: AliasTy = Struct;
-        5
-    },
-}
-"#,
-        expect![[r#"
-            114..164 '{     ...     }': i32
-            128..129 'x': impl Trait + ?Sized
-            141..147 'Struct': Struct
-            157..158 '5': i32
-            141..147: expected impl Trait + ?Sized, got Struct
-        "#]],
-    );
+    )
 }