diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2024-11-18 17:56:52 +0100 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2024-11-18 17:58:57 +0100 |
| commit | 786b7477f6d40e0b79cd15dff0301a4aa53d7daf (patch) | |
| tree | ec95ffd30c4be891b82f87e50e69cc173c43da29 /src/librustdoc/html/render | |
| parent | 8ea02578cdae8a11f2c918c4d202696b95c26cc0 (diff) | |
| download | rust-786b7477f6d40e0b79cd15dff0301a4aa53d7daf.tar.gz rust-786b7477f6d40e0b79cd15dff0301a4aa53d7daf.zip | |
Fix items with generics not having their jump to def link generated
Diffstat (limited to 'src/librustdoc/html/render')
| -rw-r--r-- | src/librustdoc/html/render/span_map.rs | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/src/librustdoc/html/render/span_map.rs b/src/librustdoc/html/render/span_map.rs index fec6779965a..d4cca562d6c 100644 --- a/src/librustdoc/html/render/span_map.rs +++ b/src/librustdoc/html/render/span_map.rs @@ -45,9 +45,9 @@ pub(crate) fn collect_spans_and_sources( include_sources: bool, generate_link_to_definition: bool, ) -> (FxIndexMap<PathBuf, String>, FxHashMap<Span, LinkFromSrc>) { - let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() }; - if include_sources { + let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() }; + if generate_link_to_definition { tcx.hir().walk_toplevel_module(&mut visitor); } @@ -76,7 +76,22 @@ impl<'tcx> SpanMapVisitor<'tcx> { } else { LinkFromSrc::External(def_id) }; - self.matches.insert(path.span, link); + // In case the path ends with generics, we remove them from the span. + let span = path + .segments + .last() + .map(|last| { + // In `use` statements, the included item is not in the path segments. + // However, it doesn't matter because you can't have generics on `use` + // statements. + if path.span.contains(last.ident.span) { + path.span.with_hi(last.ident.span.hi()) + } else { + path.span + } + }) + .unwrap_or(path.span); + self.matches.insert(span, link); } Res::Local(_) => { if let Some(span) = self.tcx.hir().res_span(path.res) { |
