mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Merge #647
647: fix todo r=matklad a=matklad Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
aae69bc897
2 changed files with 11 additions and 38 deletions
|
@ -97,9 +97,7 @@ pub(crate) fn reference_definition(
|
||||||
{
|
{
|
||||||
let resolved = module.resolve_path(db, &path);
|
let resolved = module.resolve_path(db, &path);
|
||||||
if let Some(def_id) = resolved.take_types().or(resolved.take_values()) {
|
if let Some(def_id) = resolved.take_types().or(resolved.take_values()) {
|
||||||
if let Some(target) = NavigationTarget::from_def(db, def_id) {
|
return Exact(NavigationTarget::from_def(db, def_id));
|
||||||
return Exact(target);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,62 +112,37 @@ impl NavigationTarget {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO once Def::Item is gone, this should be able to always return a NavigationTarget
|
pub(crate) fn from_def(db: &RootDatabase, module_def: hir::ModuleDef) -> NavigationTarget {
|
||||||
pub(crate) fn from_def(
|
|
||||||
db: &RootDatabase,
|
|
||||||
module_def: hir::ModuleDef,
|
|
||||||
) -> Option<NavigationTarget> {
|
|
||||||
match module_def {
|
match module_def {
|
||||||
hir::ModuleDef::Module(module) => Some(NavigationTarget::from_module(db, module)),
|
hir::ModuleDef::Module(module) => NavigationTarget::from_module(db, module),
|
||||||
hir::ModuleDef::Function(func) => Some(NavigationTarget::from_function(db, func)),
|
hir::ModuleDef::Function(func) => NavigationTarget::from_function(db, func),
|
||||||
hir::ModuleDef::Struct(s) => {
|
hir::ModuleDef::Struct(s) => {
|
||||||
let (file_id, node) = s.source(db);
|
let (file_id, node) = s.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Const(s) => {
|
hir::ModuleDef::Const(s) => {
|
||||||
let (file_id, node) = s.source(db);
|
let (file_id, node) = s.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Static(s) => {
|
hir::ModuleDef::Static(s) => {
|
||||||
let (file_id, node) = s.source(db);
|
let (file_id, node) = s.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Enum(e) => {
|
hir::ModuleDef::Enum(e) => {
|
||||||
let (file_id, node) = e.source(db);
|
let (file_id, node) = e.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::EnumVariant(var) => {
|
hir::ModuleDef::EnumVariant(var) => {
|
||||||
let (file_id, node) = var.source(db);
|
let (file_id, node) = var.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Trait(e) => {
|
hir::ModuleDef::Trait(e) => {
|
||||||
let (file_id, node) = e.source(db);
|
let (file_id, node) = e.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
hir::ModuleDef::Type(e) => {
|
hir::ModuleDef::Type(e) => {
|
||||||
let (file_id, node) = e.source(db);
|
let (file_id, node) = e.source(db);
|
||||||
Some(NavigationTarget::from_named(
|
NavigationTarget::from_named(file_id.original_file(db), &*node)
|
||||||
file_id.original_file(db),
|
|
||||||
&*node,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue