Skip to content

Commit 6603c95

Browse files
committedApr 24, 2016
Check reachability for inlined extern links too
An item is inlined and recorded as inlined even if it is `doc(hidden)`, leading to unchecked external links.
1 parent dca7f01 commit 6603c95

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed
 

‎src/librustdoc/html/format.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -291,17 +291,19 @@ impl fmt::Display for clean::Path {
291291

292292
pub fn href(did: DefId) -> Option<(String, ItemType, Vec<String>)> {
293293
let cache = cache();
294+
if !did.is_local() && !cache.access_levels.is_doc_reachable(did) {
295+
return None
296+
}
297+
294298
let loc = CURRENT_LOCATION_KEY.with(|l| l.borrow().clone());
295299
let &(ref fqp, shortty) = match cache.paths.get(&did) {
296300
Some(p) => p,
297301
None => return None,
298302
};
303+
299304
let mut url = if did.is_local() || cache.inlined.contains(&did) {
300305
repeat("../").take(loc.len()).collect::<String>()
301306
} else {
302-
if !cache.access_levels.is_doc_reachable(did) {
303-
return None
304-
}
305307
match cache.extern_locations[&did.krate] {
306308
(_, render::Remote(ref s)) => s.to_string(),
307309
(_, render::Local) => repeat("../").take(loc.len()).collect(),

‎src/test/auxiliary/rustdoc-hidden.rs

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#[doc(hidden)]
12+
pub struct Foo;
13+
14+
pub struct Bar;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// aux-build:rustdoc-hidden.rs
12+
// build-aux-docs
13+
// ignore-cross-compile
14+
15+
extern crate rustdoc_hidden;
16+
17+
#[doc(no_inline)]
18+
pub use rustdoc_hidden::Foo;
19+
20+
// @has inline_hidden/fn.foo.html
21+
// @!has - '//a/@title' 'Foo'
22+
pub fn foo(_: Foo) {}

0 commit comments

Comments
 (0)
Please sign in to comment.