From 422213cc9a465c7c8375cf4643f1b800899470a4 Mon Sep 17 00:00:00 2001 From: Chayim Refael Friedman Date: Thu, 27 Feb 2025 14:30:10 +0200 Subject: [PATCH] Use correct crate for trait env in `render_const_scalar()` --- crates/hir-ty/src/display.rs | 5 +---- crates/ide/src/hover/tests.rs | 7 ++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/hir-ty/src/display.rs b/crates/hir-ty/src/display.rs index 41152d9022..95ce36390d 100644 --- a/crates/hir-ty/src/display.rs +++ b/crates/hir-ty/src/display.rs @@ -680,10 +680,7 @@ fn render_const_scalar( memory_map: &MemoryMap, ty: &Ty, ) -> Result<(), HirDisplayError> { - // FIXME: We need to get krate from the final callers of the hir display - // infrastructure and have it here as a field on `f`. - let trait_env = - TraitEnvironment::empty(*f.db.crate_graph().crates_in_topological_order().last().unwrap()); + let trait_env = TraitEnvironment::empty(f.krate()); let ty = normalize(f.db, trait_env.clone(), ty.clone()); match ty.kind(Interner) { TyKind::Scalar(s) => match s { diff --git a/crates/ide/src/hover/tests.rs b/crates/ide/src/hover/tests.rs index 964b1d7eb7..6b470d921f 100644 --- a/crates/ide/src/hover/tests.rs +++ b/crates/ide/src/hover/tests.rs @@ -10950,8 +10950,12 @@ pub struct ManuallyDrop$0 { #[test] fn projection_const() { + // This uses two crates, which have *no* relation between them, to test another thing: + // `render_const_scalar()` used to just use the last crate for the trait env, which will + // fail in this scenario. check( r#" +//- /foo.rs crate:foo pub trait PublicFlags { type Internal; } @@ -10967,12 +10971,13 @@ pub struct InternalBitFlags; impl PublicFlags for NoteDialects { type Internal = InternalBitFlags; } +//- /bar.rs crate:bar "#, expect![[r#" *CLAP* ```rust - ra_test_fixture::NoteDialects + foo::NoteDialects ``` ```rust