mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Resolve $crate
in HirDisplay
of Path
This commit is contained in:
parent
ab896e38e1
commit
a247fffdf6
@ -1189,7 +1189,18 @@ impl HirDisplay for Path {
|
||||
write!(f, "super")?;
|
||||
}
|
||||
}
|
||||
(_, PathKind::DollarCrate(_)) => write!(f, "{{extern_crate}}")?,
|
||||
(_, PathKind::DollarCrate(id)) => {
|
||||
// Resolve `$crate` to the crate's display name.
|
||||
// FIXME: should use the dependency name instead if available, but that depends on
|
||||
// the crate invoking `HirDisplay`
|
||||
let crate_graph = f.db.crate_graph();
|
||||
let name = crate_graph[*id]
|
||||
.display_name
|
||||
.as_ref()
|
||||
.map(|name| name.canonical_name())
|
||||
.unwrap_or("$crate");
|
||||
write!(f, "{name}")?
|
||||
}
|
||||
}
|
||||
|
||||
for (seg_idx, segment) in self.segments().iter().enumerate() {
|
||||
|
@ -4583,3 +4583,33 @@ pub struct Foo;
|
||||
"##]],
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hover_dollar_crate() {
|
||||
// $crate should be resolved to the right crate name.
|
||||
|
||||
check(
|
||||
r#"
|
||||
//- /main.rs crate:main deps:dep
|
||||
dep::m!(KONST$0);
|
||||
//- /dep.rs crate:dep
|
||||
#[macro_export]
|
||||
macro_rules! m {
|
||||
( $name:ident ) => { const $name: $crate::Type = $crate::Type; };
|
||||
}
|
||||
|
||||
pub struct Type;
|
||||
"#,
|
||||
expect![[r#"
|
||||
*KONST*
|
||||
|
||||
```rust
|
||||
main
|
||||
```
|
||||
|
||||
```rust
|
||||
const KONST: dep::Type = $crate::Type
|
||||
```
|
||||
"#]],
|
||||
);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user