Suppress import errors for traits that couldve applied in method lookup on error
This commit is contained in:
parent
f6648f252a
commit
c3b696dec9
4 changed files with 46 additions and 0 deletions
|
@ -199,6 +199,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
self_ty, segment, span, call_expr, self_expr, &pick, args,
|
||||
);
|
||||
|
||||
// NOTE: on the failure path, we also record the possibly-used trait methods
|
||||
// since an unused import warning is kinda distracting from the method error.
|
||||
for &import_id in &pick.import_ids {
|
||||
debug!("used_trait_import: {:?}", import_id);
|
||||
self.typeck_results.borrow_mut().used_trait_imports.insert(import_id);
|
||||
|
|
|
@ -191,6 +191,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
|||
expected: Expectation<'tcx>,
|
||||
trait_missing_method: bool,
|
||||
) -> ErrorGuaranteed {
|
||||
// NOTE: Reporting a method error should also suppress any unused trait errors,
|
||||
// since the method error is very possibly the reason why the trait wasn't used.
|
||||
for &import_id in
|
||||
self.tcx.in_scope_traits(call_id).into_iter().flatten().flat_map(|c| &c.import_ids)
|
||||
{
|
||||
self.typeck_results.borrow_mut().used_trait_imports.insert(import_id);
|
||||
}
|
||||
|
||||
let (span, sugg_span, source, item_name, args) = match self.tcx.hir_node(call_id) {
|
||||
hir::Node::Expr(&hir::Expr {
|
||||
kind: hir::ExprKind::MethodCall(segment, rcvr, args, _),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue