//! FIXME: write short doc here
-use hir::{Adt, HasSource, HirDisplay};
+use hir::{Adt, BuiltinType, HasSource, HirDisplay};
use ra_db::SourceDatabase;
use ra_syntax::{
algo::{ancestors_at_offset, find_covering_element, find_node_at_offset},
hir::AssocItem::Const(it) => from_def_source(db, it),
hir::AssocItem::TypeAlias(it) => from_def_source(db, it),
}),
- Some(Def(it)) => {
- match it {
- hir::ModuleDef::Module(it) => {
- if let hir::ModuleSource::Module(it) = it.definition_source(db).ast {
- res.extend(hover_text(it.doc_comment_text(), it.short_label()))
- }
+ Some(Def(it)) => match it {
+ hir::ModuleDef::Module(it) => {
+ if let hir::ModuleSource::Module(it) = it.definition_source(db).ast {
+ res.extend(hover_text(it.doc_comment_text(), it.short_label()))
}
- hir::ModuleDef::Function(it) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::Adt(Adt::Struct(it)) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::Adt(Adt::Union(it)) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::Adt(Adt::Enum(it)) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::EnumVariant(it) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::Const(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::TypeAlias(it) => res.extend(from_def_source(db, it)),
- hir::ModuleDef::BuiltinType(_) => {
- // FIXME: hover for builtin Type ?
+ }
+ hir::ModuleDef::Function(it) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::Adt(Adt::Struct(it)) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::Adt(Adt::Union(it)) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::Adt(Adt::Enum(it)) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::EnumVariant(it) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::Const(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::TypeAlias(it) => res.extend(from_def_source(db, it)),
+ hir::ModuleDef::BuiltinType(it) => {
+ if let Some(b) = BuiltinType::ALL.iter().find(|(_, ty)| *ty == it) {
+ res.extend(Some(b.0.to_string()))
}
}
- }
+ },
Some(SelfType(ty)) => {
if let Some((adt_def, _)) = ty.as_adt() {
res.extend(match adt_def {
assert_eq!(trim_markup_opt(hover.info.first()), Some("macro_rules! foo"));
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);
+ }
}