mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
reduce duplication in hover
This commit is contained in:
parent
46bc8675ed
commit
647c8f3df8
@ -1,6 +1,7 @@
|
|||||||
use ra_db::SourceDatabase;
|
use ra_db::SourceDatabase;
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
AstNode, ast::{self, DocCommentsOwner},
|
AstNode, TreeArc,
|
||||||
|
ast::{self, DocCommentsOwner},
|
||||||
algo::{find_covering_element, find_node_at_offset, ancestors_at_offset, visit::{visitor, Visitor}},
|
algo::{find_covering_element, find_node_at_offset, ancestors_at_offset, visit::{visitor, Visitor}},
|
||||||
};
|
};
|
||||||
use hir::HirDisplay;
|
use hir::HirDisplay;
|
||||||
@ -95,10 +96,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
|||||||
let analyzer = hir::SourceAnalyzer::new(db, position.file_id, name_ref.syntax(), None);
|
let analyzer = hir::SourceAnalyzer::new(db, position.file_id, name_ref.syntax(), None);
|
||||||
|
|
||||||
match classify_name_ref(db, &analyzer, name_ref) {
|
match classify_name_ref(db, &analyzer, name_ref) {
|
||||||
Some(Method(it)) => {
|
Some(Method(it)) => res.extend(from_def_source(db, it)),
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()));
|
|
||||||
}
|
|
||||||
Some(Macro(it)) => {
|
Some(Macro(it)) => {
|
||||||
let it = it.source(db).1;
|
let it = it.source(db).1;
|
||||||
res.extend(hover_text(it.doc_comment_text(), None));
|
res.extend(hover_text(it.doc_comment_text(), None));
|
||||||
@ -110,14 +108,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(AssocItem(it)) => match it {
|
Some(AssocItem(it)) => match it {
|
||||||
hir::ImplItem::Method(it) => {
|
hir::ImplItem::Method(it) => res.extend(from_def_source(db, it)),
|
||||||
let src = it.source(db);
|
hir::ImplItem::Const(it) => res.extend(from_def_source(db, it)),
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ImplItem::Const(it) => {
|
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ImplItem::TypeAlias(it) => {
|
hir::ImplItem::TypeAlias(it) => {
|
||||||
let it = it.source(db).1;
|
let it = it.source(db).1;
|
||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
||||||
@ -131,34 +123,16 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
|||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Function(it) => {
|
hir::ModuleDef::Function(it) => res.extend(from_def_source(db, it)),
|
||||||
let src = it.source(db);
|
hir::ModuleDef::Struct(it) => res.extend(from_def_source(db, it)),
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
hir::ModuleDef::Union(it) => res.extend(from_def_source(db, it)),
|
||||||
}
|
hir::ModuleDef::Enum(it) => res.extend(from_def_source(db, it)),
|
||||||
hir::ModuleDef::Struct(it) => {
|
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ModuleDef::Union(it) => {
|
|
||||||
let it = it.source(db).1;
|
|
||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
|
||||||
}
|
|
||||||
hir::ModuleDef::Enum(it) => {
|
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ModuleDef::EnumVariant(it) => {
|
hir::ModuleDef::EnumVariant(it) => {
|
||||||
let src = it.source(db);
|
let src = it.source(db);
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Const(it) => {
|
hir::ModuleDef::Const(it) => res.extend(from_def_source(db, it)),
|
||||||
let src = it.source(db);
|
hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)),
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ModuleDef::Static(it) => {
|
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label()))
|
|
||||||
}
|
|
||||||
hir::ModuleDef::Trait(it) => {
|
hir::ModuleDef::Trait(it) => {
|
||||||
let it = it.source(db).1;
|
let it = it.source(db).1;
|
||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
||||||
@ -175,24 +149,9 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
|||||||
Some(SelfType(ty)) => {
|
Some(SelfType(ty)) => {
|
||||||
if let Some((adt_def, _)) = ty.as_adt() {
|
if let Some((adt_def, _)) = ty.as_adt() {
|
||||||
match adt_def {
|
match adt_def {
|
||||||
hir::AdtDef::Struct(it) => {
|
hir::AdtDef::Struct(it) => res.extend(from_def_source(db, it)),
|
||||||
let src = it.source(db);
|
hir::AdtDef::Union(it) => res.extend(from_def_source(db, it)),
|
||||||
res.extend(hover_text(
|
hir::AdtDef::Enum(it) => res.extend(from_def_source(db, it)),
|
||||||
src.ast.doc_comment_text(),
|
|
||||||
src.ast.short_label(),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
hir::AdtDef::Union(it) => {
|
|
||||||
let it = it.source(db).1;
|
|
||||||
res.extend(hover_text(it.doc_comment_text(), it.short_label()))
|
|
||||||
}
|
|
||||||
hir::AdtDef::Enum(it) => {
|
|
||||||
let src = it.source(db);
|
|
||||||
res.extend(hover_text(
|
|
||||||
src.ast.doc_comment_text(),
|
|
||||||
src.ast.short_label(),
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -276,7 +235,16 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option<RangeIn
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let res = RangeInfo::new(range, res);
|
let res = RangeInfo::new(range, res);
|
||||||
Some(res)
|
return Some(res);
|
||||||
|
|
||||||
|
fn from_def_source<A, D>(db: &RootDatabase, def: D) -> Option<String>
|
||||||
|
where
|
||||||
|
D: hir::HasSource<Ast = TreeArc<A>>,
|
||||||
|
A: ast::DocCommentsOwner + ast::NameOwner + ShortLabel,
|
||||||
|
{
|
||||||
|
let src = def.source(db);
|
||||||
|
hover_text(src.ast.doc_comment_text(), src.ast.short_label())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn type_of(db: &RootDatabase, frange: FileRange) -> Option<String> {
|
pub(crate) fn type_of(db: &RootDatabase, frange: FileRange) -> Option<String> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user