Skip to content

Commit

Permalink
Auto merge of rust-lang#33338 - birkenfeld:issue-25356, r=jseyfried
Browse files Browse the repository at this point in the history
typeck: limit number of candidates shown for a single error

No idea if 10/11 is a good limit. Are there any other such limits in rustc currently?

Fixes: rust-lang#25356
  • Loading branch information
bors committed May 12, 2016
2 parents 992bb13 + 6ab93d7 commit e88defe
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions src/librustc_typeck/check/method/suggest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {

sources.sort();
sources.dedup();
// Dynamic limit to avoid hiding just one candidate, which is silly.
let limit = if sources.len() == 5 { 5 } else { 4 };

for (idx, source) in sources.iter().enumerate() {
for (idx, source) in sources.iter().take(limit).enumerate() {
match *source {
CandidateSource::ImplSource(impl_did) => {
// Provide the best span we can. Use the item, if local to crate, else
Expand Down Expand Up @@ -151,6 +153,9 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
}
}
}
if sources.len() > limit {
err.note(&format!("and {} others", sources.len() - limit));
}
};

match error {
Expand Down Expand Up @@ -295,11 +300,15 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {

err.help(&msg[..]);

for (i, trait_did) in candidates.iter().enumerate() {
let limit = if candidates.len() == 5 { 5 } else { 4 };
for (i, trait_did) in candidates.iter().take(limit).enumerate() {
err.help(&format!("candidate #{}: `use {}`",
i + 1,
self.tcx.item_path_str(*trait_did)));
}
if candidates.len() > limit {
err.note(&format!("and {} others", candidates.len() - limit));
}
return
}

Expand Down

0 comments on commit e88defe

Please sign in to comment.