Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir_expand/src/lib.rs')
| -rw-r--r-- | crates/hir_expand/src/lib.rs | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/crates/hir_expand/src/lib.rs b/crates/hir_expand/src/lib.rs index 99cb493f32..537ea087f9 100644 --- a/crates/hir_expand/src/lib.rs +++ b/crates/hir_expand/src/lib.rs @@ -885,6 +885,16 @@ impl ExpandTo { None => return ExpandTo::Statements, }; + // FIXME: macros in statement position are treated as expression statements, they should + // probably be their own statement kind. The *grand*parent indicates what's valid. + if parent.kind() == MACRO_EXPR + && parent + .parent() + .map_or(true, |p| matches!(p.kind(), EXPR_STMT | STMT_LIST | MACRO_STMTS)) + { + return ExpandTo::Statements; + } + match parent.kind() { MACRO_ITEMS | SOURCE_FILE | ITEM_LIST => ExpandTo::Items, MACRO_STMTS | EXPR_STMT | STMT_LIST => ExpandTo::Statements, @@ -895,23 +905,10 @@ impl ExpandTo { | CLOSURE_EXPR | FIELD_EXPR | FOR_EXPR | IF_EXPR | INDEX_EXPR | LET_EXPR | MATCH_ARM | MATCH_EXPR | MATCH_GUARD | METHOD_CALL_EXPR | PAREN_EXPR | PATH_EXPR | PREFIX_EXPR | RANGE_EXPR | RECORD_EXPR_FIELD | REF_EXPR | RETURN_EXPR | TRY_EXPR - | TUPLE_EXPR | WHILE_EXPR => ExpandTo::Expr, + | TUPLE_EXPR | WHILE_EXPR | MACRO_EXPR => ExpandTo::Expr, _ => { - match ast::LetStmt::cast(parent) { - Some(let_stmt) => { - if let Some(true) = let_stmt.initializer().map(|it| it.syntax() == syn) { - ExpandTo::Expr - } else if let Some(true) = let_stmt.ty().map(|it| it.syntax() == syn) { - ExpandTo::Type - } else { - ExpandTo::Pattern - } - } - None => { - // Unknown , Just guess it is `Items` - ExpandTo::Items - } - } + // Unknown , Just guess it is `Items` + ExpandTo::Items } } } |