From 8b94b429e5a76a0518b07111f8faf0dca7457948 Mon Sep 17 00:00:00 2001
From: Aleksey Kladov <aleksey.kladov@gmail.com>
Date: Tue, 11 Jun 2019 17:40:18 +0300
Subject: [PATCH] use Source for MacroDef

---
 crates/ra_hir/src/code_model.rs                   | 15 ++++++++++-----
 crates/ra_hir/src/docs.rs                         |  2 +-
 .../ra_ide_api/src/display/navigation_target.rs   | 10 +++++-----
 crates/ra_ide_api/src/hover.rs                    |  4 ++--
 4 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/crates/ra_hir/src/code_model.rs b/crates/ra_hir/src/code_model.rs
index 5b56f890e4d..adb61a80403 100644
--- a/crates/ra_hir/src/code_model.rs
+++ b/crates/ra_hir/src/code_model.rs
@@ -1003,12 +1003,17 @@ pub struct MacroDef {
     pub(crate) id: MacroDefId,
 }
 
+impl HasSource for MacroDef {
+    type Ast = TreeArc<ast::MacroCall>;
+
+    fn source(self, db: &(impl DefDatabase + AstDatabase)) -> Source<TreeArc<ast::MacroCall>> {
+        (self.id.0.file_id(), self.id.0.to_node(db)).into()
+    }
+}
+
 impl MacroDef {
-    pub fn source(
-        &self,
-        db: &(impl DefDatabase + AstDatabase),
-    ) -> (HirFileId, TreeArc<ast::MacroCall>) {
-        (self.id.0.file_id(), self.id.0.to_node(db))
+    pub fn source(&self, db: &(impl DefDatabase + AstDatabase)) -> Source<TreeArc<ast::MacroCall>> {
+        (self.id.0.file_id(), self.id.0.to_node(db)).into()
     }
 }
 
diff --git a/crates/ra_hir/src/docs.rs b/crates/ra_hir/src/docs.rs
index f736f38751e..cbf7ae10b6d 100644
--- a/crates/ra_hir/src/docs.rs
+++ b/crates/ra_hir/src/docs.rs
@@ -85,7 +85,7 @@ pub(crate) fn documentation_query(
         DocDef::Union(it) => docs_from_ast(&*it.source(db).ast),
         DocDef::Trait(it) => docs_from_ast(&*it.source(db).ast),
         DocDef::TypeAlias(it) => docs_from_ast(&*it.source(db).ast),
-        DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).1),
+        DocDef::MacroDef(it) => docs_from_ast(&*it.source(db).ast),
     }
 }
 
diff --git a/crates/ra_ide_api/src/display/navigation_target.rs b/crates/ra_ide_api/src/display/navigation_target.rs
index 640d6854441..e5e1aa01139 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 c4004435cc4..72328a72bcc 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<RangeIn
         match classify_name_ref(db, &analyzer, name_ref) {
             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));
+                let src = it.source(db);
+                res.extend(hover_text(src.ast.doc_comment_text(), None));
             }
             Some(FieldAccess(it)) => {
                 let it = it.source(db).1;