From 0cb6a1fad3f5ee54f05028c7f2fdd7844c8d16a8 Mon Sep 17 00:00:00 2001 From: Oliver Middleton Date: Mon, 22 May 2017 02:05:16 +0100 Subject: [PATCH] rustdoc: Fix names of items in cross crate reexported modules For renamed reexports the new name should be used. --- src/librustdoc/clean/inline.rs | 28 ++++----------- src/librustdoc/clean/mod.rs | 2 +- .../auxiliary/renamed-via-module.rs | 19 +++++++++++ .../inline_cross/renamed-via-module.rs | 34 +++++++++++++++++++ 4 files changed, 60 insertions(+), 23 deletions(-) create mode 100644 src/test/rustdoc/inline_cross/auxiliary/renamed-via-module.rs create mode 100644 src/test/rustdoc/inline_cross/renamed-via-module.rs diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 9dea0e3d83088..141efe471af5f 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -41,26 +41,11 @@ use super::Clean; /// /// The returned value is `None` if the definition could not be inlined, /// and `Some` of a vector of items if it was successfully expanded. -pub fn try_inline(cx: &DocContext, def: Def, into: Option) +pub fn try_inline(cx: &DocContext, def: Def, name: ast::Name) -> Option> { if def == Def::Err { return None } let did = def.def_id(); if did.is_local() { return None } - try_inline_def(cx, def).map(|vec| { - vec.into_iter().map(|mut item| { - match into { - Some(into) if item.name.is_some() => { - item.name = Some(into.clean(cx)); - } - _ => {} - } - item - }).collect() - }) -} - -fn try_inline_def(cx: &DocContext, def: Def) -> Option> { - let tcx = cx.tcx; let mut ret = Vec::new(); let inner = match def { Def::Trait(did) => { @@ -112,16 +97,15 @@ fn try_inline_def(cx: &DocContext, def: Def) -> Option> { } _ => return None, }; - let did = def.def_id(); cx.renderinfo.borrow_mut().inlined.insert(did); ret.push(clean::Item { - source: tcx.def_span(did).clean(cx), - name: Some(tcx.item_name(did).to_string()), + source: cx.tcx.def_span(did).clean(cx), + name: Some(name.clean(cx)), attrs: load_attrs(cx, did), inner: inner, visibility: Some(clean::Public), - stability: tcx.lookup_stability(did).clean(cx), - deprecation: tcx.lookup_deprecation(did).clean(cx), + stability: cx.tcx.lookup_stability(did).clean(cx), + deprecation: cx.tcx.lookup_deprecation(did).clean(cx), def_id: did, }); Some(ret) @@ -463,7 +447,7 @@ fn build_module(cx: &DocContext, did: DefId) -> clean::Module { let def_id = item.def.def_id(); if cx.tcx.sess.cstore.visibility(def_id) == ty::Visibility::Public { if !visited.insert(def_id) { continue } - if let Some(i) = try_inline_def(cx, item.def) { + if let Some(i) = try_inline(cx, item.def, item.name) { items.extend(i) } } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 61f941e57b2d8..48d387f812d25 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2618,7 +2618,7 @@ impl Clean> for doctree::Import { } else { let name = self.name; if !denied { - if let Some(items) = inline::try_inline(cx, path.def, Some(name)) { + if let Some(items) = inline::try_inline(cx, path.def, name) { return items; } } diff --git a/src/test/rustdoc/inline_cross/auxiliary/renamed-via-module.rs b/src/test/rustdoc/inline_cross/auxiliary/renamed-via-module.rs new file mode 100644 index 0000000000000..9f7a259a7db03 --- /dev/null +++ b/src/test/rustdoc/inline_cross/auxiliary/renamed-via-module.rs @@ -0,0 +1,19 @@ +// 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 mod iter { + mod range { + pub struct StepBy; + } + pub use self::range::StepBy as DeprecatedStepBy; + pub struct StepBy; +} diff --git a/src/test/rustdoc/inline_cross/renamed-via-module.rs b/src/test/rustdoc/inline_cross/renamed-via-module.rs new file mode 100644 index 0000000000000..a4e0154376142 --- /dev/null +++ b/src/test/rustdoc/inline_cross/renamed-via-module.rs @@ -0,0 +1,34 @@ +// 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. + +// aux-build:renamed-via-module.rs +// build-aux-docs +// ignore-cross-compile + +#![crate_name = "bar"] + +extern crate foo; + +// @has foo/iter/index.html +// @has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy" +// @has - '//a/[@href="struct.StepBy.html"]' "StepBy" +// @has foo/iter/struct.DeprecatedStepBy.html +// @has - '//h1' "Struct foo::iter::DeprecatedStepBy" +// @has foo/iter/struct.StepBy.html +// @has - '//h1' "Struct foo::iter::StepBy" + +// @has bar/iter/index.html +// @has - '//a/[@href="struct.DeprecatedStepBy.html"]' "DeprecatedStepBy" +// @has - '//a/[@href="struct.StepBy.html"]' "StepBy" +// @has bar/iter/struct.DeprecatedStepBy.html +// @has - '//h1' "Struct bar::iter::DeprecatedStepBy" +// @has bar/iter/struct.StepBy.html +// @has - '//h1' "Struct bar::iter::StepBy" +pub use foo::iter;