diff --git a/src/librustdoc/clean/auto_trait.rs b/src/librustdoc/clean/auto_trait.rs index 3cac4c148b5c..ca52aa194aeb 100644 --- a/src/librustdoc/clean/auto_trait.rs +++ b/src/librustdoc/clean/auto_trait.rs @@ -76,17 +76,17 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { new_generics }); - let negative_polarity; + let polarity; let new_generics = match result { AutoTraitResult::PositiveImpl(new_generics) => { - negative_polarity = false; + polarity = ImplPolarity::Positive; if discard_positive_impl { return None; } new_generics } AutoTraitResult::NegativeImpl => { - negative_polarity = true; + polarity = ImplPolarity::Negative; // For negative impls, we use the generic params, but *not* the predicates, // from the original type. Otherwise, the displayed impl appears to be a @@ -120,7 +120,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { trait_: Some(trait_ref.clean(self.cx)), for_: ty.clean(self.cx), items: Vec::new(), - negative_polarity, + polarity, kind: ImplKind::Auto, }), cfg: None, diff --git a/src/librustdoc/clean/blanket_impl.rs b/src/librustdoc/clean/blanket_impl.rs index 9b80fe0736dd..bb76d39d3f28 100644 --- a/src/librustdoc/clean/blanket_impl.rs +++ b/src/librustdoc/clean/blanket_impl.rs @@ -123,7 +123,7 @@ impl<'a, 'tcx> BlanketImplFinder<'a, 'tcx> { .in_definition_order() .collect::>() .clean(self.cx), - negative_polarity: false, + polarity: ImplPolarity::Positive, kind: ImplKind::Blanket(box trait_ref.self_ty().clean(self.cx)), }), cfg: None, diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index fccb53183ed1..fc04f90329b1 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -497,7 +497,7 @@ crate fn build_impl( trait_, for_, items: trait_items, - negative_polarity: polarity.clean(cx), + polarity: polarity.clean(cx), kind: ImplKind::Normal, }), box merged_attrs, diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 862dfa5e3245..d733f9b44bc2 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1856,14 +1856,14 @@ impl Clean for hir::Variant<'_> { } } -impl Clean for ty::ImplPolarity { +impl Clean for ty::ImplPolarity { /// Returns whether the impl has negative polarity. - fn clean(&self, _: &mut DocContext<'_>) -> bool { + fn clean(&self, _: &mut DocContext<'_>) -> ImplPolarity { match self { - &ty::ImplPolarity::Positive | + ty::ImplPolarity::Positive | // FIXME: do we want to do something else here? - &ty::ImplPolarity::Reservation => false, - &ty::ImplPolarity::Negative => true, + ty::ImplPolarity::Reservation => ImplPolarity::Positive, + ty::ImplPolarity::Negative => ImplPolarity::Negative, } } } @@ -1894,7 +1894,7 @@ fn clean_impl(impl_: &hir::Impl<'_>, hir_id: hir::HirId, cx: &mut DocContext<'_> trait_, for_, items, - negative_polarity: tcx.impl_polarity(def_id).clean(cx), + polarity: tcx.impl_polarity(def_id).clean(cx), kind: ImplKind::Normal, }); Item::from_hir_id_and_parts(hir_id, None, kind, cx) diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 47895616abcd..fbc04845f129 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -2177,7 +2177,7 @@ crate struct Impl { crate trait_: Option, crate for_: Type, crate items: Vec, - crate negative_polarity: bool, + crate polarity: ImplPolarity, crate kind: ImplKind, } @@ -2227,6 +2227,13 @@ impl ImplKind { } } +// FIXME: remove this and use ty::ImplPolarity instead +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +crate enum ImplPolarity { + Positive, + Negative, +} + #[derive(Clone, Debug)] crate struct Import { crate kind: ImportKind, diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 5a4ff8dc837a..426ff8022817 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -990,8 +990,9 @@ impl clean::Impl { } if let Some(ref ty) = self.trait_ { - if self.negative_polarity { - write!(f, "!")?; + match self.polarity { + clean::ImplPolarity::Positive => {} + clean::ImplPolarity::Negative => write!(f, "!")?, } fmt::Display::fmt(&ty.print(cx), f)?; write!(f, " for ")?; diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 91bd1107d874..0d39e1de6c39 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -2033,12 +2033,12 @@ fn sidebar_assoc_items(cx: &Context<'_>, out: &mut Buffer, it: &clean::Item) { let i_display = format!("{:#}", i.print(cx)); let out = Escape(&i_display); let encoded = small_url_encode(format!("{:#}", i.print(cx))); - let generated = format!( - "{}{}", - encoded, - if it.inner_impl().negative_polarity { "!" } else { "" }, - out - ); + let prefix = match it.inner_impl().polarity { + clean::ImplPolarity::Positive => "", + clean::ImplPolarity::Negative => "!", + }; + let generated = + format!("{}{}", encoded, prefix, out); if links.insert(generated.clone()) { Some(generated) } else { None } } else { None diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index 94069b99c7d3..8dc7a33cb138 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -500,8 +500,7 @@ impl FromWithTcx for Trait { impl FromWithTcx for Impl { fn from_tcx(impl_: clean::Impl, tcx: TyCtxt<'_>) -> Self { let provided_trait_methods = impl_.provided_trait_methods(tcx); - let clean::Impl { unsafety, generics, trait_, for_, items, negative_polarity, kind } = - impl_; + let clean::Impl { unsafety, generics, trait_, for_, items, polarity, kind } = impl_; // FIXME: should `trait_` be a clean::Path equivalent in JSON? let trait_ = trait_.map(|path| { let did = path.def_id(); @@ -513,6 +512,10 @@ impl FromWithTcx for Impl { clean::ImplKind::Auto => (true, None), clean::ImplKind::Blanket(ty) => (false, Some(*ty)), }; + let negative_polarity = match polarity { + clean::ImplPolarity::Positive => false, + clean::ImplPolarity::Negative => true, + }; Impl { is_unsafe: unsafety == rustc_hir::Unsafety::Unsafe, generics: generics.into_tcx(tcx),