mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 13:25:09 +00:00
Fix expand macro
This commit is contained in:
parent
b568bcfe6d
commit
0a9c80053f
3 changed files with 16 additions and 9 deletions
|
@ -55,7 +55,7 @@ pub(crate) fn descend_into_macros(
|
|||
}
|
||||
let source_analyzer =
|
||||
hir::SourceAnalyzer::new(db, token.with_value(token.value.parent()).as_ref(), None);
|
||||
let exp = source_analyzer.expand(db, ¯o_call)?;
|
||||
let exp = source_analyzer.expand(db, token.with_value(¯o_call))?;
|
||||
exp.map_token_down(db, token.as_ref())
|
||||
})
|
||||
.last()
|
||||
|
|
|
@ -23,7 +23,7 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
|
|||
let mac = name_ref.syntax().ancestors().find_map(ast::MacroCall::cast)?;
|
||||
|
||||
let source = hir::Source::new(position.file_id.into(), mac.syntax());
|
||||
let expanded = expand_macro_recur(db, source, &mac)?;
|
||||
let expanded = expand_macro_recur(db, source, source.with_value(&mac))?;
|
||||
|
||||
// FIXME:
|
||||
// macro expansion may lose all white space information
|
||||
|
@ -35,10 +35,10 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
|
|||
fn expand_macro_recur(
|
||||
db: &RootDatabase,
|
||||
source: hir::Source<&SyntaxNode>,
|
||||
macro_call: &ast::MacroCall,
|
||||
macro_call: hir::Source<&ast::MacroCall>,
|
||||
) -> Option<SyntaxNode> {
|
||||
let analyzer = hir::SourceAnalyzer::new(db, source, None);
|
||||
let expansion = analyzer.expand(db, ¯o_call)?;
|
||||
let expansion = analyzer.expand(db, macro_call)?;
|
||||
let macro_file_id = expansion.file_id();
|
||||
let expanded: SyntaxNode = db.parse_or_expand(macro_file_id)?;
|
||||
|
||||
|
@ -46,8 +46,8 @@ fn expand_macro_recur(
|
|||
let mut replaces = FxHashMap::default();
|
||||
|
||||
for child in children.into_iter() {
|
||||
let source = hir::Source::new(macro_file_id, source.value);
|
||||
let new_node = expand_macro_recur(db, source, &child)?;
|
||||
let node = hir::Source::new(macro_file_id, &child);
|
||||
let new_node = expand_macro_recur(db, source, node)?;
|
||||
|
||||
replaces.insert(child.syntax().clone().into(), new_node.into());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue