diff options
| author | bors <bors@rust-lang.org> | 2022-09-16 12:43:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-09-16 12:43:22 +0000 |
| commit | 54f20bbb8a7aeab93da17c0019c1aaa10329245a (patch) | |
| tree | 69d1183ee00d8749fff9052462eecae022f222ff /src/librustdoc/html/render | |
| parent | 2d1aa57d1e05d1d745aaf864965eebd1fd8d6071 (diff) | |
| parent | e284393c9e1f48431b67d95a49ae29a98489c317 (diff) | |
Auto merge of #101895 - GuillaumeGomez:rollup-ured85q, r=GuillaumeGomez
Rollup of 7 pull requests
Successful merges:
- #101494 (rustdoc mobile: move notable traits to return type)
- #101813 (Extend CSS check to CSS variables)
- #101825 (Fix back RPIT changes)
- #101843 (Suggest associated const for incorrect use of let in traits)
- #101859 (Slight vertical formatting)
- #101868 (rustdoc: use more precise URLs for jump-to-definition links)
- #101877 (rustdoc: remove no-op CSS `.block { padding: 0 }`)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
Diffstat (limited to 'src/librustdoc/html/render')
| -rw-r--r-- | src/librustdoc/html/render/context.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/librustdoc/html/render/context.rs b/src/librustdoc/html/render/context.rs index 01b96dc7215..62def4a94e8 100644 --- a/src/librustdoc/html/render/context.rs +++ b/src/librustdoc/html/render/context.rs @@ -31,6 +31,7 @@ use crate::formats::FormatRenderer; use crate::html::escape::Escape; use crate::html::format::{join_with_double_colon, Buffer}; use crate::html::markdown::{self, plain_text_summary, ErrorCodes, IdMap}; +use crate::html::url_parts_builder::UrlPartsBuilder; use crate::html::{layout, sources}; use crate::scrape_examples::AllCallLocations; use crate::try_err; @@ -370,6 +371,35 @@ impl<'tcx> Context<'tcx> { anchor = anchor )) } + + pub(crate) fn href_from_span_relative( + &self, + span: clean::Span, + relative_to: &str, + ) -> Option<String> { + self.href_from_span(span, false).map(|s| { + let mut url = UrlPartsBuilder::new(); + let mut dest_href_parts = s.split('/'); + let mut cur_href_parts = relative_to.split('/'); + for (cur_href_part, dest_href_part) in (&mut cur_href_parts).zip(&mut dest_href_parts) { + if cur_href_part != dest_href_part { + url.push(dest_href_part); + break; + } + } + for dest_href_part in dest_href_parts { + url.push(dest_href_part); + } + let loline = span.lo(self.sess()).line; + let hiline = span.hi(self.sess()).line; + format!( + "{}{}#{}", + "../".repeat(cur_href_parts.count()), + url.finish(), + if loline == hiline { loline.to_string() } else { format!("{loline}-{hiline}") } + ) + }) + } } /// Generates the documentation for `crate` into the directory `dst` |
