diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2021-08-30 20:34:26 +0200 |
|---|---|---|
| committer | Mara Bos <m-ou.se@m-ou.se> | 2021-08-31 16:25:51 +0200 |
| commit | a15dab9ce28f46fbcebbe117b18fc4a55d2b89b6 (patch) | |
| tree | 7296d5d0b101e54cf60068c44b40e0eb46a18342 | |
| parent | 2a06daa86361c1c96c6ac7b85b3b049b93c364e2 (diff) | |
| download | rust-a15dab9ce28f46fbcebbe117b18fc4a55d2b89b6.tar.gz rust-a15dab9ce28f46fbcebbe117b18fc4a55d2b89b6.zip | |
Use right span in prelude collision suggestions with macros.
| -rw-r--r-- | compiler/rustc_typeck/src/check/method/prelude2021.rs | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/compiler/rustc_typeck/src/check/method/prelude2021.rs b/compiler/rustc_typeck/src/check/method/prelude2021.rs index 1347f56258e..59590c00df5 100644 --- a/compiler/rustc_typeck/src/check/method/prelude2021.rs +++ b/compiler/rustc_typeck/src/check/method/prelude2021.rs @@ -156,15 +156,16 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { segment.ident.name )); - let (self_adjusted, precise) = self.adjust_expr(pick, self_expr); + let (self_adjusted, precise) = self.adjust_expr(pick, self_expr, sp); if precise { let args = args .iter() .skip(1) .map(|arg| { + let span = arg.span.find_ancestor_inside(sp).unwrap_or_default(); format!( ", {}", - self.sess().source_map().span_to_snippet(arg.span).unwrap() + self.sess().source_map().span_to_snippet(span).unwrap() ) }) .collect::<String>(); @@ -275,7 +276,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let mut self_ty_name = self .sess() .source_map() - .span_to_snippet(self_ty_span) + .span_to_snippet(self_ty_span.find_ancestor_inside(span).unwrap_or_default()) .unwrap_or_else(|_| self_ty.to_string()); // Get the number of generics the self type has (if an Adt) unless we can determine that @@ -370,7 +371,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { /// Creates a string version of the `expr` that includes explicit adjustments. /// Returns the string and also a bool indicating whther this is a *precise* /// suggestion. - fn adjust_expr(&self, pick: &Pick<'tcx>, expr: &hir::Expr<'tcx>) -> (String, bool) { + fn adjust_expr( + &self, + pick: &Pick<'tcx>, + expr: &hir::Expr<'tcx>, + outer: Span, + ) -> (String, bool) { let derefs = "*".repeat(pick.autoderefs); let autoref = match pick.autoref_or_ptr_adjustment { @@ -379,12 +385,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { Some(probe::AutorefOrPtrAdjustment::ToConstPtr) | None => "", }; - let (expr_text, precise) = - if let Ok(expr_text) = self.sess().source_map().span_to_snippet(expr.span) { - (expr_text, true) - } else { - ("(..)".to_string(), false) - }; + let (expr_text, precise) = if let Ok(expr_text) = self + .sess() + .source_map() + .span_to_snippet(expr.span.find_ancestor_inside(outer).unwrap_or_default()) + { + (expr_text, true) + } else { + ("(..)".to_string(), false) + }; let adjusted_text = if let Some(probe::AutorefOrPtrAdjustment::ToConstPtr) = pick.autoref_or_ptr_adjustment |
