diff options
| author | bors <bors@rust-lang.org> | 2014-09-25 07:12:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-09-25 07:12:37 +0000 |
| commit | d299bafb31a7c0528e690e48ec6d5591f1eb0bac (patch) | |
| tree | 0ae9520811c5f80e122d45896ad8a2fe2672a058 /src | |
| parent | 9ff308137afcacb4bc0d47e00d1dbb730229d932 (diff) | |
| parent | 3d8ca595a158dbf4ffbaece479e75b9c811ce815 (diff) | |
| download | rust-d299bafb31a7c0528e690e48ec6d5591f1eb0bac.tar.gz rust-d299bafb31a7c0528e690e48ec6d5591f1eb0bac.zip | |
auto merge of #17492 : alexcrichton/rust/issue-16274, r=aturon
Details in the commits.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustdoc/visit_ast.rs | 14 | ||||
| -rw-r--r-- | src/test/run-make/rustdoc-recursion/Makefile | 12 | ||||
| -rw-r--r-- | src/test/run-make/rustdoc-recursion/foo.rs | 25 | ||||
| -rw-r--r-- | src/test/run-make/rustdoc-recursion/foo2.rs | 24 | ||||
| -rw-r--r-- | src/test/run-make/rustdoc-recursion/foo3.rs | 25 |
5 files changed, 98 insertions, 2 deletions
diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index a9e0c9cb260..d4a1a357909 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -11,6 +11,8 @@ //! Rust AST Visitor. Extracts useful information and massages it into a form //! usable for clean +use std::collections::HashSet; + use syntax::abi; use syntax::ast; use syntax::ast_util; @@ -38,16 +40,21 @@ pub struct RustdocVisitor<'a, 'tcx: 'a> { pub attrs: Vec<ast::Attribute>, pub cx: &'a core::DocContext<'tcx>, pub analysis: Option<&'a core::CrateAnalysis>, + view_item_stack: HashSet<ast::NodeId>, } impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { pub fn new(cx: &'a core::DocContext<'tcx>, analysis: Option<&'a core::CrateAnalysis>) -> RustdocVisitor<'a, 'tcx> { + // If the root is reexported, terminate all recursion. + let mut stack = HashSet::new(); + stack.insert(ast::CRATE_NODE_ID); RustdocVisitor { module: Module::new(None), attrs: Vec::new(), cx: cx, analysis: analysis, + view_item_stack: stack, } } @@ -228,8 +235,9 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { if !please_inline && analysis.public_items.contains(&def.node) { return false } + if !self.view_item_stack.insert(def.node) { return false } - match tcx.map.get(def.node) { + let ret = match tcx.map.get(def.node) { ast_map::NodeItem(it) => { if glob { match it.node { @@ -249,7 +257,9 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { true } _ => false, - } + }; + self.view_item_stack.remove(&id); + return ret; } pub fn visit_item(&mut self, item: &ast::Item, diff --git a/src/test/run-make/rustdoc-recursion/Makefile b/src/test/run-make/rustdoc-recursion/Makefile new file mode 100644 index 00000000000..b7fc6d6c0ad --- /dev/null +++ b/src/test/run-make/rustdoc-recursion/Makefile @@ -0,0 +1,12 @@ +-include ../tools.mk + +# FIXME ignore windows +ifndef IS_WINDOWS +all: + $(HOST_RPATH_ENV) $(RUSTDOC) -w html -o $(TMPDIR)/doc foo.rs + $(HOST_RPATH_ENV) $(RUSTDOC) -w html -o $(TMPDIR)/doc foo2.rs + $(HOST_RPATH_ENV) $(RUSTDOC) -w html -o $(TMPDIR)/doc foo3.rs +else +all: +endif + diff --git a/src/test/run-make/rustdoc-recursion/foo.rs b/src/test/run-make/rustdoc-recursion/foo.rs new file mode 100644 index 00000000000..29a909f139e --- /dev/null +++ b/src/test/run-make/rustdoc-recursion/foo.rs @@ -0,0 +1,25 @@ +// Copyright 2014 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. + +#![crate_type = "lib"] +#![feature(globs)] + +mod m { + pub use self::a::Foo; + + mod a { + pub struct Foo; + } + + mod b { + pub use super::*; + } +} + diff --git a/src/test/run-make/rustdoc-recursion/foo2.rs b/src/test/run-make/rustdoc-recursion/foo2.rs new file mode 100644 index 00000000000..7505d20566d --- /dev/null +++ b/src/test/run-make/rustdoc-recursion/foo2.rs @@ -0,0 +1,24 @@ +// Copyright 2014 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. + +#![crate_type = "lib"] +#![feature(globs)] + +mod m { + pub use self::a::Foo; + + mod a { + pub struct Foo; + } + + mod b { + pub use super::*; + } +} diff --git a/src/test/run-make/rustdoc-recursion/foo3.rs b/src/test/run-make/rustdoc-recursion/foo3.rs new file mode 100644 index 00000000000..62a13f76ca4 --- /dev/null +++ b/src/test/run-make/rustdoc-recursion/foo3.rs @@ -0,0 +1,25 @@ +// Copyright 2014 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(globs)] + +pub mod longhands { + pub use super::*; + + pub use super::common_types::computed::compute_CSSColor as to_computed_value; + + pub fn computed_as_specified() {} +} + +pub mod common_types { + pub mod computed { + pub use super::super::longhands::computed_as_specified as compute_CSSColor; + } +} |
