9186: fix: Prefer attr macros in "expand macro recursively" r=jonas-schievink a=jonas-schievink

This allows expanding attribute macros on fn-like macro invocations

bors r+

Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
bors[bot] 2021-06-08 21:08:58 +00:00 committed by GitHub
commit cc7cfc5d3d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

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