aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorLukas Wirth <[email protected]>2021-01-04 13:18:31 +0000
committerLukas Wirth <[email protected]>2021-01-04 13:18:31 +0000
commit0ae0909a1676903baf33999d5f23d51fb838111b (patch)
tree53c456c75f3d136dc2b63c64bf20a012e0d0efc8 /crates
parent5771cad4517005afe134d0b9c93571c177f14db4 (diff)
Implement hover for ConstParam
Diffstat (limited to 'crates')
-rw-r--r--crates/ide/src/display/short_label.rs11
-rw-r--r--crates/ide/src/hover.rs22
2 files changed, 29 insertions, 4 deletions
diff --git a/crates/ide/src/display/short_label.rs b/crates/ide/src/display/short_label.rs
index ea49d9f97..990f740b8 100644
--- a/crates/ide/src/display/short_label.rs
+++ b/crates/ide/src/display/short_label.rs
@@ -87,6 +87,17 @@ impl ShortLabel for ast::Variant {
87 } 87 }
88} 88}
89 89
90impl ShortLabel for ast::ConstParam {
91 fn short_label(&self) -> Option<String> {
92 let mut buf = "const ".to_owned();
93 buf.push_str(self.name()?.text().as_str());
94 if let Some(type_ref) = self.ty() {
95 format_to!(buf, ": {}", type_ref.syntax());
96 }
97 Some(buf)
98 }
99}
100
90fn short_label_from_ty<T>(node: &T, ty: Option<ast::Type>, prefix: &str) -> Option<String> 101fn short_label_from_ty<T>(node: &T, ty: Option<ast::Type>, prefix: &str) -> Option<String>
91where 102where
92 T: NameOwner + VisibilityOwner, 103 T: NameOwner + VisibilityOwner,
diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs
index 61439ae53..e9103ce59 100644
--- a/crates/ide/src/hover.rs
+++ b/crates/ide/src/hover.rs
@@ -371,10 +371,7 @@ fn hover_for_definition(db: &RootDatabase, def: Definition) -> Option<Markup> {
371 Definition::Label(it) => Some(Markup::fenced_block(&it.name(db))), 371 Definition::Label(it) => Some(Markup::fenced_block(&it.name(db))),
372 Definition::LifetimeParam(it) => Some(Markup::fenced_block(&it.name(db))), 372 Definition::LifetimeParam(it) => Some(Markup::fenced_block(&it.name(db))),
373 Definition::TypeParam(type_param) => Some(Markup::fenced_block(&type_param.display(db))), 373 Definition::TypeParam(type_param) => Some(Markup::fenced_block(&type_param.display(db))),
374 Definition::ConstParam(_) => { 374 Definition::ConstParam(it) => from_def_source(db, it, None),
375 // FIXME: Hover for generic const param
376 None
377 }
378 }; 375 };
379 376
380 fn from_def_source<A, D>(db: &RootDatabase, def: D, mod_path: Option<String>) -> Option<Markup> 377 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<|>> {}
3305 "#]], 3302 "#]],
3306 ); 3303 );
3307 } 3304 }
3305
3306 #[test]
3307 fn hover_const_param() {
3308 check(
3309 r#"
3310struct Foo<const LEN: usize>;
3311impl<const LEN: usize> Foo<LEN<|>> {}
3312"#,
3313 expect![[r#"
3314 *LEN*
3315
3316 ```rust
3317 const LEN: usize
3318 ```
3319 "#]],
3320 );
3321 }
3308} 3322}