Add parenthesis around closure method call
This commit is contained in:
parent
cdfa2f86b7
commit
a72613be50
@ -253,11 +253,7 @@ impl ChainItemKind {
|
||||
return (
|
||||
ChainItemKind::Parent {
|
||||
expr: expr.clone(),
|
||||
parens: is_method_call_receiver
|
||||
&& matches!(
|
||||
&expr.kind,
|
||||
ast::ExprKind::Lit(lit) if crate::expr::lit_ends_in_dot(lit)
|
||||
),
|
||||
parens: is_method_call_receiver && should_add_parens(expr),
|
||||
},
|
||||
expr.span,
|
||||
);
|
||||
@ -982,3 +978,22 @@ fn trim_tries(s: &str) -> String {
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
/// Whether a method call's receiver needs parenthesis, like
|
||||
/// ```rust,ignore
|
||||
/// || .. .method();
|
||||
/// || 1.. .method();
|
||||
/// 1. .method();
|
||||
/// ```
|
||||
/// Which all need parenthesis or a space before `.method()`.
|
||||
fn should_add_parens(expr: &ast::Expr) -> bool {
|
||||
match expr.kind {
|
||||
ast::ExprKind::Lit(ref lit) => crate::expr::lit_ends_in_dot(lit),
|
||||
ast::ExprKind::Closure(ref cl) => match cl.body.kind {
|
||||
ast::ExprKind::Range(_, _, ast::RangeLimits::HalfOpen) => true,
|
||||
ast::ExprKind::Lit(ref lit) => crate::expr::lit_ends_in_dot(lit),
|
||||
_ => false,
|
||||
},
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
13
tests/source/issue-4808.rs
Normal file
13
tests/source/issue-4808.rs
Normal file
@ -0,0 +1,13 @@
|
||||
trait Trait {
|
||||
fn method(&self) {}
|
||||
}
|
||||
|
||||
impl<F: Fn() -> T, T> Trait for F {}
|
||||
|
||||
impl Trait for f32 {}
|
||||
|
||||
fn main() {
|
||||
|| 10. .method();
|
||||
|| .. .method();
|
||||
|| 1.. .method();
|
||||
}
|
13
tests/target/issue-4808.rs
Normal file
13
tests/target/issue-4808.rs
Normal file
@ -0,0 +1,13 @@
|
||||
trait Trait {
|
||||
fn method(&self) {}
|
||||
}
|
||||
|
||||
impl<F: Fn() -> T, T> Trait for F {}
|
||||
|
||||
impl Trait for f32 {}
|
||||
|
||||
fn main() {
|
||||
|| (10.).method();
|
||||
(|| ..).method();
|
||||
(|| 1..).method();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user