1
Fork 0

Use correct crate for trait env in render_const_scalar()

This commit is contained in:
Chayim Refael Friedman 2025-02-27 14:30:10 +02:00
parent fcb34b17e2
commit 92de0ffd5c
2 changed files with 7 additions and 5 deletions

View file

@ -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 {

View file

@ -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