e81ae40770
That is, when offering suggestions for unresolved method calls, avoid suggesting traits for which implementing the trait for the receiver type either makes little sense (e.g. type errors, or sugared unboxed closures), or violates coherence. The latter is approximated by ensuring that at least one of `{receiver type, trait}` is local. This isn't precisely correct due to multidispatch, but the error messages one encounters in such situation are useless more often than not; it is better to be conservative and miss some cases, than have overly many false positives (e.g. writing `some_slice.map(|x| ...)` uselessly suggested that one should implement `IteratorExt` for `&[T]`, while the correct fix is to call `.iter()`). Closes #21420.
47 lines
970 B
Rust
47 lines
970 B
Rust
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
|
// file at the top-level directory of this distribution and at
|
|
// http://rust-lang.org/COPYRIGHT.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
// option. This file may not be copied, modified, or distributed
|
|
// except according to those terms.
|
|
|
|
pub use reexport::Reexported;
|
|
|
|
pub struct Foo;
|
|
pub enum Bar { X }
|
|
|
|
pub mod foo {
|
|
pub trait PubPub {
|
|
fn method(&self) {}
|
|
|
|
fn method3(&self) {}
|
|
}
|
|
|
|
impl PubPub for u32 {}
|
|
impl PubPub for i32 {}
|
|
}
|
|
pub mod bar {
|
|
trait PubPriv {
|
|
fn method(&self);
|
|
}
|
|
}
|
|
mod qux {
|
|
pub trait PrivPub {
|
|
fn method(&self);
|
|
}
|
|
}
|
|
mod quz {
|
|
trait PrivPriv {
|
|
fn method(&self);
|
|
}
|
|
}
|
|
|
|
mod reexport {
|
|
pub trait Reexported {
|
|
fn method(&self);
|
|
}
|
|
}
|