2
2
3
3
use crate :: TextRange ;
4
4
5
+ use hir:: { name, AsName , Path } ;
5
6
use ra_syntax:: {
6
7
ast:: { self , AttrsOwner , NameOwner , TypeAscriptionOwner , TypeParamsOwner } ,
7
8
match_ast, AstNode , SourceFile , SyntaxKind , SyntaxNode , WalkEvent ,
@@ -151,25 +152,12 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
151
152
Some ( node)
152
153
} ,
153
154
ast:: MacroCall ( it) => {
154
- let macro_name = it. syntax( )
155
- . children( )
156
- . find( |c|
157
- ![
158
- SyntaxKind :: COMMENT ,
159
- SyntaxKind :: WHITESPACE ,
160
- SyntaxKind :: ATTR
161
- ] . iter( )
162
- . any( |& k| k == c. kind( ) )
163
- ) ;
164
-
165
- match macro_name {
166
- None => return None ,
167
- Some ( n) => if n. first_token( ) . unwrap( ) . text( ) . as_str( ) != "macro_rules" {
168
- return None ;
169
- }
155
+ match it. path( ) . and_then( |p| Path :: from_ast( p) ) {
156
+ Some ( path) if path. mod_path( ) . segments. as_slice( ) == [ name![ macro_rules] ]
157
+ && it. name( ) . map( |n| n. as_name( ) ) . is_some( )
158
+ => decl( it) ,
159
+ _ => None ,
170
160
}
171
-
172
- decl( it)
173
161
} ,
174
162
_ => None ,
175
163
}
@@ -217,6 +205,11 @@ macro_rules! mcexp {
217
205
() => {}
218
206
}
219
207
208
+ /// Doc comment
209
+ macro_rules! mcexp {
210
+ () => {}
211
+ }
212
+
220
213
#[deprecated]
221
214
fn obsolete() {}
222
215
@@ -400,11 +393,20 @@ fn very_obsolete() {}
400
393
detail: None,
401
394
deprecated: false,
402
395
},
396
+ StructureNode {
397
+ parent: None,
398
+ label: "mcexp",
399
+ navigation_range: [387; 392),
400
+ node_range: [358; 409),
401
+ kind: MACRO_CALL,
402
+ detail: None,
403
+ deprecated: false,
404
+ },
403
405
StructureNode {
404
406
parent: None,
405
407
label: "obsolete",
406
- navigation_range: [375; 383 ),
407
- node_range: [358; 388 ),
408
+ navigation_range: [428; 436 ),
409
+ node_range: [411; 441 ),
408
410
kind: FN_DEF,
409
411
detail: Some(
410
412
"fn()",
@@ -414,8 +416,8 @@ fn very_obsolete() {}
414
416
StructureNode {
415
417
parent: None,
416
418
label: "very_obsolete",
417
- navigation_range: [428; 441 ),
418
- node_range: [390; 446 ),
419
+ navigation_range: [481; 494 ),
420
+ node_range: [443; 499 ),
419
421
kind: FN_DEF,
420
422
detail: Some(
421
423
"fn()",
0 commit comments