Skip to content

Commit 4ab6729

Browse files
committed
Auto merge of rust-lang#15857 - Young-Flash:fix, r=Veykril
fix: remove parenthesis should ensure space close rust-lang/rust-analyzer#15844
2 parents 9aa867c + bd5a63b commit 4ab6729

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

crates/ide-assists/src/handlers/remove_parentheses.rs

+27-6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use syntax::{ast, AstNode};
1+
use syntax::{ast, AstNode, SyntaxKind, T};
22

33
use crate::{AssistContext, AssistId, AssistKind, Assists};
44

@@ -39,7 +39,19 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
3939
AssistId("remove_parentheses", AssistKind::Refactor),
4040
"Remove redundant parentheses",
4141
target,
42-
|builder| builder.replace_ast(parens.into(), expr),
42+
|builder| {
43+
let prev_token = parens.syntax().first_token().and_then(|it| it.prev_token());
44+
let need_to_add_ws = match prev_token {
45+
Some(it) => {
46+
let tokens = vec![T![&], T![!], T!['('], T!['['], T!['{']];
47+
it.kind() != SyntaxKind::WHITESPACE && !tokens.contains(&it.kind())
48+
}
49+
None => false,
50+
};
51+
let expr = if need_to_add_ws { format!(" {}", expr) } else { expr.to_string() };
52+
53+
builder.replace(parens.syntax().text_range(), expr)
54+
},
4355
)
4456
}
4557

@@ -49,6 +61,15 @@ mod tests {
4961

5062
use super::*;
5163

64+
#[test]
65+
fn remove_parens_space() {
66+
check_assist(
67+
remove_parentheses,
68+
r#"fn f() { match$0(true) {} }"#,
69+
r#"fn f() { match true {} }"#,
70+
);
71+
}
72+
5273
#[test]
5374
fn remove_parens_simple() {
5475
check_assist(remove_parentheses, r#"fn f() { $0(2) + 2; }"#, r#"fn f() { 2 + 2; }"#);
@@ -94,8 +115,8 @@ mod tests {
94115
check_assist(remove_parentheses, r#"fn f() { f(($02 + 2)); }"#, r#"fn f() { f(2 + 2); }"#);
95116
check_assist(
96117
remove_parentheses,
97-
r#"fn f() { (1<2)&&$0(3>4); }"#,
98-
r#"fn f() { (1<2)&&3>4; }"#,
118+
r#"fn f() { (1<2) &&$0(3>4); }"#,
119+
r#"fn f() { (1<2) && 3>4; }"#,
99120
);
100121
}
101122

@@ -164,8 +185,8 @@ mod tests {
164185
fn remove_parens_weird_places() {
165186
check_assist(
166187
remove_parentheses,
167-
r#"fn f() { match () { _=>$0(()) } }"#,
168-
r#"fn f() { match () { _=>() } }"#,
188+
r#"fn f() { match () { _ =>$0(()) } }"#,
189+
r#"fn f() { match () { _ => () } }"#,
169190
);
170191

171192
check_assist(

0 commit comments

Comments
 (0)