(rustdoc) [src] link for types defined by macros shows invocation

Previously the [src] link on types defined by a macro
pointed to the macro definition.
This commit makes the Clean-Implementation for Spans
aware of macro defined types,
so that the link points to the invocation instead.
This commit is contained in:
Florian Warzecha 2020-11-09 19:58:19 +01:00
parent 25f6938da4
commit 7beb0da4a9
No known key found for this signature in database
GPG Key ID: 4BE8C7D97F910C60
4 changed files with 13 additions and 11 deletions

View File

@ -1967,10 +1967,15 @@ impl Clean<Span> for rustc_span::Span {
return Span::empty();
}
// Get the macro invocation instead of the definition,
// in case the span is result of a macro expansion.
// (See rust-lang/rust#39726)
let span = self.source_callsite();
let sm = cx.sess().source_map();
let filename = sm.span_to_filename(*self);
let lo = sm.lookup_char_pos(self.lo());
let hi = sm.lookup_char_pos(self.hi());
let filename = sm.span_to_filename(span);
let lo = sm.lookup_char_pos(span.lo());
let hi = sm.lookup_char_pos(span.hi());
Span {
filename,
cnum: lo.file.cnum,
@ -1978,7 +1983,7 @@ impl Clean<Span> for rustc_span::Span {
locol: lo.col.to_usize(),
hiline: hi.line,
hicol: hi.col.to_usize(),
original: *self,
original: span,
}
}
}

View File

@ -1,15 +1,12 @@
// aux-build:external-macro-src.rs
// ignore-tidy-linelength
#![crate_name = "foo"]
#[macro_use]
extern crate external_macro_src;
// @has foo/index.html '//a[@href="../src/foo/external-macro-src.rs.html#4-15"]' '[src]'
// @has foo/index.html '//a[@href="../src/foo/external-macro-src.rs.html#3-12"]' '[src]'
// @has foo/struct.Foo.html
// @has - '//a[@href="https://example.com/src/external_macro_src/external-macro-src.rs.html#8"]' '[src]'
// @has - '//a[@href="https://example.com/src/external_macro_src/external-macro-src.rs.html#9-13"]' '[src]'
// @has - '//a[@href="https://example.com/src/external_macro_src/external-macro-src.rs.html#10-12"]' '[src]'
// @has - '//a[@href="../src/foo/external-macro-src.rs.html#12"]' '[src]'
make_foo!();

View File

@ -7,5 +7,5 @@
extern crate issue_26606_macro;
// @has issue_26606/constant.FOO.html
// @has - '//a/@href' '../src/issue_26606_macro/issue-26606-macro.rs.html#3'
// @has - '//a[@href="../src/issue_26606/issue-26606.rs.html#11"]' '[src]'
make_item!(FOO);

View File

@ -2,5 +2,5 @@
// @has foo/index.html '//a[@href="../src/foo/thread-local-src.rs.html#1-6"]' '[src]'
// @has foo/constant.FOO.html '//a/@href' 'https://doc.rust-lang.org/nightly/src/std/'
// @has foo/constant.FOO.html '//a[@href="../src/foo/thread-local-src.rs.html#6"]' '[src]'
thread_local!(pub static FOO: bool = false);