Hover for builtins
This commit is contained in:
parent
9d786ea221
commit
3188c1451a
1 changed files with 32 additions and 20 deletions
|
@ -1,6 +1,6 @@
|
||||||
//! FIXME: write short doc here
|
//! FIXME: write short doc here
|
||||||
|
|
||||||
use hir::{Adt, HasSource, HirDisplay};
|
use hir::{Adt, BuiltinType, HasSource, HirDisplay};
|
||||||
use ra_db::SourceDatabase;
|
use ra_db::SourceDatabase;
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
algo::{ancestors_at_offset, find_covering_element, find_node_at_offset},
|
algo::{ancestors_at_offset, find_covering_element, find_node_at_offset},
|
||||||
|
@ -117,8 +117,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
||||||
hir::AssocItem::Const(it) => from_def_source(db, it),
|
hir::AssocItem::Const(it) => from_def_source(db, it),
|
||||||
hir::AssocItem::TypeAlias(it) => from_def_source(db, it),
|
hir::AssocItem::TypeAlias(it) => from_def_source(db, it),
|
||||||
}),
|
}),
|
||||||
Some(Def(it)) => {
|
Some(Def(it)) => match it {
|
||||||
match it {
|
|
||||||
hir::ModuleDef::Module(it) => {
|
hir::ModuleDef::Module(it) => {
|
||||||
if let hir::ModuleSource::Module(it) = it.definition_source(db).ast {
|
if let hir::ModuleSource::Module(it) = it.definition_source(db).ast {
|
||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
||||||
|
@ -133,11 +132,12 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
||||||
hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)),
|
hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)),
|
||||||
hir::ModuleDef::Trait(it) => res.extend(from_def_source(db, it)),
|
hir::ModuleDef::Trait(it) => res.extend(from_def_source(db, it)),
|
||||||
hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)),
|
hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)),
|
||||||
hir::ModuleDef::BuiltinType(_) => {
|
hir::ModuleDef::BuiltinType(it) => {
|
||||||
// FIXME: hover for builtin Type ?
|
if let Some(b) = BuiltinType::ALL.iter().find(|(_, ty)| *ty == it) {
|
||||||
}
|
res.extend(Some(b.0.to_string()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
Some(SelfType(ty)) => {
|
Some(SelfType(ty)) => {
|
||||||
if let Some((adt_def, _)) = ty.as_adt() {
|
if let Some((adt_def, _)) = ty.as_adt() {
|
||||||
res.extend(match adt_def {
|
res.extend(match adt_def {
|
||||||
|
@ -722,4 +722,16 @@ fn func(foo: i32) { if true { <|>foo; }; }
|
||||||
assert_eq!(trim_markup_opt(hover.info.first()), Some("macro_rules! foo"));
|
assert_eq!(trim_markup_opt(hover.info.first()), Some("macro_rules! foo"));
|
||||||
assert_eq!(hover.info.is_exact(), true);
|
assert_eq!(hover.info.is_exact(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_hover_tuple_field() {
|
||||||
|
let (analysis, position) = single_file_with_position(
|
||||||
|
"
|
||||||
|
struct TS(String, i32<|>);
|
||||||
|
",
|
||||||
|
);
|
||||||
|
let hover = analysis.hover(position).unwrap().unwrap();
|
||||||
|
assert_eq!(trim_markup_opt(hover.info.first()), Some("i32"));
|
||||||
|
assert_eq!(hover.info.is_exact(), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue