Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-ty/src/display.rs5
-rw-r--r--crates/ide/src/hover/tests.rs7
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<T: ?Sized> {
#[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