Omit argument names from function pointers that do not have argument names
This commit is contained in:
parent
5f447a1ca6
commit
b866debf3c
6 changed files with 27 additions and 13 deletions
|
@ -1104,17 +1104,29 @@ fn clean_args_from_types_and_names<'tcx>(
|
||||||
types: &[hir::Ty<'tcx>],
|
types: &[hir::Ty<'tcx>],
|
||||||
names: &[Ident],
|
names: &[Ident],
|
||||||
) -> Arguments {
|
) -> Arguments {
|
||||||
|
fn nonempty_name(ident: &Ident) -> Option<Symbol> {
|
||||||
|
if ident.name == kw::Underscore || ident.name == kw::Empty {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(ident.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If at least one argument has a name, use `_` as the name of unnamed
|
||||||
|
// arguments. Otherwise omit argument names.
|
||||||
|
let default_name = if names.iter().any(|ident| nonempty_name(ident).is_some()) {
|
||||||
|
kw::Underscore
|
||||||
|
} else {
|
||||||
|
kw::Empty
|
||||||
|
};
|
||||||
|
|
||||||
Arguments {
|
Arguments {
|
||||||
values: types
|
values: types
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(i, ty)| Argument {
|
.map(|(i, ty)| Argument {
|
||||||
type_: clean_ty(ty, cx),
|
type_: clean_ty(ty, cx),
|
||||||
name: names
|
name: names.get(i).and_then(nonempty_name).unwrap_or(default_name),
|
||||||
.get(i)
|
|
||||||
.map(|ident| ident.name)
|
|
||||||
.filter(|ident| !ident.is_empty())
|
|
||||||
.unwrap_or(kw::Underscore),
|
|
||||||
is_const: false,
|
is_const: false,
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
|
|
@ -1408,7 +1408,9 @@ impl clean::Arguments {
|
||||||
) -> impl Display + 'a + Captures<'tcx> {
|
) -> impl Display + 'a + Captures<'tcx> {
|
||||||
fmt::from_fn(move |f| {
|
fmt::from_fn(move |f| {
|
||||||
for (i, input) in self.values.iter().enumerate() {
|
for (i, input) in self.values.iter().enumerate() {
|
||||||
write!(f, "{}: ", input.name)?;
|
if !input.name.is_empty() {
|
||||||
|
write!(f, "{}: ", input.name)?;
|
||||||
|
}
|
||||||
input.type_.print(cx).fmt(f)?;
|
input.type_.print(cx).fmt(f)?;
|
||||||
if i + 1 < self.values.len() {
|
if i + 1 < self.values.len() {
|
||||||
write!(f, ", ")?;
|
write!(f, ", ")?;
|
||||||
|
|
|
@ -45,7 +45,7 @@ pub fn f(_: &(ToString + 'static)) {}
|
||||||
|
|
||||||
impl Bar {
|
impl Bar {
|
||||||
//@ has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.F"]' \
|
//@ has assoc_consts/struct.Bar.html '//*[@id="associatedconstant.F"]' \
|
||||||
// "const F: fn(_: &(dyn ToString + 'static))"
|
// "const F: fn(&(dyn ToString + 'static))"
|
||||||
pub const F: fn(_: &(ToString + 'static)) = f;
|
pub const F: fn(_: &(ToString + 'static)) = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
pub fn f(callback: fn(len: usize, foo: u32)) {}
|
pub fn f(callback: fn(len: usize, foo: u32)) {}
|
||||||
|
|
||||||
//@ has foo/fn.g.html
|
//@ has foo/fn.g.html
|
||||||
//@ has - '//pre[@class="rust item-decl"]' 'pub fn g(_: fn(_: usize, _: u32))'
|
//@ has - '//pre[@class="rust item-decl"]' 'pub fn g(_: fn(usize, u32))'
|
||||||
pub fn g(_: fn(usize, _: u32)) {}
|
pub fn g(_: fn(usize, _: u32)) {}
|
||||||
|
|
||||||
//@ has foo/fn.mixed.html
|
//@ has foo/fn.mixed.html
|
||||||
|
|
|
@ -13,7 +13,7 @@ impl Owner {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure we handle bound vars correctly.
|
// Make sure we handle bound vars correctly.
|
||||||
//@ has 'inherent_projections/fn.user.html' '//pre[@class="rust item-decl"]' "user(_: for<'a> fn(_: Carrier<'a>::Focus))"
|
//@ has 'inherent_projections/fn.user.html' '//pre[@class="rust item-decl"]' "user(_: for<'a> fn(Carrier<'a>::Focus))"
|
||||||
pub fn user(_: for<'a> fn(Carrier<'a>::Focus)) {}
|
pub fn user(_: for<'a> fn(Carrier<'a>::Focus)) {}
|
||||||
|
|
||||||
pub struct Carrier<'a>(&'a ());
|
pub struct Carrier<'a>(&'a ());
|
||||||
|
|
|
@ -11,10 +11,10 @@ macro_rules! gen {
|
||||||
}
|
}
|
||||||
|
|
||||||
//@ has 'foo/struct.Providers.html'
|
//@ has 'foo/struct.Providers.html'
|
||||||
//@ has - '//*[@class="rust item-decl"]//code' "pub a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8,"
|
//@ has - '//*[@class="rust item-decl"]//code' "pub a: for<'tcx> fn(TyCtxt<'tcx>, u8) -> i8,"
|
||||||
//@ has - '//*[@class="rust item-decl"]//code' "pub b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16,"
|
//@ has - '//*[@class="rust item-decl"]//code' "pub b: for<'tcx> fn(TyCtxt<'tcx>, u16) -> i16,"
|
||||||
//@ has - '//*[@id="structfield.a"]/code' "a: for<'tcx> fn(_: TyCtxt<'tcx>, _: u8) -> i8"
|
//@ has - '//*[@id="structfield.a"]/code' "a: for<'tcx> fn(TyCtxt<'tcx>, u8) -> i8"
|
||||||
//@ has - '//*[@id="structfield.b"]/code' "b: for<'tcx> fn(_: TyCtxt<'tcx>, _: u16) -> i16"
|
//@ has - '//*[@id="structfield.b"]/code' "b: for<'tcx> fn(TyCtxt<'tcx>, u16) -> i16"
|
||||||
gen! {
|
gen! {
|
||||||
(a, 'tcx, [u8], [i8])
|
(a, 'tcx, [u8], [i8])
|
||||||
(b, 'tcx, [u16], [i16])
|
(b, 'tcx, [u16], [i16])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue