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 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 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, } } } diff --git a/src/test/auxiliary/inline-default-methods.rs b/src/test/auxiliary/inline-default-methods.rs new file mode 100644 index 00000000000..5f1bd7ab522 --- /dev/null +++ b/src/test/auxiliary/inline-default-methods.rs @@ -0,0 +1,14 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub trait Foo { + fn bar(&self); + fn foo(&mut self) {} +} diff --git a/src/test/rustdoc/extern-method.rs b/src/test/rustdoc/extern-method.rs index ff92adf08c1..2943bd8507b 100644 --- a/src/test/rustdoc/extern-method.rs +++ b/src/test/rustdoc/extern-method.rs @@ -16,7 +16,7 @@ extern crate rustdoc_extern_method as foo; // @has extern_method/trait.Foo.html //pre "pub trait Foo" // @has - '//*[@id="tymethod.foo"]//code' 'extern "rust-call" fn foo' -// @has - '//*[@id="tymethod.foo_"]//code' 'extern "rust-call" fn foo_' +// @has - '//*[@id="method.foo_"]//code' 'extern "rust-call" fn foo_' pub use foo::Foo; // @has extern_method/trait.Bar.html //pre "pub trait Bar" diff --git a/src/test/rustdoc/inline-default-methods.rs b/src/test/rustdoc/inline-default-methods.rs new file mode 100644 index 00000000000..5e958e333bb --- /dev/null +++ b/src/test/rustdoc/inline-default-methods.rs @@ -0,0 +1,18 @@ +// 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// aux-build:inline-default-methods.rs + +extern crate inline_default_methods; + +// @has inline_default_methods/trait.Foo.html +// @has - '//*[@class="rust trait"]' 'fn bar(&self);' +// @has - '//*[@class="rust trait"]' 'fn foo(&mut self) { ... }' +pub use inline_default_methods::Foo; diff --git a/src/test/rustdoc/issue-17476.rs b/src/test/rustdoc/issue-17476.rs index cb224d66b44..069422171bd 100644 --- a/src/test/rustdoc/issue-17476.rs +++ b/src/test/rustdoc/issue-17476.rs @@ -15,6 +15,6 @@ extern crate issue_17476; pub struct Foo; // @has issue_17476/struct.Foo.html \ -// '//*[@href="http://example.com/issue_17476/trait.Foo.html#tymethod.foo"]' \ +// '//*[@href="http://example.com/issue_17476/trait.Foo.html#method.foo"]' \ // 'foo' impl issue_17476::Foo for Foo {}