diff options
| author | Michael Goulet <michael@errs.io> | 2022-09-02 02:17:44 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2022-09-03 05:54:13 +0000 |
| commit | b0f3a551f2974eccf65b4477c9d7b2e42036d52f (patch) | |
| tree | 770446913e6afcd5455fb7d2a005bd0af75ba037 /compiler | |
| parent | 0209485578807b8084127f12d57771300edff87a (diff) | |
| download | rust-b0f3a551f2974eccf65b4477c9d7b2e42036d52f.tar.gz rust-b0f3a551f2974eccf65b4477c9d7b2e42036d52f.zip | |
Shrink suggestion span of argument mismatch error
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_typeck/src/check/fn_ctxt/checks.rs | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs b/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs index 7ff4aef2d25..ce0e59d0622 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs @@ -1056,11 +1056,22 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { }; if let Some(suggestion_text) = suggestion_text { let source_map = self.sess().source_map(); - let mut suggestion = format!( - "{}(", - source_map.span_to_snippet(full_call_span).unwrap_or_else(|_| fn_def_id - .map_or("".to_string(), |fn_def_id| tcx.item_name(fn_def_id).to_string())) - ); + let (mut suggestion, suggestion_span) = + if let Some(call_span) = full_call_span.find_ancestor_inside(error_span) { + ("(".to_string(), call_span.shrink_to_hi().to(error_span.shrink_to_hi())) + } else { + ( + format!( + "{}(", + source_map.span_to_snippet(full_call_span).unwrap_or_else(|_| { + fn_def_id.map_or("".to_string(), |fn_def_id| { + tcx.item_name(fn_def_id).to_string() + }) + }) + ), + error_span, + ) + }; let mut needs_comma = false; for (expected_idx, provided_idx) in matched_inputs.iter_enumerated() { if needs_comma { @@ -1088,7 +1099,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { } suggestion += ")"; err.span_suggestion_verbose( - error_span, + suggestion_span, &suggestion_text, suggestion, Applicability::HasPlaceholders, |
