@@ -205,17 +205,19 @@ fn eager_macro_recur(
205205 let ExpandResult { value, err : err2 } =
206206 db. parse_macro_expansion ( call_id. as_macro_file ( ) ) ;
207207
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+ }
219221
220222 ExpandResult {
221223 value : Some ( value. 0 . syntax_node ( ) . clone_for_update ( ) ) ,
@@ -250,22 +252,24 @@ fn eager_macro_recur(
250252 ) ?;
251253 let err = err. or ( error) ;
252254
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+ }
269273 // FIXME: Do we need to re-use _m here?
270274 ExpandResult { value : value. map ( |( n, _m) | n) , err }
271275 }
0 commit comments