From: Oliver Middleton Date: Mon, 22 May 2017 01:05:16 +0000 (+0100) Subject: rustdoc: Fix names of items in cross crate reexported modules X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=0cb6a1fad3f5ee54f05028c7f2fdd7844c8d16a8;p=rust.git rustdoc: Fix names of items in cross crate reexported modules For renamed reexports the new name should be used. --- diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 9dea0e3d830..141efe471af 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -41,26 +41,11 @@ /// /// 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 fill_in(cx: &DocContext, did: DefId, items: &mut Vec) { 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 61f941e57b2..48d387f812d 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2618,7 +2618,7 @@ fn clean(&self, cx: &DocContext) -> Vec { } 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 00000000000..9f7a259a7db --- /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 00000000000..a4e01543761 --- /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;