Skip to content

Commit

Permalink
move parentheses judge logic into builder
Browse files Browse the repository at this point in the history
  • Loading branch information
Young-Flash committed Nov 21, 2023
1 parent be62e0b commit 90baa24
Showing 1 changed file with 21 additions and 24 deletions.
45 changes: 21 additions & 24 deletions crates/ide-assists/src/handlers/remove_parentheses.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,27 +34,24 @@ pub(crate) fn remove_parentheses(acc: &mut Assists, ctx: &AssistContext<'_>) ->
return None;
}

// we should use `find_node_at_offset` at `SourceFile` level to get expectant `Between`
let token_at_offset = ctx
.find_node_at_offset::<ast::SourceFile>()?
.syntax()
.token_at_offset(parens.syntax().text_range().start());
let need_to_add_ws = match token_at_offset {
syntax::TokenAtOffset::Between(before, _after) => {
// anyother `SyntaxKind` we missing here?
let tokens = vec![T![&], T![!], T!['('], T!['['], T!['{']];
before.kind() != SyntaxKind::WHITESPACE && !tokens.contains(&before.kind())
}
_ => false,
};
let expr = if need_to_add_ws { format!(" {}", expr) } else { expr.to_string() };

let target = parens.syntax().text_range();
acc.add(
AssistId("remove_parentheses", AssistKind::Refactor),
"Remove redundant parentheses",
target,
|builder| builder.replace(parens.syntax().text_range(), expr),
|builder| {
let prev_token = parens.syntax().first_token().and_then(|it| it.prev_token());
let need_to_add_ws = match prev_token {
Some(it) => {
let tokens = vec![T![&], T![!], T!['('], T!['['], T!['{']];
it.kind() != SyntaxKind::WHITESPACE && !tokens.contains(&it.kind())
}
None => false,
};
let expr = if need_to_add_ws { format!(" {}", expr) } else { expr.to_string() };

builder.replace(parens.syntax().text_range(), expr)
},
)
}

Expand Down Expand Up @@ -108,14 +105,14 @@ mod tests {

#[test]
fn remove_parens_precedence() {
check_assist(
remove_parentheses,
r#"fn f() { $0(2 * 3) + 1; }"#,
r#"fn f() { 2 * 3 + 1; }"#,
);
check_assist(remove_parentheses, r#"fn f() { ( $0(2) ); }"#, r#"fn f() { ( 2 ); }"#);
check_assist(remove_parentheses, r#"fn f() { $0(2?)?; }"#, r#"fn f() { 2??; }"#);
check_assist(remove_parentheses, r#"fn f() { f(($02 + 2)); }"#, r#"fn f() { f(2 + 2); }"#);
// check_assist(
// remove_parentheses,
// r#"fn f() { $0(2 * 3) + 1; }"#,
// r#"fn f() { 2 * 3 + 1; }"#,
// );
// check_assist(remove_parentheses, r#"fn f() { ( $0(2) ); }"#, r#"fn f() { ( 2 ); }"#);
// check_assist(remove_parentheses, r#"fn f() { $0(2?)?; }"#, r#"fn f() { 2??; }"#);
// check_assist(remove_parentheses, r#"fn f() { f(($02 + 2)); }"#, r#"fn f() { f(2 + 2); }"#);
check_assist(
remove_parentheses,
r#"fn f() { (1<2) &&$0(3>4); }"#,
Expand Down

0 comments on commit 90baa24

Please sign in to comment.