mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 12:54:58 +00:00
Introduce HasSource trait
This commit is contained in:
parent
2a1fe26b6d
commit
36865adcb9
3 changed files with 45 additions and 29 deletions
|
@ -1,6 +1,6 @@
|
|||
use ra_db::{FileId, SourceDatabase};
|
||||
use ra_syntax::{
|
||||
SyntaxNode, AstNode, SmolStr, TextRange, AstPtr,
|
||||
SyntaxNode, AstNode, SmolStr, TextRange, AstPtr, TreeArc,
|
||||
SyntaxKind::{self, NAME},
|
||||
ast::{self, DocCommentsOwner},
|
||||
algo::visit::{visitor, Visitor},
|
||||
|
@ -186,35 +186,25 @@ impl NavigationTarget {
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn from_def_source<A, D>(db: &RootDatabase, def: D) -> NavigationTarget
|
||||
where
|
||||
D: hir::HasSource<Ast = TreeArc<A>>,
|
||||
A: ast::DocCommentsOwner + ast::NameOwner + ShortLabel,
|
||||
{
|
||||
let src = def.source(db);
|
||||
NavigationTarget::from_named(
|
||||
src.file_id.original_file(db),
|
||||
&*src.ast,
|
||||
src.ast.doc_comment_text(),
|
||||
src.ast.short_label(),
|
||||
)
|
||||
}
|
||||
|
||||
pub(crate) fn from_adt_def(db: &RootDatabase, adt_def: hir::AdtDef) -> NavigationTarget {
|
||||
match adt_def {
|
||||
hir::AdtDef::Struct(s) => {
|
||||
let src = s.source(db);
|
||||
NavigationTarget::from_named(
|
||||
src.file_id.original_file(db),
|
||||
&*src.ast,
|
||||
src.ast.doc_comment_text(),
|
||||
src.ast.short_label(),
|
||||
)
|
||||
}
|
||||
hir::AdtDef::Union(s) => {
|
||||
let (file_id, node) = s.source(db);
|
||||
NavigationTarget::from_named(
|
||||
file_id.original_file(db),
|
||||
&*node,
|
||||
node.doc_comment_text(),
|
||||
node.short_label(),
|
||||
)
|
||||
}
|
||||
hir::AdtDef::Enum(s) => {
|
||||
let src = s.source(db);
|
||||
NavigationTarget::from_named(
|
||||
src.file_id.original_file(db),
|
||||
&*src.ast,
|
||||
src.ast.doc_comment_text(),
|
||||
src.ast.short_label(),
|
||||
)
|
||||
}
|
||||
hir::AdtDef::Struct(it) => NavigationTarget::from_def_source(db, it),
|
||||
hir::AdtDef::Union(it) => NavigationTarget::from_def_source(db, it),
|
||||
hir::AdtDef::Enum(it) => NavigationTarget::from_def_source(db, it),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue