diff options
| author | Oliver Middleton <olliemail27@gmail.com> | 2016-06-18 18:41:13 +0100 |
|---|---|---|
| committer | Oliver Middleton <olliemail27@gmail.com> | 2016-06-20 22:22:17 +0100 |
| commit | ebfdd110c3ae32e91627f1d75bf089560bf98c9b (patch) | |
| tree | 6d2bb6b79aaf87a44671609c393bef11ac1f7ece /src/librustdoc | |
| parent | 3313e50594aeb8e81dbe7bac27addcf41be40f9c (diff) | |
rustdoc: Fix a couple of issues with src links to external crates
- src links/redirects to extern fn from another crate had an extra '/'. - src links to `pub use` of a crate module had an extra '/'. - src links to renamed reexports from another crate used the new name for the link but should use the original name.
Diffstat (limited to 'src/librustdoc')
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 10 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 15 |
2 files changed, 17 insertions, 8 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index e49b96cbfd0..8ffbd6be418 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -143,8 +143,14 @@ pub fn load_attrs<'a, 'tcx>(cx: &DocContext, tcx: TyCtxt<'a, 'tcx, 'tcx>, pub fn record_extern_fqn(cx: &DocContext, did: DefId, kind: clean::TypeKind) { if let Some(tcx) = cx.tcx_opt() { let crate_name = tcx.sess.cstore.crate_name(did.krate).to_string(); - let relative = tcx.def_path(did).data.into_iter().map(|elem| { - elem.data.to_string() + let relative = tcx.def_path(did).data.into_iter().filter_map(|elem| { + // extern blocks have an empty name + let s = elem.data.to_string(); + if !s.is_empty() { + Some(s) + } else { + None + } }); let fqn = once(crate_name).chain(relative).collect(); cx.renderinfo.borrow_mut().external_paths.insert(did, (fqn, kind)); diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 493d3d6abc9..0d390a87d20 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -1519,20 +1519,23 @@ impl<'a> Item<'a> { // located, then we return `None`. } else { let cache = cache(); - let path = match cache.external_paths.get(&self.item.def_id) { + let external_path = match cache.external_paths.get(&self.item.def_id) { Some(path) => path, None => return None, }; - let root = match cache.extern_locations.get(&self.item.def_id.krate) { + let mut path = match cache.extern_locations.get(&self.item.def_id.krate) { Some(&(_, Remote(ref s))) => s.to_string(), Some(&(_, Local)) => self.cx.root_path.clone(), Some(&(_, Unknown)) => return None, None => return None, }; - Some(format!("{root}{path}/{file}?gotosrc={goto}", - root = root, - path = path[..path.len() - 1].join("/"), - file = item_path(shortty(self.item), self.item.name.as_ref().unwrap()), + for item in &external_path[..external_path.len() - 1] { + path.push_str(item); + path.push_str("/"); + } + Some(format!("{path}{file}?gotosrc={goto}", + path = path, + file = item_path(shortty(self.item), external_path.last().unwrap()), goto = self.item.def_id.index.as_usize())) } } |
