Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide/src/typing.rs')
-rw-r--r--crates/ide/src/typing.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs
index e87fc89fea..d3eee0e02e 100644
--- a/crates/ide/src/typing.rs
+++ b/crates/ide/src/typing.rs
@@ -175,9 +175,21 @@ fn on_opening_bracket_typed(
}
}
- // If it's a statement in a block, we don't know how many statements should be included
- if ast::ExprStmt::can_cast(expr.syntax().parent()?.kind()) {
- return None;
+ if let Some(parent) = expr.syntax().parent().and_then(ast::Expr::cast) {
+ let mut node = expr.syntax().clone();
+ let all_prev_sib_attr = loop {
+ match node.prev_sibling() {
+ Some(sib) if sib.kind().is_trivia() || sib.kind() == SyntaxKind::ATTR => {
+ node = sib
+ }
+ Some(_) => break false,
+ None => break true,
+ };
+ };
+
+ if all_prev_sib_attr {
+ expr = parent;
+ }
}
// Insert the closing bracket right after the expression.
@@ -827,6 +839,21 @@ fn f() {
}
"#,
);
+ type_char(
+ '{',
+ r#"
+fn main() {
+ #[allow(unreachable_code)]
+ $0g();
+}
+ "#,
+ r#"
+fn main() {
+ #[allow(unreachable_code)]
+ {g()};
+}
+ "#,
+ );
}
#[test]