From 91c120ccea4f0cfef20fd4d918154c8152f83816 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 02:34:34 +0300 Subject: introduce Source struct --- crates/ra_ide_api/src/display/navigation_target.rs | 20 ++++++++++---------- crates/ra_ide_api/src/hover.rs | 11 +++++++---- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index cfd3f5478..c02bc005b 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -189,12 +189,12 @@ impl NavigationTarget { pub(crate) fn from_adt_def(db: &RootDatabase, adt_def: hir::AdtDef) -> NavigationTarget { match adt_def { hir::AdtDef::Struct(s) => { - let (file_id, node) = s.source(db); + let src = s.source(db); NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), + src.file_id.original_file(db), + &*src.ast, + src.ast.doc_comment_text(), + src.ast.short_label(), ) } hir::AdtDef::Union(s) => { @@ -226,12 +226,12 @@ impl NavigationTarget { hir::ModuleDef::Module(module) => NavigationTarget::from_module(db, module), hir::ModuleDef::Function(func) => NavigationTarget::from_function(db, func), hir::ModuleDef::Struct(s) => { - let (file_id, node) = s.source(db); + let src = s.source(db); NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), + src.file_id.original_file(db), + &*src.ast, + src.ast.doc_comment_text(), + src.ast.short_label(), ) } hir::ModuleDef::Union(s) => { diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index fbabeb194..80445761c 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -136,8 +136,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + 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; @@ -176,8 +176,11 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text( + src.ast.doc_comment_text(), + src.ast.short_label(), + )) } hir::AdtDef::Union(it) => { let it = it.source(db).1; -- cgit v1.2.3 From 2a1fe26b6d354dbbd1b3843d288d56e74fa00557 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 03:17:29 +0300 Subject: use Source more --- crates/ra_ide_api/src/display/navigation_target.rs | 50 ++++++---------------- crates/ra_ide_api/src/hover.rs | 15 ++++--- 2 files changed, 22 insertions(+), 43 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index c02bc005b..7c68bb41c 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -207,12 +207,12 @@ impl NavigationTarget { ) } hir::AdtDef::Enum(s) => { - let (file_id, node) = s.source(db); + let src = s.source(db); NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), + src.file_id.original_file(db), + &*src.ast, + src.ast.doc_comment_text(), + src.ast.short_label(), ) } } @@ -225,24 +225,9 @@ impl NavigationTarget { let nav = match module_def { hir::ModuleDef::Module(module) => NavigationTarget::from_module(db, module), hir::ModuleDef::Function(func) => NavigationTarget::from_function(db, func), - hir::ModuleDef::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::ModuleDef::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::ModuleDef::Struct(it) => NavigationTarget::from_adt_def(db, it.into()), + hir::ModuleDef::Enum(it) => NavigationTarget::from_adt_def(db, it.into()), + hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Const(s) => { let (file_id, node) = s.source(db); NavigationTarget::from_named( @@ -261,22 +246,13 @@ impl NavigationTarget { node.short_label(), ) } - hir::ModuleDef::Enum(e) => { - let (file_id, node) = e.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } hir::ModuleDef::EnumVariant(var) => { - let (file_id, node) = var.source(db); + let src = var.source(db); NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), + src.file_id.original_file(db), + &*src.ast, + src.ast.doc_comment_text(), + src.ast.short_label(), ) } hir::ModuleDef::Trait(e) => { diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 80445761c..ee0f2dde8 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -144,12 +144,12 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::EnumVariant(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Const(it) => { let it = it.source(db).1; @@ -187,8 +187,11 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text( + src.ast.doc_comment_text(), + src.ast.short_label(), + )) } } } -- cgit v1.2.3 From 36865adcb946d5567fb61d3547b78fc71df58b20 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 16:40:49 +0300 Subject: Introduce HasSource trait --- crates/ra_ide_api/src/display/navigation_target.rs | 46 +++++++++------------- 1 file changed, 18 insertions(+), 28 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 7c68bb41c..bef5f0980 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -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(db: &RootDatabase, def: D) -> NavigationTarget + where + D: hir::HasSource>, + 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), } } -- cgit v1.2.3 From 4f94af3c4aaa57ebb4cb01f7e4edfb3a0821b09b Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 16:49:56 +0300 Subject: use Source for Function --- crates/ra_ide_api/src/completion/presentation.rs | 2 +- crates/ra_ide_api/src/display/function_signature.rs | 2 +- crates/ra_ide_api/src/display/navigation_target.rs | 8 +------- crates/ra_ide_api/src/hover.rs | 12 ++++++------ 4 files changed, 9 insertions(+), 15 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index d405161d6..e9ae20225 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -100,7 +100,7 @@ impl Completions { ) { let sig = func.signature(ctx.db); let name = name.unwrap_or_else(|| sig.name().to_string()); - let (_, ast_node) = func.source(ctx.db); + let ast_node = func.source(ctx.db).ast; let detail = function_label(&ast_node); let mut builder = CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name) diff --git a/crates/ra_ide_api/src/display/function_signature.rs b/crates/ra_ide_api/src/display/function_signature.rs index d09950bce..d0c155de7 100644 --- a/crates/ra_ide_api/src/display/function_signature.rs +++ b/crates/ra_ide_api/src/display/function_signature.rs @@ -33,7 +33,7 @@ impl FunctionSignature { pub(crate) fn from_hir(db: &db::RootDatabase, function: hir::Function) -> Self { let doc = function.docs(db); - let (_, ast_node) = function.source(db); + let ast_node = function.source(db).ast; FunctionSignature::from(&*ast_node).with_doc_opt(doc) } } diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index bef5f0980..3333771ab 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -164,13 +164,7 @@ impl NavigationTarget { } pub(crate) fn from_function(db: &RootDatabase, func: hir::Function) -> NavigationTarget { - let (file_id, fn_def) = func.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*fn_def, - fn_def.doc_comment_text(), - fn_def.short_label(), - ) + NavigationTarget::from_def_source(db, func) } pub(crate) fn from_field(db: &RootDatabase, field: hir::StructField) -> NavigationTarget { diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index ee0f2dde8..4dd3c1b9f 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -96,8 +96,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())); + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())); } Some(Macro(it)) => { let it = it.source(db).1; @@ -111,8 +111,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option match it { hir::ImplItem::Method(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ImplItem::Const(it) => { let it = it.source(db).1; @@ -132,8 +132,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Struct(it) => { let src = it.source(db); -- cgit v1.2.3 From 46bc8675edd403ffcd8963e4f26447b283e9d09e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:13:20 +0300 Subject: use Source for statics and consts --- crates/ra_ide_api/src/completion/presentation.rs | 3 +- crates/ra_ide_api/src/display/navigation_target.rs | 32 +++------------------- crates/ra_ide_api/src/hover.rs | 12 ++++---- 3 files changed, 11 insertions(+), 36 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index e9ae20225..8c4d7127b 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -126,12 +126,11 @@ impl Completions { } pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) { - let (_file_id, ast_node) = constant.source(ctx.db); + let ast_node = constant.source(ctx.db).ast; let name = match ast_node.name() { Some(name) => name, _ => return, }; - let (_, ast_node) = constant.source(ctx.db); let detail = const_label(&ast_node); CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.text().to_string()) diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 3333771ab..a036a3b36 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -212,24 +212,8 @@ impl NavigationTarget { hir::ModuleDef::Struct(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Enum(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), - hir::ModuleDef::Const(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::ModuleDef::Static(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::ModuleDef::Const(it) => NavigationTarget::from_def_source(db, it), + hir::ModuleDef::Static(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::EnumVariant(var) => { let src = var.source(db); NavigationTarget::from_named( @@ -281,16 +265,8 @@ impl NavigationTarget { pub(crate) fn from_impl_item(db: &RootDatabase, impl_item: hir::ImplItem) -> NavigationTarget { match impl_item { - ImplItem::Method(f) => NavigationTarget::from_function(db, f), - ImplItem::Const(c) => { - let (file_id, node) = c.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + ImplItem::Method(it) => NavigationTarget::from_function(db, it), + ImplItem::Const(it) => NavigationTarget::from_def_source(db, it), ImplItem::TypeAlias(a) => { let (file_id, node) = a.source(db); NavigationTarget::from_named( diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 4dd3c1b9f..fe108a589 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -115,8 +115,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ImplItem::TypeAlias(it) => { let it = it.source(db).1; @@ -152,12 +152,12 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Static(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } hir::ModuleDef::Trait(it) => { let it = it.source(db).1; -- cgit v1.2.3 From 647c8f3df8e5f798f940ce0b93e5e0ccd59b0e7f Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:22:14 +0300 Subject: reduce duplication in hover --- crates/ra_ide_api/src/hover.rs | 80 +++++++++++++----------------------------- 1 file changed, 24 insertions(+), 56 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index fe108a589..0f68cacca 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -1,6 +1,7 @@ use ra_db::SourceDatabase; 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}}, }; use hir::HirDisplay; @@ -95,10 +96,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let src = it.source(db); - res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())); - } + Some(Method(it)) => res.extend(from_def_source(db, it)), Some(Macro(it)) => { let it = it.source(db).1; res.extend(hover_text(it.doc_comment_text(), None)); @@ -110,14 +108,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option match it { - hir::ImplItem::Method(it) => { - let src = it.source(db); - 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::Method(it) => res.extend(from_def_source(db, it)), + hir::ImplItem::Const(it) => res.extend(from_def_source(db, it)), hir::ImplItem::TypeAlias(it) => { let it = it.source(db).1; res.extend(hover_text(it.doc_comment_text(), it.short_label())) @@ -131,34 +123,16 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let src = it.source(db); - res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) - } - 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::Function(it) => res.extend(from_def_source(db, it)), + hir::ModuleDef::Struct(it) => res.extend(from_def_source(db, it)), + hir::ModuleDef::Union(it) => res.extend(from_def_source(db, it)), + hir::ModuleDef::Enum(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::EnumVariant(it) => { let src = it.source(db); res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) } - hir::ModuleDef::Const(it) => { - let src = it.source(db); - 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::Const(it) => res.extend(from_def_source(db, it)), + hir::ModuleDef::Static(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::Trait(it) => { let it = it.source(db).1; res.extend(hover_text(it.doc_comment_text(), it.short_label())) @@ -175,24 +149,9 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { if let Some((adt_def, _)) = ty.as_adt() { match adt_def { - hir::AdtDef::Struct(it) => { - let src = it.source(db); - res.extend(hover_text( - 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(), - )) - } + hir::AdtDef::Struct(it) => res.extend(from_def_source(db, it)), + hir::AdtDef::Union(it) => res.extend(from_def_source(db, it)), + hir::AdtDef::Enum(it) => res.extend(from_def_source(db, it)), } } } @@ -276,7 +235,16 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option(db: &RootDatabase, def: D) -> Option + where + D: hir::HasSource>, + 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 { -- cgit v1.2.3 From f2ccc54468348af96d6167da5971749ef0f4ab5e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:25:55 +0300 Subject: use Source for TypeAlias --- crates/ra_ide_api/src/completion/presentation.rs | 5 ++--- crates/ra_ide_api/src/display/navigation_target.rs | 20 ++------------------ crates/ra_ide_api/src/hover.rs | 18 ++++++------------ 3 files changed, 10 insertions(+), 33 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index 8c4d7127b..495899262 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -141,13 +141,12 @@ impl Completions { } pub(crate) fn add_type_alias(&mut self, ctx: &CompletionContext, type_alias: hir::TypeAlias) { - let (_file_id, type_def) = type_alias.source(ctx.db); + let type_def = type_alias.source(ctx.db).ast; let name = match type_def.name() { Some(name) => name, _ => return, }; - let (_, ast_node) = type_alias.source(ctx.db); - let detail = type_label(&ast_node); + let detail = type_label(&type_def); CompletionItem::new(CompletionKind::Reference, ctx.source_range(), name.text().to_string()) .kind(CompletionItemKind::TypeAlias) diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index a036a3b36..19a64f300 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -232,15 +232,7 @@ impl NavigationTarget { node.short_label(), ) } - hir::ModuleDef::TypeAlias(e) => { - let (file_id, node) = e.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + hir::ModuleDef::TypeAlias(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::BuiltinType(..) => { return None; } @@ -267,15 +259,7 @@ impl NavigationTarget { match impl_item { ImplItem::Method(it) => NavigationTarget::from_function(db, it), ImplItem::Const(it) => NavigationTarget::from_def_source(db, it), - ImplItem::TypeAlias(a) => { - let (file_id, node) = a.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + ImplItem::TypeAlias(it) => NavigationTarget::from_def_source(db, it), } } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 0f68cacca..c4826e515 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -107,14 +107,11 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option match it { - hir::ImplItem::Method(it) => res.extend(from_def_source(db, it)), - hir::ImplItem::Const(it) => res.extend(from_def_source(db, it)), - hir::ImplItem::TypeAlias(it) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } - }, + Some(AssocItem(it)) => res.extend(match it { + hir::ImplItem::Method(it) => from_def_source(db, it), + hir::ImplItem::Const(it) => from_def_source(db, it), + hir::ImplItem::TypeAlias(it) => from_def_source(db, it), + }), Some(Def(it)) => { match it { hir::ModuleDef::Module(it) => { @@ -137,10 +134,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } + hir::ModuleDef::TypeAlias(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::BuiltinType(_) => { // FIXME: hover for builtin Type ? } -- cgit v1.2.3 From 5e6213b516ab5c9be62c499ba0ea9eb399d68389 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:26:36 +0300 Subject: simplify --- crates/ra_ide_api/src/hover.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index c4826e515..237e1f4a1 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -142,11 +142,11 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { if let Some((adt_def, _)) = ty.as_adt() { - match adt_def { - hir::AdtDef::Struct(it) => res.extend(from_def_source(db, it)), - hir::AdtDef::Union(it) => res.extend(from_def_source(db, it)), - hir::AdtDef::Enum(it) => res.extend(from_def_source(db, it)), - } + res.extend(match adt_def { + hir::AdtDef::Struct(it) => from_def_source(db, it), + hir::AdtDef::Union(it) => from_def_source(db, it), + hir::AdtDef::Enum(it) => from_def_source(db, it), + }) } } Some(Pat(_)) => { -- cgit v1.2.3 From f411c2988d40bbdebc5c9a63ce4bfb883a2fbca1 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:34:01 +0300 Subject: use Source for Trait --- crates/ra_ide_api/src/display/navigation_target.rs | 20 ++------------------ crates/ra_ide_api/src/hover.rs | 10 ++-------- 2 files changed, 4 insertions(+), 26 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 19a64f300..2e3e3863a 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -214,24 +214,8 @@ impl NavigationTarget { hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Const(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::Static(it) => NavigationTarget::from_def_source(db, it), - hir::ModuleDef::EnumVariant(var) => { - let src = var.source(db); - NavigationTarget::from_named( - src.file_id.original_file(db), - &*src.ast, - src.ast.doc_comment_text(), - src.ast.short_label(), - ) - } - hir::ModuleDef::Trait(e) => { - let (file_id, node) = e.source(db); - NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), - node.short_label(), - ) - } + hir::ModuleDef::EnumVariant(it) => NavigationTarget::from_def_source(db, it), + hir::ModuleDef::Trait(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::TypeAlias(it) => NavigationTarget::from_def_source(db, it), hir::ModuleDef::BuiltinType(..) => { return None; diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 237e1f4a1..c4004435c 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -124,16 +124,10 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option res.extend(from_def_source(db, it)), hir::ModuleDef::Union(it) => res.extend(from_def_source(db, it)), hir::ModuleDef::Enum(it) => res.extend(from_def_source(db, it)), - hir::ModuleDef::EnumVariant(it) => { - let src = it.source(db); - res.extend(hover_text(src.ast.doc_comment_text(), src.ast.short_label())) - } + 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) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), it.short_label())) - } + 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 ? -- cgit v1.2.3 From a6e339e822bcba4d81f1ab3912ca9612be9b6a0a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:36:52 +0300 Subject: use Source for impl block --- crates/ra_ide_api/src/display/navigation_target.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 2e3e3863a..640d68544 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -228,12 +228,12 @@ impl NavigationTarget { db: &RootDatabase, impl_block: hir::ImplBlock, ) -> NavigationTarget { - let (file_id, node) = impl_block.source(db); + let src = impl_block.source(db); NavigationTarget::from_syntax( - file_id.as_original_file(), + src.file_id.as_original_file(), "impl".into(), None, - node.syntax(), + src.ast.syntax(), None, None, ) -- cgit v1.2.3 From 8b94b429e5a76a0518b07111f8faf0dca7457948 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:40:18 +0300 Subject: use Source for MacroDef --- crates/ra_ide_api/src/display/navigation_target.rs | 10 +++++----- crates/ra_ide_api/src/hover.rs | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 640d68544..e5e1aa011 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -248,12 +248,12 @@ impl NavigationTarget { } pub(crate) fn from_macro_def(db: &RootDatabase, macro_call: hir::MacroDef) -> NavigationTarget { - let (file_id, node) = macro_call.source(db); - log::debug!("nav target {}", node.syntax().debug_dump()); + let src = macro_call.source(db); + log::debug!("nav target {}", src.ast.syntax().debug_dump()); NavigationTarget::from_named( - file_id.original_file(db), - &*node, - node.doc_comment_text(), + src.file_id.original_file(db), + &*src.ast, + src.ast.doc_comment_text(), None, ) } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index c4004435c..72328a72b 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -98,8 +98,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option res.extend(from_def_source(db, it)), Some(Macro(it)) => { - let it = it.source(db).1; - res.extend(hover_text(it.doc_comment_text(), None)); + let src = it.source(db); + res.extend(hover_text(src.ast.doc_comment_text(), None)); } Some(FieldAccess(it)) => { let it = it.source(db).1; -- cgit v1.2.3 From 178d8e96b5c810f40e7dd282ab06bb25d1fc8a2a Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:43:36 +0300 Subject: use Source for StructField --- crates/ra_ide_api/src/display/navigation_target.rs | 6 +++--- crates/ra_ide_api/src/hover.rs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index e5e1aa011..efba122b1 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -168,9 +168,9 @@ impl NavigationTarget { } pub(crate) fn from_field(db: &RootDatabase, field: hir::StructField) -> NavigationTarget { - let (file_id, field) = field.source(db); - let file_id = file_id.original_file(db); - match field { + let src = field.source(db); + let file_id = src.file_id.original_file(db); + match src.ast { FieldSource::Named(it) => { NavigationTarget::from_named(file_id, &*it, it.doc_comment_text(), it.short_label()) } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 72328a72b..e43c1d8e5 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -102,8 +102,8 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { - let it = it.source(db).1; - if let hir::FieldSource::Named(it) = it { + let src = it.source(db); + if let hir::FieldSource::Named(it) = src.ast { res.extend(hover_text(it.doc_comment_text(), it.short_label())); } } -- cgit v1.2.3 From 0145d06515d990f8b7bf45e261674c265c52d858 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:47:24 +0300 Subject: use Source for module, part 1 --- crates/ra_ide_api/src/display/navigation_target.rs | 6 +++--- crates/ra_ide_api/src/hover.rs | 3 +-- crates/ra_ide_api/src/references.rs | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index efba122b1..4a92be710 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -129,10 +129,10 @@ impl NavigationTarget { } pub(crate) fn from_module(db: &RootDatabase, module: hir::Module) -> NavigationTarget { - let (file_id, source) = module.definition_source(db); - let file_id = file_id.as_original_file(); + let src = module.definition_source(db); + let file_id = src.file_id.as_original_file(); let name = module.name(db).map(|it| it.to_string().into()).unwrap_or_default(); - match source { + match src.ast { ModuleSource::SourceFile(node) => { NavigationTarget::from_syntax(file_id, name, None, node.syntax(), None, None) } diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index e43c1d8e5..77657607b 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -115,8 +115,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option { match it { hir::ModuleDef::Module(it) => { - let it = it.definition_source(db).1; - if let hir::ModuleSource::Module(it) = it { + if let hir::ModuleSource::Module(it) = it.definition_source(db).ast { res.extend(hover_text(it.doc_comment_text(), it.short_label())) } } diff --git a/crates/ra_ide_api/src/references.rs b/crates/ra_ide_api/src/references.rs index a75042b76..12cdc6a6d 100644 --- a/crates/ra_ide_api/src/references.rs +++ b/crates/ra_ide_api/src/references.rs @@ -148,9 +148,9 @@ fn rename_mod( let mut file_system_edits = Vec::new(); if let Some(module) = source_binder::module_from_declaration(db, position.file_id, &ast_module) { - let (file_id, module_source) = module.definition_source(db); - let file_id = file_id.as_original_file(); - match module_source { + let src = module.definition_source(db); + let file_id = src.file_id.as_original_file(); + match src.ast { ModuleSource::SourceFile(..) => { let mod_path: RelativePathBuf = db.file_relative_path(file_id); // mod is defined in path/to/dir/mod.rs -- cgit v1.2.3 From dd63f17027d5c873a5782dcbb08e9b068fc8ee00 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:48:27 +0300 Subject: use Source for module, part 2 --- crates/ra_ide_api/src/display/navigation_target.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 4a92be710..d7687e1a4 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -149,15 +149,15 @@ impl NavigationTarget { pub(crate) fn from_module_to_decl(db: &RootDatabase, module: hir::Module) -> NavigationTarget { let name = module.name(db).map(|it| it.to_string().into()).unwrap_or_default(); - if let Some((file_id, source)) = module.declaration_source(db) { - let file_id = file_id.as_original_file(); + if let Some(src) = module.declaration_source(db) { + let file_id = src.file_id.as_original_file(); return NavigationTarget::from_syntax( file_id, name, None, - source.syntax(), - source.doc_comment_text(), - source.short_label(), + src.ast.syntax(), + src.ast.doc_comment_text(), + src.ast.short_label(), ); } NavigationTarget::from_module(db, module) -- cgit v1.2.3 From c4512fadb1b332b13bb41b0aa8a28aa964664842 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 17:54:51 +0300 Subject: remove inherent source impls --- crates/ra_ide_api/src/completion/presentation.rs | 2 +- crates/ra_ide_api/src/display/function_signature.rs | 7 ++++--- crates/ra_ide_api/src/display/navigation_target.rs | 4 ++-- crates/ra_ide_api/src/hover.rs | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/completion/presentation.rs b/crates/ra_ide_api/src/completion/presentation.rs index 495899262..f4ff4404b 100644 --- a/crates/ra_ide_api/src/completion/presentation.rs +++ b/crates/ra_ide_api/src/completion/presentation.rs @@ -1,7 +1,7 @@ //! This modules takes care of rendering various defenitions as completion items. use join_to_string::join; use test_utils::tested_by; -use hir::{Docs, PerNs, Resolution, HirDisplay}; +use hir::{Docs, PerNs, Resolution, HirDisplay, HasSource}; use ra_syntax::ast::NameOwner; use crate::completion::{ diff --git a/crates/ra_ide_api/src/display/function_signature.rs b/crates/ra_ide_api/src/display/function_signature.rs index d0c155de7..b0b0c7122 100644 --- a/crates/ra_ide_api/src/display/function_signature.rs +++ b/crates/ra_ide_api/src/display/function_signature.rs @@ -1,10 +1,11 @@ -use super::{where_predicates, generic_parameters}; -use crate::db; use std::fmt::{self, Display}; + use join_to_string::join; use ra_syntax::ast::{self, AstNode, NameOwner, VisibilityOwner}; use std::convert::From; -use hir::{Docs, Documentation}; +use hir::{Docs, Documentation, HasSource}; + +use crate::{db, display::{where_predicates, generic_parameters}}; /// Contains information about a function signature #[derive(Debug)] diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index d7687e1a4..1e9cdaff4 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -5,7 +5,7 @@ use ra_syntax::{ ast::{self, DocCommentsOwner}, algo::visit::{visitor, Visitor}, }; -use hir::{ModuleSource, FieldSource, ImplItem}; +use hir::{ModuleSource, FieldSource, ImplItem, HasSource}; use crate::{FileSymbol, db::RootDatabase}; use super::short_label::ShortLabel; @@ -182,7 +182,7 @@ impl NavigationTarget { pub(crate) fn from_def_source(db: &RootDatabase, def: D) -> NavigationTarget where - D: hir::HasSource>, + D: HasSource>, A: ast::DocCommentsOwner + ast::NameOwner + ShortLabel, { let src = def.source(db); diff --git a/crates/ra_ide_api/src/hover.rs b/crates/ra_ide_api/src/hover.rs index 77657607b..ad00abe49 100644 --- a/crates/ra_ide_api/src/hover.rs +++ b/crates/ra_ide_api/src/hover.rs @@ -4,7 +4,7 @@ use ra_syntax::{ ast::{self, DocCommentsOwner}, algo::{find_covering_element, find_node_at_offset, ancestors_at_offset, visit::{visitor, Visitor}}, }; -use hir::HirDisplay; +use hir::{HirDisplay, HasSource}; use crate::{ db::RootDatabase, @@ -226,7 +226,7 @@ pub(crate) fn hover(db: &RootDatabase, position: FilePosition) -> Option(db: &RootDatabase, def: D) -> Option where - D: hir::HasSource>, + D: HasSource>, A: ast::DocCommentsOwner + ast::NameOwner + ShortLabel, { let src = def.source(db); -- cgit v1.2.3 From ff6f6b3a5223ddab81c7357a3c59bdb09936a552 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 11 Jun 2019 18:14:27 +0300 Subject: move docs under code model --- crates/ra_ide_api/src/display/navigation_target.rs | 8 ++------ crates/ra_ide_api/src/goto_definition.rs | 8 ++++---- 2 files changed, 6 insertions(+), 10 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs index 1e9cdaff4..823cdaaf3 100644 --- a/crates/ra_ide_api/src/display/navigation_target.rs +++ b/crates/ra_ide_api/src/display/navigation_target.rs @@ -163,10 +163,6 @@ impl NavigationTarget { NavigationTarget::from_module(db, module) } - pub(crate) fn from_function(db: &RootDatabase, func: hir::Function) -> NavigationTarget { - NavigationTarget::from_def_source(db, func) - } - pub(crate) fn from_field(db: &RootDatabase, field: hir::StructField) -> NavigationTarget { let src = field.source(db); let file_id = src.file_id.original_file(db); @@ -208,7 +204,7 @@ impl NavigationTarget { ) -> Option { let nav = match module_def { hir::ModuleDef::Module(module) => NavigationTarget::from_module(db, module), - hir::ModuleDef::Function(func) => NavigationTarget::from_function(db, func), + hir::ModuleDef::Function(func) => NavigationTarget::from_def_source(db, func), hir::ModuleDef::Struct(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Enum(it) => NavigationTarget::from_adt_def(db, it.into()), hir::ModuleDef::Union(it) => NavigationTarget::from_adt_def(db, it.into()), @@ -241,7 +237,7 @@ impl NavigationTarget { pub(crate) fn from_impl_item(db: &RootDatabase, impl_item: hir::ImplItem) -> NavigationTarget { match impl_item { - ImplItem::Method(it) => NavigationTarget::from_function(db, it), + ImplItem::Method(it) => NavigationTarget::from_def_source(db, it), ImplItem::Const(it) => NavigationTarget::from_def_source(db, it), ImplItem::TypeAlias(it) => NavigationTarget::from_def_source(db, it), } diff --git a/crates/ra_ide_api/src/goto_definition.rs b/crates/ra_ide_api/src/goto_definition.rs index 325a5a4f3..63ba6cf9d 100644 --- a/crates/ra_ide_api/src/goto_definition.rs +++ b/crates/ra_ide_api/src/goto_definition.rs @@ -59,10 +59,10 @@ pub(crate) fn reference_definition( let analyzer = hir::SourceAnalyzer::new(db, file_id, name_ref.syntax(), None); match classify_name_ref(db, &analyzer, name_ref) { - Some(Method(func)) => return Exact(NavigationTarget::from_function(db, func)), Some(Macro(mac)) => return Exact(NavigationTarget::from_macro_def(db, mac)), Some(FieldAccess(field)) => return Exact(NavigationTarget::from_field(db, field)), Some(AssocItem(assoc)) => return Exact(NavigationTarget::from_impl_item(db, assoc)), + Some(Method(func)) => return Exact(NavigationTarget::from_def_source(db, func)), Some(Def(def)) => match NavigationTarget::from_def(db, def) { Some(nav) => return Exact(nav), None => return Approximate(vec![]), @@ -253,12 +253,12 @@ mod tests { //- /foo/lib.rs #[macro_export] macro_rules! foo { - () => { + () => { {} }; - } + } ", - "foo MACRO_CALL FileId(2) [0; 79) [29; 32)", + "foo MACRO_CALL FileId(2) [0; 66) [29; 32)", ); } -- cgit v1.2.3