@@ -205,17 +205,19 @@ fn eager_macro_recur(
205
205
let ExpandResult { value, err : err2 } =
206
206
db. parse_macro_expansion ( call_id. as_macro_file ( ) ) ;
207
207
208
- let call_tt_start =
209
- call. token_tree ( ) . unwrap ( ) . syntax ( ) . text_range ( ) . start ( ) ;
210
- let call_start = apply_offset ( call. syntax ( ) . text_range ( ) . start ( ) , offset) ;
211
- if let Some ( ( _, arg_map, _) ) = db. macro_arg ( call_id) . value . as_deref ( ) {
212
- mapping. extend ( arg_map. entries ( ) . filter_map ( |( tid, range) | {
213
- value
214
- . 1
215
- . first_range_by_token ( tid, syntax:: SyntaxKind :: TOMBSTONE )
216
- . map ( |r| ( r + call_start, range + call_tt_start) )
217
- } ) ) ;
218
- } ;
208
+ if let Some ( tt) = call. token_tree ( ) {
209
+ let call_tt_start = tt. syntax ( ) . text_range ( ) . start ( ) ;
210
+ let call_start =
211
+ apply_offset ( call. syntax ( ) . text_range ( ) . start ( ) , offset) ;
212
+ if let Some ( ( _, arg_map, _) ) = db. macro_arg ( call_id) . value . as_deref ( ) {
213
+ mapping. extend ( arg_map. entries ( ) . filter_map ( |( tid, range) | {
214
+ value
215
+ . 1
216
+ . first_range_by_token ( tid, syntax:: SyntaxKind :: TOMBSTONE )
217
+ . map ( |r| ( r + call_start, range + call_tt_start) )
218
+ } ) ) ;
219
+ }
220
+ }
219
221
220
222
ExpandResult {
221
223
value : Some ( value. 0 . syntax_node ( ) . clone_for_update ( ) ) ,
@@ -250,22 +252,24 @@ fn eager_macro_recur(
250
252
) ?;
251
253
let err = err. or ( error) ;
252
254
253
- let call_tt_start = call. token_tree ( ) . unwrap ( ) . syntax ( ) . text_range ( ) . start ( ) ;
254
- let call_start = apply_offset ( call. syntax ( ) . text_range ( ) . start ( ) , offset) ;
255
- if let Some ( ( _tt, arg_map, _) ) = parse
256
- . file_id
257
- . macro_file ( )
258
- . and_then ( |id| db. macro_arg ( id. macro_call_id ) . value )
259
- . as_deref ( )
260
- {
261
- mapping. extend ( arg_map. entries ( ) . filter_map ( |( tid, range) | {
262
- tm. first_range_by_token (
263
- decl_mac. as_ref ( ) . map ( |it| it. map_id_down ( tid) ) . unwrap_or ( tid) ,
264
- syntax:: SyntaxKind :: TOMBSTONE ,
265
- )
266
- . map ( |r| ( r + call_start, range + call_tt_start) )
267
- } ) ) ;
268
- } ;
255
+ if let Some ( tt) = call. token_tree ( ) {
256
+ let call_tt_start = tt. syntax ( ) . text_range ( ) . start ( ) ;
257
+ let call_start = apply_offset ( call. syntax ( ) . text_range ( ) . start ( ) , offset) ;
258
+ if let Some ( ( _tt, arg_map, _) ) = parse
259
+ . file_id
260
+ . macro_file ( )
261
+ . and_then ( |id| db. macro_arg ( id. macro_call_id ) . value )
262
+ . as_deref ( )
263
+ {
264
+ mapping. extend ( arg_map. entries ( ) . filter_map ( |( tid, range) | {
265
+ tm. first_range_by_token (
266
+ decl_mac. as_ref ( ) . map ( |it| it. map_id_down ( tid) ) . unwrap_or ( tid) ,
267
+ syntax:: SyntaxKind :: TOMBSTONE ,
268
+ )
269
+ . map ( |r| ( r + call_start, range + call_tt_start) )
270
+ } ) ) ;
271
+ }
272
+ }
269
273
// FIXME: Do we need to re-use _m here?
270
274
ExpandResult { value : value. map ( |( n, _m) | n) , err }
271
275
}
0 commit comments