Rollup merge of #88841 - notriddle:notriddle/method-parens, r=estebank
feat(rustc_typeck): suggest removing bad parens in `(recv.method)()` Fixes #88803
This commit is contained in:
commit
1bf94a156a
@ -1842,7 +1842,28 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||||||
expr_t
|
expr_t
|
||||||
);
|
);
|
||||||
err.span_label(field.span, "method, not a field");
|
err.span_label(field.span, "method, not a field");
|
||||||
if !self.expr_in_place(expr.hir_id) {
|
let expr_is_call =
|
||||||
|
if let hir::Node::Expr(hir::Expr { kind: ExprKind::Call(callee, _args), .. }) =
|
||||||
|
self.tcx.hir().get(self.tcx.hir().get_parent_node(expr.hir_id))
|
||||||
|
{
|
||||||
|
expr.hir_id == callee.hir_id
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
};
|
||||||
|
let expr_snippet =
|
||||||
|
self.tcx.sess.source_map().span_to_snippet(expr.span).unwrap_or(String::new());
|
||||||
|
if expr_is_call && expr_snippet.starts_with("(") && expr_snippet.ends_with(")") {
|
||||||
|
let after_open = expr.span.lo() + rustc_span::BytePos(1);
|
||||||
|
let before_close = expr.span.hi() - rustc_span::BytePos(1);
|
||||||
|
err.multipart_suggestion(
|
||||||
|
"remove wrapping parentheses to call the method",
|
||||||
|
vec![
|
||||||
|
(expr.span.with_hi(after_open), String::new()),
|
||||||
|
(expr.span.with_lo(before_close), String::new()),
|
||||||
|
],
|
||||||
|
Applicability::MachineApplicable,
|
||||||
|
);
|
||||||
|
} else if !self.expr_in_place(expr.hir_id) {
|
||||||
self.suggest_method_call(
|
self.suggest_method_call(
|
||||||
&mut err,
|
&mut err,
|
||||||
"use parentheses to call the method",
|
"use parentheses to call the method",
|
||||||
|
9
src/test/ui/typeck/issue-88803-call-expr-method.fixed
Normal file
9
src/test/ui/typeck/issue-88803-call-expr-method.fixed
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a = Some(42);
|
||||||
|
println!(
|
||||||
|
"The value is {}.",
|
||||||
|
a.unwrap() //~ERROR [E0615]
|
||||||
|
);
|
||||||
|
}
|
9
src/test/ui/typeck/issue-88803-call-expr-method.rs
Normal file
9
src/test/ui/typeck/issue-88803-call-expr-method.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a = Some(42);
|
||||||
|
println!(
|
||||||
|
"The value is {}.",
|
||||||
|
(a.unwrap)() //~ERROR [E0615]
|
||||||
|
);
|
||||||
|
}
|
15
src/test/ui/typeck/issue-88803-call-expr-method.stderr
Normal file
15
src/test/ui/typeck/issue-88803-call-expr-method.stderr
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
error[E0615]: attempted to take value of method `unwrap` on type `Option<{integer}>`
|
||||||
|
--> $DIR/issue-88803-call-expr-method.rs:7:12
|
||||||
|
|
|
||||||
|
LL | (a.unwrap)()
|
||||||
|
| ^^^^^^ method, not a field
|
||||||
|
|
|
||||||
|
help: remove wrapping parentheses to call the method
|
||||||
|
|
|
||||||
|
LL - (a.unwrap)()
|
||||||
|
LL + a.unwrap()
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0615`.
|
Loading…
x
Reference in New Issue
Block a user