Rollup merge of #98105 - notriddle:notriddle/tuple-links, r=jsha
rustdoc: remove tuple link on round braces This is #98069 but for tuples. The reasoning is the same: * This PR also changes it so that tuples with all-generic elements still link to the primitive.tuple.html page, just like slices. So there still plenty of on-ramps for anybody who doesn't know about it. * It's too hard to see when round braces are a separate link from the type inside of them. * It's too hard to click even if you do notice them. Before: * impl [ToSocketAddrs](https://doc.rust-lang.org/nightly/std/net/trait.ToSocketAddrs.html) for [(](https://doc.rust-lang.org/nightly/std/primitive.tuple.html)[IpAddr](https://doc.rust-lang.org/nightly/std/net/enum.IpAddr.html), [u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html)[)](https://doc.rust-lang.org/nightly/std/primitive.tuple.html) * impl<K, V> [FromIterator](https://notriddle.com/notriddle-rustdoc-test/std/iter/trait.FromIterator.html)<[(](https://notriddle.com/notriddle-rustdoc-test/std/primitive.tuple.html)K, V[)](https://notriddle.com/notriddle-rustdoc-test/std/primitive.tuple.html)> for [BTreeMap](https://notriddle.com/notriddle-rustdoc-test/std/collections/struct.BTreeMap.html)<K, V> After: * impl [ToSocketAddrs](https://doc.rust-lang.org/nightly/std/net/trait.ToSocketAddrs.html) for ([IpAddr](https://doc.rust-lang.org/nightly/std/net/enum.IpAddr.html), [u16](https://doc.rust-lang.org/nightly/std/primitive.u16.html)) * impl<K, V> [FromIterator](https://notriddle.com/notriddle-rustdoc-test/std/iter/trait.FromIterator.html)<[(K, V)](https://notriddle.com/notriddle-rustdoc-test/std/primitive.tuple.html)> for [BTreeMap](https://notriddle.com/notriddle-rustdoc-test/std/collections/struct.BTreeMap.html)<K, V>
This commit is contained in:
commit
3174a694e0
9 changed files with 53 additions and 13 deletions
|
@ -23,6 +23,8 @@ use rustc_span::symbol::kw;
|
|||
use rustc_span::{sym, Symbol};
|
||||
use rustc_target::spec::abi::Abi;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::clean::{
|
||||
self, types::ExternalLocation, utils::find_nearest_parent_module, ExternalCrate, ItemId,
|
||||
PrimitiveType,
|
||||
|
@ -874,20 +876,42 @@ fn fmt_type<'cx>(
|
|||
match &typs[..] {
|
||||
&[] => primitive_link(f, PrimitiveType::Unit, "()", cx),
|
||||
&[ref one] => {
|
||||
primitive_link(f, PrimitiveType::Tuple, "(", cx)?;
|
||||
// Carry `f.alternate()` into this display w/o branching manually.
|
||||
fmt::Display::fmt(&one.print(cx), f)?;
|
||||
primitive_link(f, PrimitiveType::Tuple, ",)", cx)
|
||||
if let clean::Generic(name) = one {
|
||||
primitive_link(f, PrimitiveType::Tuple, &format!("({name},)"), cx)
|
||||
} else {
|
||||
write!(f, "(")?;
|
||||
// Carry `f.alternate()` into this display w/o branching manually.
|
||||
fmt::Display::fmt(&one.print(cx), f)?;
|
||||
write!(f, ",)")
|
||||
}
|
||||
}
|
||||
many => {
|
||||
primitive_link(f, PrimitiveType::Tuple, "(", cx)?;
|
||||
for (i, item) in many.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ", ")?;
|
||||
let generic_names: Vec<Symbol> = many
|
||||
.iter()
|
||||
.filter_map(|t| match t {
|
||||
clean::Generic(name) => Some(*name),
|
||||
_ => None,
|
||||
})
|
||||
.collect();
|
||||
let is_generic = generic_names.len() == many.len();
|
||||
if is_generic {
|
||||
primitive_link(
|
||||
f,
|
||||
PrimitiveType::Tuple,
|
||||
&format!("({})", generic_names.iter().map(|s| s.as_str()).join(", ")),
|
||||
cx,
|
||||
)
|
||||
} else {
|
||||
write!(f, "(")?;
|
||||
for (i, item) in many.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ", ")?;
|
||||
}
|
||||
// Carry `f.alternate()` into this display w/o branching manually.
|
||||
fmt::Display::fmt(&item.print(cx), f)?;
|
||||
}
|
||||
fmt::Display::fmt(&item.print(cx), f)?;
|
||||
write!(f, ")")
|
||||
}
|
||||
primitive_link(f, PrimitiveType::Tuple, ")", cx)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue