Skip to content

Commit 97b66d2

Browse files
committed
Review fixes.
- `suggest_snippet` handling space between refs; - Suggest message changing according to the number of refs that should be removed.
1 parent f44b945 commit 97b66d2

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/librustc/traits/error_reporting.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,8 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
883883
}
884884
}
885885

886+
/// Whenever references are used by mistake, like `for (i, e) in &vec.iter().enumerate()`,
887+
/// suggest removing these references until we reach a type that implements the trait.
886888
fn suggest_remove_reference(&self,
887889
obligation: &PredicateObligation<'tcx>,
888890
err: &mut DiagnosticBuilder<'tcx>,
@@ -896,16 +898,14 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
896898
.take_while(|c| *c == '&')
897899
.count();
898900

899-
let mut refs_remaining = refs_number;
900901
let mut trait_type = trait_ref.self_ty();
901902
let mut selcx = SelectionContext::new(self);
902903

903-
while refs_remaining > 0 {
904+
for refs_remaining in 0..refs_number {
904905
if let ty::TypeVariants::TyRef(_, ty::TypeAndMut{ ty: t_type, mutbl: _ }) =
905906
trait_type.sty {
906907

907908
trait_type = t_type;
908-
refs_remaining -= 1;
909909

910910
let substs = self.tcx.mk_substs_trait(trait_type, &[]);
911911
let new_trait_ref = ty::TraitRef::new(trait_ref.def_id, substs);
@@ -914,12 +914,16 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
914914
new_trait_ref.to_predicate());
915915

916916
if selcx.evaluate_obligation(&new_obligation) {
917+
let remove_refs = refs_remaining + 1;
918+
917919
let suggest_snippet = snippet.chars()
918-
.skip(refs_number)
920+
.filter(|c| !c.is_whitespace())
921+
.skip(remove_refs)
919922
.collect::<String>();
920923

921924
err.span_suggestion(span,
922-
"consider removing `&`s like",
925+
&format!("consider removing {} references `&`",
926+
remove_refs),
923927
format!("{}", suggest_snippet));
924928

925929
break;

0 commit comments

Comments
 (0)