Implement hover for ConstParam

This commit is contained in:
Lukas Wirth 2021-01-04 14:18:31 +01:00
parent 5771cad451
commit 0ae0909a16
2 changed files with 29 additions and 4 deletions

View File

@ -87,6 +87,17 @@ fn short_label(&self) -> Option<String> {
}
}
impl ShortLabel for ast::ConstParam {
fn short_label(&self) -> Option<String> {
let mut buf = "const ".to_owned();
buf.push_str(self.name()?.text().as_str());
if let Some(type_ref) = self.ty() {
format_to!(buf, ": {}", type_ref.syntax());
}
Some(buf)
}
}
fn short_label_from_ty<T>(node: &T, ty: Option<ast::Type>, prefix: &str) -> Option<String>
where
T: NameOwner + VisibilityOwner,

View File

@ -371,10 +371,7 @@ fn hover_for_definition(db: &RootDatabase, def: Definition) -> Option<Markup> {
Definition::Label(it) => Some(Markup::fenced_block(&it.name(db))),
Definition::LifetimeParam(it) => Some(Markup::fenced_block(&it.name(db))),
Definition::TypeParam(type_param) => Some(Markup::fenced_block(&type_param.display(db))),
Definition::ConstParam(_) => {
// FIXME: Hover for generic const param
None
}
Definition::ConstParam(it) => from_def_source(db, it, None),
};
fn from_def_source<A, D>(db: &RootDatabase, def: D, mod_path: Option<String>) -> Option<Markup>
@ -3305,4 +3302,21 @@ impl<T: 'static> Foo<T<|>> {}
"#]],
);
}
#[test]
fn hover_const_param() {
check(
r#"
struct Foo<const LEN: usize>;
impl<const LEN: usize> Foo<LEN<|>> {}
"#,
expect![[r#"
*LEN*
```rust
const LEN: usize
```
"#]],
);
}
}