Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/ide_assists/src/handlers/extract_function.rs18
1 files changed, 10 insertions, 8 deletions
diff --git a/crates/ide_assists/src/handlers/extract_function.rs b/crates/ide_assists/src/handlers/extract_function.rs
index 5452d09177..06195624ed 100644
--- a/crates/ide_assists/src/handlers/extract_function.rs
+++ b/crates/ide_assists/src/handlers/extract_function.rs
@@ -1506,14 +1506,16 @@ fn make_body(
let body_indent = IndentLevel(1);
let elements: Vec<SyntaxElement> = elements
.into_iter()
- .map(|stmt| match stmt {
- syntax::NodeOrToken::Node(n) => {
- let ast_element = ast::Stmt::cast(n).unwrap();
- let indented = ast_element.dedent(old_indent).indent(body_indent);
- let ast_node = indented.syntax().clone_subtree();
- syntax::NodeOrToken::try_from(ast_node).unwrap()
- }
- syntax::NodeOrToken::Token(t) => syntax::NodeOrToken::try_from(t).unwrap(),
+ .map(|node_or_token| match &node_or_token {
+ syntax::NodeOrToken::Node(node) => match ast::Stmt::cast(node.clone()) {
+ Some(stmt) => {
+ let indented = stmt.dedent(old_indent).indent(body_indent);
+ let ast_node = indented.syntax().clone_subtree();
+ syntax::NodeOrToken::Node(ast_node)
+ }
+ None => node_or_token,
+ },
+ _ => node_or_token,
})
.collect::<Vec<SyntaxElement>>();
let tail_expr = tail_expr.map(|expr| expr.dedent(old_indent).indent(body_indent));