Skip to content

Commit 7ab4fd7

Browse files
committed
internal: remove one more usage of SyntaxRewriter
1 parent 526040e commit 7ab4fd7

File tree

1 file changed

+46
-56
lines changed

1 file changed

+46
-56
lines changed

crates/ide_assists/src/handlers/extract_function.rs

Lines changed: 46 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use ide_db::{
1010
use itertools::Itertools;
1111
use stdx::format_to;
1212
use syntax::{
13-
algo::SyntaxRewriter,
1413
ast::{
1514
self,
1615
edit::{AstNodeEdit, IndentLevel},
@@ -1362,7 +1361,8 @@ fn rewrite_body_segment(
13621361
syntax: &SyntaxNode,
13631362
) -> SyntaxNode {
13641363
let syntax = fix_param_usages(ctx, params, syntax);
1365-
update_external_control_flow(handler, &syntax)
1364+
update_external_control_flow(handler, &syntax);
1365+
syntax
13661366
}
13671367

13681368
/// change all usages to account for added `&`/`&mut` for some params
@@ -1415,75 +1415,65 @@ fn fix_param_usages(ctx: &AssistContext, params: &[Param], syntax: &SyntaxNode)
14151415
res
14161416
}
14171417

1418-
fn update_external_control_flow(handler: &FlowHandler, syntax: &SyntaxNode) -> SyntaxNode {
1419-
let mut rewriter = SyntaxRewriter::default();
1420-
1418+
fn update_external_control_flow(handler: &FlowHandler, syntax: &SyntaxNode) {
14211419
let mut nested_loop = None;
14221420
let mut nested_scope = None;
14231421
for event in syntax.preorder() {
1424-
let node = match event {
1425-
WalkEvent::Enter(e) => {
1426-
match e.kind() {
1427-
SyntaxKind::LOOP_EXPR | SyntaxKind::WHILE_EXPR | SyntaxKind::FOR_EXPR => {
1428-
if nested_loop.is_none() {
1429-
nested_loop = Some(e.clone());
1430-
}
1422+
match event {
1423+
WalkEvent::Enter(e) => match e.kind() {
1424+
SyntaxKind::LOOP_EXPR | SyntaxKind::WHILE_EXPR | SyntaxKind::FOR_EXPR => {
1425+
if nested_loop.is_none() {
1426+
nested_loop = Some(e.clone());
14311427
}
1432-
SyntaxKind::FN
1433-
| SyntaxKind::CONST
1434-
| SyntaxKind::STATIC
1435-
| SyntaxKind::IMPL
1436-
| SyntaxKind::MODULE => {
1437-
if nested_scope.is_none() {
1438-
nested_scope = Some(e.clone());
1439-
}
1428+
}
1429+
SyntaxKind::FN
1430+
| SyntaxKind::CONST
1431+
| SyntaxKind::STATIC
1432+
| SyntaxKind::IMPL
1433+
| SyntaxKind::MODULE => {
1434+
if nested_scope.is_none() {
1435+
nested_scope = Some(e.clone());
14401436
}
1441-
_ => {}
14421437
}
1443-
e
1444-
}
1438+
_ => {}
1439+
},
14451440
WalkEvent::Leave(e) => {
1441+
if nested_scope.is_none() {
1442+
if let Some(expr) = ast::Expr::cast(e.clone()) {
1443+
match expr {
1444+
ast::Expr::ReturnExpr(return_expr) if nested_scope.is_none() => {
1445+
let expr = return_expr.expr();
1446+
if let Some(replacement) = make_rewritten_flow(handler, expr) {
1447+
ted::replace(return_expr.syntax(), replacement.syntax())
1448+
}
1449+
}
1450+
ast::Expr::BreakExpr(break_expr) if nested_loop.is_none() => {
1451+
let expr = break_expr.expr();
1452+
if let Some(replacement) = make_rewritten_flow(handler, expr) {
1453+
ted::replace(break_expr.syntax(), replacement.syntax())
1454+
}
1455+
}
1456+
ast::Expr::ContinueExpr(continue_expr) if nested_loop.is_none() => {
1457+
if let Some(replacement) = make_rewritten_flow(handler, None) {
1458+
ted::replace(continue_expr.syntax(), replacement.syntax())
1459+
}
1460+
}
1461+
_ => {
1462+
// do nothing
1463+
}
1464+
}
1465+
}
1466+
}
1467+
14461468
if nested_loop.as_ref() == Some(&e) {
14471469
nested_loop = None;
14481470
}
14491471
if nested_scope.as_ref() == Some(&e) {
14501472
nested_scope = None;
14511473
}
1452-
continue;
14531474
}
14541475
};
1455-
if nested_scope.is_some() {
1456-
continue;
1457-
}
1458-
let expr = match ast::Expr::cast(node) {
1459-
Some(e) => e,
1460-
None => continue,
1461-
};
1462-
match expr {
1463-
ast::Expr::ReturnExpr(return_expr) if nested_scope.is_none() => {
1464-
let expr = return_expr.expr();
1465-
if let Some(replacement) = make_rewritten_flow(handler, expr) {
1466-
rewriter.replace_ast(&return_expr.into(), &replacement);
1467-
}
1468-
}
1469-
ast::Expr::BreakExpr(break_expr) if nested_loop.is_none() => {
1470-
let expr = break_expr.expr();
1471-
if let Some(replacement) = make_rewritten_flow(handler, expr) {
1472-
rewriter.replace_ast(&break_expr.into(), &replacement);
1473-
}
1474-
}
1475-
ast::Expr::ContinueExpr(continue_expr) if nested_loop.is_none() => {
1476-
if let Some(replacement) = make_rewritten_flow(handler, None) {
1477-
rewriter.replace_ast(&continue_expr.into(), &replacement);
1478-
}
1479-
}
1480-
_ => {
1481-
// do nothing
1482-
}
1483-
}
14841476
}
1485-
1486-
rewriter.rewrite(syntax)
14871477
}
14881478

14891479
fn make_rewritten_flow(handler: &FlowHandler, arg_expr: Option<ast::Expr>) -> Option<ast::Expr> {
@@ -1502,7 +1492,7 @@ fn make_rewritten_flow(handler: &FlowHandler, arg_expr: Option<ast::Expr>) -> Op
15021492
make::expr_call(make::expr_path(make_path_from_text("Err")), args)
15031493
}
15041494
};
1505-
Some(make::expr_return(Some(value)))
1495+
Some(make::expr_return(Some(value)).clone_for_update())
15061496
}
15071497

15081498
#[cfg(test)]

0 commit comments

Comments
 (0)