Prefer attr macros in "expand macro recursively"

This commit is contained in:
Jonas Schievink 2021-06-08 22:13:22 +02:00
parent b6199de706
commit fcf22d68d4

View file

@ -2,9 +2,7 @@ use std::iter;
use hir::Semantics; use hir::Semantics;
use ide_db::RootDatabase; use ide_db::RootDatabase;
use syntax::{ use syntax::{ast, ted, AstNode, NodeOrToken, SyntaxKind, SyntaxKind::*, SyntaxNode, WalkEvent, T};
ast, match_ast, ted, AstNode, NodeOrToken, SyntaxKind, SyntaxKind::*, SyntaxNode, WalkEvent, T,
};
use crate::FilePosition; use crate::FilePosition;
@ -32,24 +30,20 @@ pub(crate) fn expand_macro(db: &RootDatabase, position: FilePosition) -> Option<
let mut expanded = None; let mut expanded = None;
let mut name = None; let mut name = None;
for node in tok.ancestors() { for node in tok.ancestors() {
match_ast! { if let Some(item) = ast::Item::cast(node.clone()) {
match node { expanded = sema.expand_attr_macro(&item);
ast::MacroCall(mac) => { if expanded.is_some() {
name = Some(mac.path()?.segment()?.name_ref()?.to_string());
expanded = expand_macro_recur(&sema, &mac);
break;
},
ast::Item(item) => {
// FIXME: add the macro name // FIXME: add the macro name
// FIXME: make this recursive too // FIXME: make this recursive too
name = Some("?".to_string()); name = Some("?".to_string());
expanded = sema.expand_attr_macro(&item);
if expanded.is_some() {
break; break;
} }
},
_ => {}
} }
if let Some(mac) = ast::MacroCall::cast(node) {
name = Some(mac.path()?.segment()?.name_ref()?.to_string());
expanded = expand_macro_recur(&sema, &mac);
break;
} }
} }