diff options
| author | mitaa <mitaa.ceb@gmail.com> | 2016-02-23 09:52:44 +0100 |
|---|---|---|
| committer | mitaa <mitaa.ceb@gmail.com> | 2016-02-23 21:47:13 +0100 |
| commit | b38a856e3851cd9557a5d79f524cc2e69c5664fc (patch) | |
| tree | 542159f72f86866119bdb6d193b298b7eb76ec36 | |
| parent | be7196a793a185355efb7ec8801102ddec95483d (diff) | |
| download | rust-b38a856e3851cd9557a5d79f524cc2e69c5664fc.tar.gz rust-b38a856e3851cd9557a5d79f524cc2e69c5664fc.zip | |
Don't show associated consts from trait impls
| -rw-r--r-- | src/librustdoc/html/render.rs | 10 | ||||
| -rw-r--r-- | src/test/rustdoc/issue-31808.rs | 23 |
2 files changed, 33 insertions, 0 deletions
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 692d230446c..a30c087bd8b 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -243,6 +243,7 @@ pub struct Cache { stack: Vec<String>, parent_stack: Vec<DefId>, + parent_is_trait_impl: bool, search_index: Vec<IndexItem>, privmod: bool, remove_priv: bool, @@ -487,6 +488,7 @@ pub fn run(mut krate: clean::Crate, stack: Vec::new(), parent_stack: Vec::new(), search_index: Vec::new(), + parent_is_trait_impl: false, extern_locations: HashMap::new(), primitive_locations: HashMap::new(), remove_priv: cx.passes.contains("strip-private"), @@ -995,6 +997,10 @@ impl DocFolder for Cache { // Index this method for searching later on if let Some(ref s) = item.name { let (parent, is_method) = match item.inner { + clean::AssociatedConstItem(..) if self.parent_is_trait_impl => { + // skip associated consts in trait impls + ((None, None), false) + } clean::AssociatedTypeItem(..) | clean::AssociatedConstItem(..) | clean::TyMethodItem(..) | @@ -1115,12 +1121,15 @@ impl DocFolder for Cache { } // Maintain the parent stack + let orig_parent_is_trait_impl = self.parent_is_trait_impl; let parent_pushed = match item.inner { clean::TraitItem(..) | clean::EnumItem(..) | clean::StructItem(..) => { self.parent_stack.push(item.def_id); + self.parent_is_trait_impl = false; true } clean::ImplItem(ref i) => { + self.parent_is_trait_impl = i.trait_.is_some(); match i.for_ { clean::ResolvedPath{ did, .. } => { self.parent_stack.push(did); @@ -1201,6 +1210,7 @@ impl DocFolder for Cache { if pushed { self.stack.pop().unwrap(); } if parent_pushed { self.parent_stack.pop().unwrap(); } self.privmod = orig_privmod; + self.parent_is_trait_impl = orig_parent_is_trait_impl; return ret; } } diff --git a/src/test/rustdoc/issue-31808.rs b/src/test/rustdoc/issue-31808.rs new file mode 100644 index 00000000000..46be8229d7c --- /dev/null +++ b/src/test/rustdoc/issue-31808.rs @@ -0,0 +1,23 @@ +// Copyright 2016 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. + +#![feature(associated_consts, associated_types)] + +// Test that associated item impls on primitive types don't crash rustdoc + +pub trait Foo { + const BAR: usize; + type BAZ; +} + +impl Foo for () { + const BAR: usize = 0; + type BAZ = usize; +} |
