diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-04-07 11:50:14 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-04-07 17:54:34 -0700 |
| commit | d7fcee8347dd9dc7e51bff55291f928d0cb0b2e7 (patch) | |
| tree | 5a3eb57841bdf923f62dc805dd637a8fe0947d5e /src/librustdoc | |
| parent | 947f1b66cb1d061bf91410abd5d9ccd9d9b38f7b (diff) | |
| download | rust-d7fcee8347dd9dc7e51bff55291f928d0cb0b2e7.tar.gz rust-d7fcee8347dd9dc7e51bff55291f928d0cb0b2e7.zip | |
rustdoc: Detect provided methods on inlined traits
Closes #23864
Diffstat (limited to 'src/librustdoc')
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 65778114fe0..6dd07695b33 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1296,6 +1296,35 @@ impl<'tcx> Clean<Item> for ty::Method<'tcx> { } }; + let generics = (&self.generics, &self.predicates, + subst::FnSpace).clean(cx); + let decl = (self.def_id, &sig).clean(cx); + let provided = match self.container { + ty::ImplContainer(..) => false, + ty::TraitContainer(did) => { + ty::provided_trait_methods(cx.tcx(), did).iter().any(|m| { + m.def_id == self.def_id + }) + } + }; + let inner = if provided { + MethodItem(Method { + unsafety: self.fty.unsafety, + generics: generics, + self_: self_, + decl: decl, + abi: self.fty.abi + }) + } else { + TyMethodItem(TyMethod { + unsafety: self.fty.unsafety, + generics: generics, + self_: self_, + decl: decl, + abi: self.fty.abi + }) + }; + Item { name: Some(self.name.clean(cx)), visibility: Some(ast::Inherited), @@ -1303,13 +1332,7 @@ impl<'tcx> Clean<Item> for ty::Method<'tcx> { def_id: self.def_id, attrs: inline::load_attrs(cx, cx.tcx(), self.def_id), source: Span::empty(), - inner: TyMethodItem(TyMethod { - unsafety: self.fty.unsafety, - generics: (&self.generics, &self.predicates, subst::FnSpace).clean(cx), - self_: self_, - decl: (self.def_id, &sig).clean(cx), - abi: self.fty.abi - }) + inner: inner, } } } |
