mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-30 02:33:55 +00:00
Merge #2203
2203: Hover for builtins r=matklad a=kjeremy Fixes #2192 Co-authored-by: Jeremy Kolb <kjeremy@gmail.com>
This commit is contained in:
commit
113d7e44b7
@ -1,6 +1,6 @@
|
||||
//! 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},
|
||||
@ -117,27 +117,27 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
||||
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()))
|
||||
}
|
||||
}
|
||||
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 ?
|
||||
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(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 {
|
||||
@ -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!(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 New Issue
Block a user