mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Don't duplicate parens in patterns
This commit is contained in:
parent
f823386db8
commit
f7f4ea633b
2 changed files with 37 additions and 1 deletions
|
@ -63,6 +63,8 @@ pub(crate) struct CompletionContext<'a> {
|
||||||
pub(super) dot_receiver_is_ambiguous_float_literal: bool,
|
pub(super) dot_receiver_is_ambiguous_float_literal: bool,
|
||||||
/// If this is a call (method or function) in particular, i.e. the () are already there.
|
/// If this is a call (method or function) in particular, i.e. the () are already there.
|
||||||
pub(super) is_call: bool,
|
pub(super) is_call: bool,
|
||||||
|
/// Like `is_call`, but for tuple patterns.
|
||||||
|
pub(super) is_pattern_call: bool,
|
||||||
/// If this is a macro call, i.e. the () are already there.
|
/// If this is a macro call, i.e. the () are already there.
|
||||||
pub(super) is_macro_call: bool,
|
pub(super) is_macro_call: bool,
|
||||||
pub(super) is_path_type: bool,
|
pub(super) is_path_type: bool,
|
||||||
|
@ -136,6 +138,7 @@ impl<'a> CompletionContext<'a> {
|
||||||
is_new_item: false,
|
is_new_item: false,
|
||||||
dot_receiver: None,
|
dot_receiver: None,
|
||||||
is_call: false,
|
is_call: false,
|
||||||
|
is_pattern_call: false,
|
||||||
is_macro_call: false,
|
is_macro_call: false,
|
||||||
is_path_type: false,
|
is_path_type: false,
|
||||||
has_type_args: false,
|
has_type_args: false,
|
||||||
|
@ -370,6 +373,8 @@ impl<'a> CompletionContext<'a> {
|
||||||
.and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast))
|
.and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast))
|
||||||
.is_some();
|
.is_some();
|
||||||
self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some();
|
self.is_macro_call = path.syntax().parent().and_then(ast::MacroCall::cast).is_some();
|
||||||
|
self.is_pattern_call =
|
||||||
|
path.syntax().parent().and_then(ast::TupleStructPat::cast).is_some();
|
||||||
|
|
||||||
self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some();
|
self.is_path_type = path.syntax().parent().and_then(ast::PathType::cast).is_some();
|
||||||
self.has_type_args = segment.type_arg_list().is_some();
|
self.has_type_args = segment.type_arg_list().is_some();
|
||||||
|
|
|
@ -384,10 +384,17 @@ impl Builder {
|
||||||
if !ctx.config.add_call_parenthesis {
|
if !ctx.config.add_call_parenthesis {
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
if ctx.use_item_syntax.is_some() || ctx.is_call {
|
if ctx.use_item_syntax.is_some() {
|
||||||
mark::hit!(no_parens_in_use_item);
|
mark::hit!(no_parens_in_use_item);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
if ctx.is_pattern_call {
|
||||||
|
mark::hit!(dont_duplicate_pattern_parens);
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
if ctx.is_call {
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't add parentheses if the expected type is some function reference.
|
// Don't add parentheses if the expected type is some function reference.
|
||||||
if let Some(ty) = &ctx.expected_type {
|
if let Some(ty) = &ctx.expected_type {
|
||||||
|
@ -907,6 +914,30 @@ fn main(value: Option<i32>) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn dont_duplicate_pattern_parens() {
|
||||||
|
mark::check!(dont_duplicate_pattern_parens);
|
||||||
|
check_edit(
|
||||||
|
"Var",
|
||||||
|
r#"
|
||||||
|
enum E { Var(i32) }
|
||||||
|
fn main() {
|
||||||
|
match E::Var(92) {
|
||||||
|
E::<|>(92) => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
r#"
|
||||||
|
enum E { Var(i32) }
|
||||||
|
fn main() {
|
||||||
|
match E::Var(92) {
|
||||||
|
E::Var(92) => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn no_call_parens_if_fn_ptr_needed() {
|
fn no_call_parens_if_fn_ptr_needed() {
|
||||||
mark::check!(no_call_parens_if_fn_ptr_needed);
|
mark::check!(no_call_parens_if_fn_ptr_needed);
|
||||||
|
|
Loading…
Reference in a new issue