diff options
| author | bors <bors@rust-lang.org> | 2022-12-24 10:46:43 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-12-24 10:46:43 +0000 |
| commit | 8766bbdc30a297aaa249193f5513fb261ccef17c (patch) | |
| tree | 4b6141e66c79bd3545e280cabe09e22cd3342dcb /compiler | |
| parent | 5e8bab91d339037388d152fd5066c26ae707d54e (diff) | |
| parent | 750bf73aea78a613456dc93f34cc32e43e9252f8 (diff) | |
| download | rust-8766bbdc30a297aaa249193f5513fb261ccef17c.tar.gz rust-8766bbdc30a297aaa249193f5513fb261ccef17c.zip | |
Auto merge of #106111 - matthiaskrgr:rollup-nnpoe5h, r=matthiaskrgr
Rollup of 6 pull requests Successful merges: - #105465 (Improve top-level docs) - #105872 (Suggest remove last method call when type coerce with expected type) - #106032 (std: only use LFS function on glibc) - #106078 (Provide more context on FileCheck failures) - #106100 (Codegen test for derived `<` on trivial newtype [TEST ONLY]) - #106109 (rustdoc: make line number CSS for doc comment and scraped the same) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_hir_typeck/src/demand.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs | 25 |
2 files changed, 26 insertions, 0 deletions
diff --git a/compiler/rustc_hir_typeck/src/demand.rs b/compiler/rustc_hir_typeck/src/demand.rs index e68bd1297c8..042ff0b46a5 100644 --- a/compiler/rustc_hir_typeck/src/demand.rs +++ b/compiler/rustc_hir_typeck/src/demand.rs @@ -38,6 +38,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // Use `||` to give these suggestions a precedence let _ = self.suggest_missing_parentheses(err, expr) + || self.suggest_remove_last_method_call(err, expr, expected) || self.suggest_associated_const(err, expr, expected) || self.suggest_deref_ref_or_into(err, expr, expected, expr_ty, expected_ty_expr) || self.suggest_option_to_bool(err, expr, expr_ty, expected) diff --git a/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs b/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs index efec0244633..9a7d753e66b 100644 --- a/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs +++ b/compiler/rustc_hir_typeck/src/fn_ctxt/suggestions.rs @@ -329,6 +329,31 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { } } + pub fn suggest_remove_last_method_call( + &self, + err: &mut Diagnostic, + expr: &hir::Expr<'tcx>, + expected: Ty<'tcx>, + ) -> bool { + if let hir::ExprKind::MethodCall(hir::PathSegment { ident: method, .. }, recv_expr, &[], _) = expr.kind && + let Some(recv_ty) = self.typeck_results.borrow().expr_ty_opt(recv_expr) && + self.can_coerce(recv_ty, expected) { + let span = if let Some(recv_span) = recv_expr.span.find_ancestor_inside(expr.span) { + expr.span.with_lo(recv_span.hi()) + } else { + expr.span.with_lo(method.span.lo() - rustc_span::BytePos(1)) + }; + err.span_suggestion_verbose( + span, + "try removing the method call", + "", + Applicability::MachineApplicable, + ); + return true; + } + false + } + pub fn suggest_deref_ref_or_into( &self, err: &mut Diagnostic, |
