From a548958cdfb417156badcc529268d34b6cae82f9 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Sat, 5 Mar 2022 22:04:06 +0100 Subject: [PATCH] fix macro-calls always expanding to expressions in LetStmt --- crates/hir_expand/src/lib.rs | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/hir_expand/src/lib.rs b/crates/hir_expand/src/lib.rs index 649a160b33b..bdb01ca1701 100644 --- a/crates/hir_expand/src/lib.rs +++ b/crates/hir_expand/src/lib.rs @@ -890,19 +890,27 @@ impl ExpandTo { MACRO_PAT => ExpandTo::Pattern, MACRO_TYPE => ExpandTo::Type, - ARG_LIST | TRY_EXPR | TUPLE_EXPR | PAREN_EXPR | ARRAY_EXPR | FOR_EXPR | PATH_EXPR - | CLOSURE_EXPR | BREAK_EXPR | RETURN_EXPR | MATCH_EXPR | MATCH_ARM | MATCH_GUARD - | RECORD_EXPR_FIELD | CALL_EXPR | INDEX_EXPR | METHOD_CALL_EXPR | FIELD_EXPR - | AWAIT_EXPR | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR - | LET_EXPR | IF_EXPR | WHILE_EXPR => ExpandTo::Expr, - LET_STMT => { - // FIXME: Handle LHS Pattern - ExpandTo::Expr - } - + ARG_LIST | ARRAY_EXPR | AWAIT_EXPR | BIN_EXPR | BREAK_EXPR | CALL_EXPR | CAST_EXPR + | 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, _ => { - // Unknown , Just guess it is `Items` - ExpandTo::Items + 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 + } + } } } }