librustdoc: lazily format some paths
This commit is contained in:
parent
5c5763a6cf
commit
ea15f6d792
2 changed files with 32 additions and 25 deletions
|
|
@ -709,19 +709,22 @@ fn resolved_path(
|
|||
if w.alternate() {
|
||||
write!(w, "{}{:#}", last.name, last.args.print(cx))?;
|
||||
} else {
|
||||
let path = if use_absolute {
|
||||
if let Ok((_, _, fqp)) = href(did, cx) {
|
||||
format!(
|
||||
"{path}::{anchor}",
|
||||
path = join_with_double_colon(&fqp[..fqp.len() - 1]),
|
||||
anchor = anchor(did, *fqp.last().unwrap(), cx)
|
||||
)
|
||||
let path = fmt::from_fn(|f| {
|
||||
if use_absolute {
|
||||
if let Ok((_, _, fqp)) = href(did, cx) {
|
||||
write!(
|
||||
f,
|
||||
"{path}::{anchor}",
|
||||
path = join_with_double_colon(&fqp[..fqp.len() - 1]),
|
||||
anchor = anchor(did, *fqp.last().unwrap(), cx)
|
||||
)
|
||||
} else {
|
||||
write!(f, "{}", last.name)
|
||||
}
|
||||
} else {
|
||||
last.name.to_string()
|
||||
write!(f, "{}", anchor(did, last.name, cx))
|
||||
}
|
||||
} else {
|
||||
anchor(did, last.name, cx).to_string()
|
||||
};
|
||||
});
|
||||
write!(w, "{path}{args}", args = last.args.print(cx))?;
|
||||
}
|
||||
Ok(())
|
||||
|
|
@ -749,16 +752,20 @@ fn primitive_link_fragment(
|
|||
match m.primitive_locations.get(&prim) {
|
||||
Some(&def_id) if def_id.is_local() => {
|
||||
let len = cx.current.len();
|
||||
let path = if len == 0 {
|
||||
let cname_sym = ExternalCrate { crate_num: def_id.krate }.name(cx.tcx());
|
||||
format!("{cname_sym}/")
|
||||
} else {
|
||||
"../".repeat(len - 1)
|
||||
};
|
||||
let path = fmt::from_fn(|f| {
|
||||
if len == 0 {
|
||||
let cname_sym = ExternalCrate { crate_num: def_id.krate }.name(cx.tcx());
|
||||
write!(f, "{cname_sym}/")?;
|
||||
} else {
|
||||
for _ in 0..(len - 1) {
|
||||
f.write_str("../")?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
});
|
||||
write!(
|
||||
f,
|
||||
"<a class=\"primitive\" href=\"{}primitive.{}.html{fragment}\">",
|
||||
path,
|
||||
"<a class=\"primitive\" href=\"{path}primitive.{}.html{fragment}\">",
|
||||
prim.as_sym()
|
||||
)?;
|
||||
needs_termination = true;
|
||||
|
|
|
|||
|
|
@ -266,12 +266,12 @@ impl<'tcx> Context<'tcx> {
|
|||
// preventing an infinite redirection loop in the generated
|
||||
// documentation.
|
||||
|
||||
let mut path = String::new();
|
||||
for name in &names[..names.len() - 1] {
|
||||
path.push_str(name.as_str());
|
||||
path.push('/');
|
||||
}
|
||||
let _ = write!(path, "{}", item_path(ty, names.last().unwrap().as_str()));
|
||||
let path = fmt::from_fn(|f| {
|
||||
for name in &names[..names.len() - 1] {
|
||||
write!(f, "{name}/")?;
|
||||
}
|
||||
write!(f, "{}", item_path(ty, names.last().unwrap().as_str()))
|
||||
});
|
||||
match self.shared.redirections {
|
||||
Some(ref redirections) => {
|
||||
let mut current_path = String::new();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue