Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit a05970d

Browse files
bors[bot]ruabmbua
andauthored
2788: Fix file_structure() to recognize macro_rules! r=flodiebold a=ruabmbua Fixes rust-lang/rust-analyzer#2774. Not sure what to do about classifying macro definitions. Maybe make all macro invocations a function invocation? Co-authored-by: Roland Ruckerbauer <[email protected]>
2 parents d0b52e5 + 20b8d28 commit a05970d

File tree

1 file changed

+36
-8
lines changed

1 file changed

+36
-8
lines changed

crates/ra_ide/src/display/structure.rs

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -151,11 +151,11 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
151151
Some(node)
152152
},
153153
ast::MacroCall(it) => {
154-
let first_token = it.syntax().first_token().unwrap();
155-
if first_token.text().as_str() != "macro_rules" {
156-
return None;
154+
match it.path().and_then(|it| it.segment()).and_then(|it| it.name_ref()) {
155+
Some(path_segment) if path_segment.text() == "macro_rules"
156+
=> decl(it),
157+
_ => None,
157158
}
158-
decl(it)
159159
},
160160
_ => None,
161161
}
@@ -198,6 +198,16 @@ macro_rules! mc {
198198
() => {}
199199
}
200200
201+
#[macro_export]
202+
macro_rules! mcexp {
203+
() => {}
204+
}
205+
206+
/// Doc comment
207+
macro_rules! mcexp {
208+
() => {}
209+
}
210+
201211
#[deprecated]
202212
fn obsolete() {}
203213
@@ -372,11 +382,29 @@ fn very_obsolete() {}
372382
detail: None,
373383
deprecated: false,
374384
},
385+
StructureNode {
386+
parent: None,
387+
label: "mcexp",
388+
navigation_range: [334; 339),
389+
node_range: [305; 356),
390+
kind: MACRO_CALL,
391+
detail: None,
392+
deprecated: false,
393+
},
394+
StructureNode {
395+
parent: None,
396+
label: "mcexp",
397+
navigation_range: [387; 392),
398+
node_range: [358; 409),
399+
kind: MACRO_CALL,
400+
detail: None,
401+
deprecated: false,
402+
},
375403
StructureNode {
376404
parent: None,
377405
label: "obsolete",
378-
navigation_range: [322; 330),
379-
node_range: [305; 335),
406+
navigation_range: [428; 436),
407+
node_range: [411; 441),
380408
kind: FN_DEF,
381409
detail: Some(
382410
"fn()",
@@ -386,8 +414,8 @@ fn very_obsolete() {}
386414
StructureNode {
387415
parent: None,
388416
label: "very_obsolete",
389-
navigation_range: [375; 388),
390-
node_range: [337; 393),
417+
navigation_range: [481; 494),
418+
node_range: [443; 499),
391419
kind: FN_DEF,
392420
detail: Some(
393421
"fn()",

0 commit comments

Comments
 (0)