Fix items with generics not having their jump to def link generated
This commit is contained in:
parent
8ea02578cd
commit
786b7477f6
1 changed files with 18 additions and 3 deletions
|
@ -45,9 +45,9 @@ pub(crate) fn collect_spans_and_sources(
|
||||||
include_sources: bool,
|
include_sources: bool,
|
||||||
generate_link_to_definition: bool,
|
generate_link_to_definition: bool,
|
||||||
) -> (FxIndexMap<PathBuf, String>, FxHashMap<Span, LinkFromSrc>) {
|
) -> (FxIndexMap<PathBuf, String>, FxHashMap<Span, LinkFromSrc>) {
|
||||||
let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() };
|
|
||||||
|
|
||||||
if include_sources {
|
if include_sources {
|
||||||
|
let mut visitor = SpanMapVisitor { tcx, matches: FxHashMap::default() };
|
||||||
|
|
||||||
if generate_link_to_definition {
|
if generate_link_to_definition {
|
||||||
tcx.hir().walk_toplevel_module(&mut visitor);
|
tcx.hir().walk_toplevel_module(&mut visitor);
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,22 @@ impl<'tcx> SpanMapVisitor<'tcx> {
|
||||||
} else {
|
} else {
|
||||||
LinkFromSrc::External(def_id)
|
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(_) => {
|
Res::Local(_) => {
|
||||||
if let Some(span) = self.tcx.hir().res_span(path.res) {
|
if let Some(span) = self.tcx.hir().res_span(path.res) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue