mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 01:34:21 +00:00
Rollup merge of #85957 - BoxyUwU:rustdoc-const-generic-defaults, r=oli-obk
Display defaults on const params- rustdoc previously rustdoc would render this struct declaration: `pub struct Foo<const N: usize = 10>;` as: `pub struct Foo<const N: usize>;` this PR changes it to render correctly
This commit is contained in:
commit
606feba5bb
@ -664,7 +664,10 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
GenericParamDefKind::Lifetime => {}
|
||||
GenericParamDefKind::Const { .. } => {}
|
||||
GenericParamDefKind::Const { ref mut default, .. } => {
|
||||
// We never want something like `impl<const N: usize = 10>`
|
||||
default.take();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -445,11 +445,15 @@ impl Clean<GenericParamDef> for ty::GenericParamDef {
|
||||
},
|
||||
)
|
||||
}
|
||||
ty::GenericParamDefKind::Const { .. } => (
|
||||
ty::GenericParamDefKind::Const { has_default, .. } => (
|
||||
self.name,
|
||||
GenericParamDefKind::Const {
|
||||
did: self.def_id,
|
||||
ty: cx.tcx.type_of(self.def_id).clean(cx),
|
||||
default: match has_default {
|
||||
true => Some(cx.tcx.const_param_default(self.def_id).to_string()),
|
||||
false => None,
|
||||
},
|
||||
},
|
||||
),
|
||||
};
|
||||
@ -487,12 +491,15 @@ impl Clean<GenericParamDef> for hir::GenericParam<'_> {
|
||||
synthetic,
|
||||
},
|
||||
),
|
||||
hir::GenericParamKind::Const { ref ty, default: _ } => (
|
||||
hir::GenericParamKind::Const { ref ty, default } => (
|
||||
self.name.ident().name,
|
||||
GenericParamDefKind::Const {
|
||||
did: cx.tcx.hir().local_def_id(self.hir_id).to_def_id(),
|
||||
ty: ty.clean(cx),
|
||||
// FIXME(const_generics_defaults): add `default` field here for docs
|
||||
default: default.map(|ct| {
|
||||
let def_id = cx.tcx.hir().local_def_id(ct.hir_id);
|
||||
ty::Const::from_anon_const(cx.tcx, def_id).to_string()
|
||||
}),
|
||||
},
|
||||
),
|
||||
};
|
||||
|
@ -1220,6 +1220,7 @@ crate enum GenericParamDefKind {
|
||||
Const {
|
||||
did: DefId,
|
||||
ty: Type,
|
||||
default: Option<String>,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -177,12 +177,22 @@ impl clean::GenericParamDef {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
clean::GenericParamDefKind::Const { ref ty, .. } => {
|
||||
clean::GenericParamDefKind::Const { ref ty, ref default, .. } => {
|
||||
if f.alternate() {
|
||||
write!(f, "const {}: {:#}", self.name, ty.print(cx))
|
||||
write!(f, "const {}: {:#}", self.name, ty.print(cx))?;
|
||||
} else {
|
||||
write!(f, "const {}: {}", self.name, ty.print(cx))
|
||||
write!(f, "const {}: {}", self.name, ty.print(cx))?;
|
||||
}
|
||||
|
||||
if let Some(default) = default {
|
||||
if f.alternate() {
|
||||
write!(f, " = {:#}", default)?;
|
||||
} else {
|
||||
write!(f, " = {}", default)?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -317,7 +317,9 @@ impl FromWithTcx<clean::GenericParamDefKind> for GenericParamDefKind {
|
||||
bounds: bounds.into_iter().map(|x| x.into_tcx(tcx)).collect(),
|
||||
default: default.map(|x| x.into_tcx(tcx)),
|
||||
},
|
||||
Const { did: _, ty } => GenericParamDefKind::Const(ty.into_tcx(tcx)),
|
||||
Const { did: _, ty, default } => {
|
||||
GenericParamDefKind::Const { ty: ty.into_tcx(tcx), default }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
||||
)
|
||||
})
|
||||
.collect(),
|
||||
format_version: 5,
|
||||
format_version: 6,
|
||||
};
|
||||
let mut p = self.out_path.clone();
|
||||
p.push(output.index.get(&output.root).unwrap().name.clone().unwrap());
|
||||
|
@ -324,7 +324,7 @@ pub struct GenericParamDef {
|
||||
pub enum GenericParamDefKind {
|
||||
Lifetime,
|
||||
Type { bounds: Vec<GenericBound>, default: Option<Type> },
|
||||
Const(Type),
|
||||
Const { ty: Type, default: Option<String> },
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
|
@ -0,0 +1,6 @@
|
||||
#![crate_name = "foo"]
|
||||
#![feature(const_generics_defaults)]
|
||||
|
||||
// @has foo/struct.Foo.html '//pre[@class="rust struct"]' \
|
||||
// 'pub struct Foo<const M: usize = 10_usize, const N: usize = M, T = i32>(_);'
|
||||
pub struct Foo<const M: usize = 10, const N: usize = M, T = i32>(T);
|
Loading…
Reference in New Issue
Block a user