From 95f9491bc797e9e41176dbb9fecc5cb8e27d95e7 Mon Sep 17 00:00:00 2001 From: Oliver Middleton Date: Thu, 28 Dec 2017 17:49:36 +0000 Subject: [PATCH] rustdoc: Don't try to generate links for modules in import paths The modules may be private or may even be enums so it would generate dead links. --- src/librustdoc/html/format.rs | 26 ++------------------------ src/test/rustdoc/issue-46766.rs | 16 ++++++++++++++++ src/test/rustdoc/issue-46767.rs | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 src/test/rustdoc/issue-46766.rs create mode 100644 src/test/rustdoc/issue-46767.rs diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index 7300721c38406..92b3a404c57a4 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -435,32 +435,10 @@ pub fn href(did: DefId) -> Option<(String, ItemType, Vec)> { fn resolved_path(w: &mut fmt::Formatter, did: DefId, path: &clean::Path, print_all: bool, use_absolute: bool) -> fmt::Result { let last = path.segments.last().unwrap(); - let rel_root = match &*path.segments[0].name { - "self" => Some("./".to_string()), - _ => None, - }; if print_all { - let amt = path.segments.len() - 1; - match rel_root { - Some(mut root) => { - for seg in &path.segments[..amt] { - if "super" == seg.name || "self" == seg.name || w.alternate() { - write!(w, "{}::", seg.name)?; - } else { - root.push_str(&seg.name); - root.push_str("/"); - write!(w, "{}::", - root, - seg.name)?; - } - } - } - None => { - for seg in &path.segments[..amt] { - write!(w, "{}::", seg.name)?; - } - } + for seg in &path.segments[..path.segments.len() - 1] { + write!(w, "{}::", seg.name)?; } } if w.alternate() { diff --git a/src/test/rustdoc/issue-46766.rs b/src/test/rustdoc/issue-46766.rs new file mode 100644 index 0000000000000..cf2dd58f45bff --- /dev/null +++ b/src/test/rustdoc/issue-46766.rs @@ -0,0 +1,16 @@ +// Copyright 2017 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. + +#![crate_name = "foo"] + +pub enum Enum{Variant} +pub use self::Enum::Variant; + +// @!has foo/index.html '//a/@href' './Enum/index.html' diff --git a/src/test/rustdoc/issue-46767.rs b/src/test/rustdoc/issue-46767.rs new file mode 100644 index 0000000000000..855de150b0a37 --- /dev/null +++ b/src/test/rustdoc/issue-46767.rs @@ -0,0 +1,18 @@ +// Copyright 2017 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. + +#![crate_name = "foo"] + +mod private { + pub enum Enum{Variant} +} +pub use self::private::Enum::*; + +// @!has foo/index.html '//a/@href' './private/index.html'