From db151763d42c725685bb9e86a16fa2b6cb7a64c7 Mon Sep 17 00:00:00 2001
From: Roland Ruckerbauer <roland.rucky@gmail.com>
Date: Fri, 10 Jan 2020 20:35:23 +0100
Subject: Fix file_structure()  to recognize macro_rules! where first token !=
 "macro_rules"

---
 crates/ra_ide/src/display/structure.rs | 20 +++++++++++++++++---
 1 file changed, 17 insertions(+), 3 deletions(-)

(limited to 'crates/ra_ide/src/display')

diff --git a/crates/ra_ide/src/display/structure.rs b/crates/ra_ide/src/display/structure.rs
index a80d65ac7..be21fa913 100644
--- a/crates/ra_ide/src/display/structure.rs
+++ b/crates/ra_ide/src/display/structure.rs
@@ -151,10 +151,24 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
                 Some(node)
             },
             ast::MacroCall(it) => {
-                let first_token = it.syntax().first_token().unwrap();
-                if first_token.text().as_str() != "macro_rules" {
-                    return None;
+                let macro_name = it.syntax()
+                    .children()
+                    .find(|c|
+                        ![
+                            SyntaxKind::COMMENT,
+                            SyntaxKind::WHITESPACE,
+                            SyntaxKind::ATTR
+                        ].iter()
+                        .any(|&k| k == c.kind())
+                    );
+
+                match macro_name {
+                    None => return None,
+                    Some(n) => if n.first_token().unwrap().text().as_str() != "macro_rules" {
+                        return None;
+                    }
                 }
+
                 decl(it)
             },
             _ => None,
-- 
cgit v1.2.3