mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 13:13:18 +00:00 
			
		
		
		
	fix: Remove another faulty unwrap (expect)
This commit is contained in:
		
							parent
							
								
									7c765d9f9e
								
							
						
					
					
						commit
						bf5624664d
					
				@ -79,20 +79,18 @@ pub fn expand_eager_macro_input(
 | 
				
			|||||||
        return Ok(ExpandResult { value: None, err });
 | 
					        return Ok(ExpandResult { value: None, err });
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let og_tmap = mbe::syntax_node_to_token_map(
 | 
					 | 
				
			||||||
        macro_call.value.token_tree().expect("macro_arg_text succeeded").syntax(),
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    let (mut subtree, expanded_eager_input_token_map) =
 | 
					    let (mut subtree, expanded_eager_input_token_map) =
 | 
				
			||||||
        mbe::syntax_node_to_token_tree(&expanded_eager_input);
 | 
					        mbe::syntax_node_to_token_tree(&expanded_eager_input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let og_tmap = if let Some(tt) = macro_call.value.token_tree() {
 | 
				
			||||||
 | 
					        let og_tmap = mbe::syntax_node_to_token_map(tt.syntax());
 | 
				
			||||||
        // The tokenmap and ids of subtree point into the expanded syntax node, but that is inaccessible from the outside
 | 
					        // The tokenmap and ids of subtree point into the expanded syntax node, but that is inaccessible from the outside
 | 
				
			||||||
        // so we need to remap them to the original input of the eager macro.
 | 
					        // so we need to remap them to the original input of the eager macro.
 | 
				
			||||||
        subtree.visit_ids(&|id| {
 | 
					        subtree.visit_ids(&|id| {
 | 
				
			||||||
            // Note: we discard all token ids of braces and the like here, but that's not too bad and only a temporary fix
 | 
					            // Note: we discard all token ids of braces and the like here, but that's not too bad and only a temporary fix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if let Some(range) =
 | 
					            if let Some(range) = expanded_eager_input_token_map
 | 
				
			||||||
            expanded_eager_input_token_map.first_range_by_token(id, syntax::SyntaxKind::TOMBSTONE)
 | 
					                .first_range_by_token(id, syntax::SyntaxKind::TOMBSTONE)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // remap from expanded eager input to eager input expansion
 | 
					                // remap from expanded eager input to eager input expansion
 | 
				
			||||||
                if let Some(og_range) = mapping.get(&range) {
 | 
					                if let Some(og_range) = mapping.get(&range) {
 | 
				
			||||||
@ -106,6 +104,10 @@ pub fn expand_eager_macro_input(
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            tt::TokenId::UNSPECIFIED
 | 
					            tt::TokenId::UNSPECIFIED
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					        og_tmap
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        Default::default()
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    subtree.delimiter = crate::tt::Delimiter::unspecified();
 | 
					    subtree.delimiter = crate::tt::Delimiter::unspecified();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let loc = MacroCallLoc {
 | 
					    let loc = MacroCallLoc {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user