Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/remove_parentheses.rs')
-rw-r--r--crates/ide-assists/src/handlers/remove_parentheses.rs19
1 files changed, 14 insertions, 5 deletions
diff --git a/crates/ide-assists/src/handlers/remove_parentheses.rs b/crates/ide-assists/src/handlers/remove_parentheses.rs
index f74fc26112..e7beb23bf8 100644
--- a/crates/ide-assists/src/handlers/remove_parentheses.rs
+++ b/crates/ide-assists/src/handlers/remove_parentheses.rs
@@ -1,4 +1,8 @@
-use syntax::{ast, AstNode, SyntaxKind, T};
+use syntax::{
+ ast::{self, syntax_factory::SyntaxFactory},
+ syntax_editor::Position,
+ AstNode, SyntaxKind, T,
+};
use crate::{AssistContext, AssistId, AssistKind, Assists};
@@ -30,7 +34,7 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
let expr = parens.expr()?;
let parent = parens.syntax().parent()?;
- if expr.needs_parens_in(parent) {
+ if expr.needs_parens_in(&parent) {
return None;
}
@@ -40,6 +44,7 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
"Remove redundant parentheses",
target,
|builder| {
+ let mut editor = builder.make_editor(parens.syntax());
let prev_token = parens.syntax().first_token().and_then(|it| it.prev_token());
let need_to_add_ws = match prev_token {
Some(it) => {
@@ -48,9 +53,13 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
}
None => false,
};
- let expr = if need_to_add_ws { format!(" {expr}") } else { expr.to_string() };
-
- builder.replace(parens.syntax().text_range(), expr)
+ if need_to_add_ws {
+ let make = SyntaxFactory::new();
+ editor.insert(Position::before(parens.syntax()), make.whitespace(" "));
+ editor.add_mappings(make.finish_with_mappings());
+ }
+ editor.replace(parens.syntax(), expr.syntax());
+ builder.add_file_edits(ctx.file_id(), editor);
},
)
}