diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2020-02-10 20:50:16 +0100 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2020-03-14 14:10:56 +0100 |
| commit | 3e5259d3eb727244f4196e4a4c835ab0792a1606 (patch) | |
| tree | 64bb0b35489c30e6faefa8dafd74a7d64357f9a8 /src | |
| parent | 5ed3453af9db9c516e564e25ba9ee28056d48103 (diff) | |
| download | rust-3e5259d3eb727244f4196e4a4c835ab0792a1606.tar.gz rust-3e5259d3eb727244f4196e4a4c835ab0792a1606.zip | |
Move IntercrateAmbiguityCause back to rustc::traits::select.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/traits/select.rs | 41 | ||||
| -rw-r--r-- | src/librustc_infer/traits/select.rs | 41 |
2 files changed, 41 insertions, 41 deletions
diff --git a/src/librustc/traits/select.rs b/src/librustc/traits/select.rs index 08d78b3a0b2..d316d7659e2 100644 --- a/src/librustc/traits/select.rs +++ b/src/librustc/traits/select.rs @@ -288,3 +288,44 @@ impl<T: Clone> WithDepNode<T> { self.cached_value.clone() } } + +#[derive(Clone, Debug)] +pub enum IntercrateAmbiguityCause { + DownstreamCrate { trait_desc: String, self_desc: Option<String> }, + UpstreamCrateUpdate { trait_desc: String, self_desc: Option<String> }, + ReservationImpl { message: String }, +} + +impl IntercrateAmbiguityCause { + /// Emits notes when the overlap is caused by complex intercrate ambiguities. + /// See #23980 for details. + pub fn add_intercrate_ambiguity_hint(&self, err: &mut rustc_errors::DiagnosticBuilder<'_>) { + err.note(&self.intercrate_ambiguity_hint()); + } + + pub fn intercrate_ambiguity_hint(&self) -> String { + match self { + &IntercrateAmbiguityCause::DownstreamCrate { ref trait_desc, ref self_desc } => { + let self_desc = if let &Some(ref ty) = self_desc { + format!(" for type `{}`", ty) + } else { + String::new() + }; + format!("downstream crates may implement trait `{}`{}", trait_desc, self_desc) + } + &IntercrateAmbiguityCause::UpstreamCrateUpdate { ref trait_desc, ref self_desc } => { + let self_desc = if let &Some(ref ty) = self_desc { + format!(" for type `{}`", ty) + } else { + String::new() + }; + format!( + "upstream crates may add a new impl of trait `{}`{} \ + in future versions", + trait_desc, self_desc + ) + } + &IntercrateAmbiguityCause::ReservationImpl { ref message } => message.clone(), + } + } +} diff --git a/src/librustc_infer/traits/select.rs b/src/librustc_infer/traits/select.rs index b50f14475fc..5c805731f25 100644 --- a/src/librustc_infer/traits/select.rs +++ b/src/librustc_infer/traits/select.rs @@ -95,47 +95,6 @@ pub struct SelectionContext<'cx, 'tcx> { query_mode: TraitQueryMode, } -#[derive(Clone, Debug)] -pub enum IntercrateAmbiguityCause { - DownstreamCrate { trait_desc: String, self_desc: Option<String> }, - UpstreamCrateUpdate { trait_desc: String, self_desc: Option<String> }, - ReservationImpl { message: String }, -} - -impl IntercrateAmbiguityCause { - /// Emits notes when the overlap is caused by complex intercrate ambiguities. - /// See #23980 for details. - pub fn add_intercrate_ambiguity_hint(&self, err: &mut rustc_errors::DiagnosticBuilder<'_>) { - err.note(&self.intercrate_ambiguity_hint()); - } - - pub fn intercrate_ambiguity_hint(&self) -> String { - match self { - &IntercrateAmbiguityCause::DownstreamCrate { ref trait_desc, ref self_desc } => { - let self_desc = if let &Some(ref ty) = self_desc { - format!(" for type `{}`", ty) - } else { - String::new() - }; - format!("downstream crates may implement trait `{}`{}", trait_desc, self_desc) - } - &IntercrateAmbiguityCause::UpstreamCrateUpdate { ref trait_desc, ref self_desc } => { - let self_desc = if let &Some(ref ty) = self_desc { - format!(" for type `{}`", ty) - } else { - String::new() - }; - format!( - "upstream crates may add a new impl of trait `{}`{} \ - in future versions", - trait_desc, self_desc - ) - } - &IntercrateAmbiguityCause::ReservationImpl { ref message } => message.clone(), - } - } -} - // A stack that walks back up the stack frame. struct TraitObligationStack<'prev, 'tcx> { obligation: &'prev TraitObligation<'tcx>, |
