mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Rollup merge of #117531 - fmease:rustdoc-effects-properly-elide-x-crate-host-args, r=GuillaumeGomez
rustdoc: properly elide cross-crate host effect args Fixes FIXMEs introduced in #116670.
This commit is contained in:
commit
ba7ec56639
@ -2534,7 +2534,8 @@ fn clean_generic_args<'tcx>(
|
||||
}
|
||||
hir::GenericArg::Lifetime(_) => GenericArg::Lifetime(Lifetime::elided()),
|
||||
hir::GenericArg::Type(ty) => GenericArg::Type(clean_ty(ty, cx)),
|
||||
// FIXME(effects): This will still emit `<true>` for non-const impls of const traits
|
||||
// Checking for `#[rustc_host]` on the `AnonConst` not only accounts for the case
|
||||
// where the argument is `host` but for all possible cases (e.g., `true`, `false`).
|
||||
hir::GenericArg::Const(ct)
|
||||
if cx.tcx.has_attr(ct.value.def_id, sym::rustc_host) =>
|
||||
{
|
||||
|
@ -124,11 +124,7 @@ pub(crate) fn ty_args_to_args<'tcx>(
|
||||
)))
|
||||
}
|
||||
GenericArgKind::Const(ct) => {
|
||||
// FIXME(effects): this relies on the host effect being called `host`, which users could also name
|
||||
// their const generics.
|
||||
// FIXME(effects): this causes `host = true` and `host = false` generics to also be emitted.
|
||||
if let ty::ConstKind::Param(p) = ct.kind()
|
||||
&& p.name == sym::host
|
||||
if let ty::GenericParamDefKind::Const { is_host_effect: true, .. } = params[index].kind
|
||||
{
|
||||
return None;
|
||||
}
|
||||
|
@ -1,3 +1,5 @@
|
||||
// Check that we don't render host effect parameters & arguments.
|
||||
|
||||
#![crate_name = "foo"]
|
||||
#![feature(effects, const_trait_impl)]
|
||||
|
||||
|
16
tests/rustdoc/inline_cross/auxiliary/const-effect-param.rs
Normal file
16
tests/rustdoc/inline_cross/auxiliary/const-effect-param.rs
Normal file
@ -0,0 +1,16 @@
|
||||
#![feature(effects, const_trait_impl)]
|
||||
|
||||
#[const_trait]
|
||||
pub trait Resource {}
|
||||
|
||||
pub const fn load<R: ~const Resource>() -> i32 {
|
||||
0
|
||||
}
|
||||
|
||||
pub const fn lock<R: Resource>() {}
|
||||
|
||||
#[allow(non_upper_case_globals)]
|
||||
pub trait Clash<const host: u64> {}
|
||||
|
||||
#[allow(non_upper_case_globals)]
|
||||
pub const fn clash<T: Clash<host>, const host: u64>() {}
|
@ -1,5 +0,0 @@
|
||||
#![feature(effects)]
|
||||
|
||||
pub const fn load() -> i32 {
|
||||
0
|
||||
}
|
29
tests/rustdoc/inline_cross/const-effect-param.rs
Normal file
29
tests/rustdoc/inline_cross/const-effect-param.rs
Normal file
@ -0,0 +1,29 @@
|
||||
// Regression test for issue #116629.
|
||||
// Check that we don't render host effect parameters & arguments.
|
||||
|
||||
// aux-crate:const_effect_param=const-effect-param.rs
|
||||
// edition: 2021
|
||||
#![crate_name = "user"]
|
||||
|
||||
// Don't render the host param on `load` and the host arg `host` passed to `Resource`.
|
||||
// @has user/fn.load.html
|
||||
// @has - '//pre[@class="rust item-decl"]' "pub const fn load<R>() -> i32\
|
||||
// where \
|
||||
// R: Resource"
|
||||
pub use const_effect_param::load;
|
||||
|
||||
// Don't render the host arg `true` passed to `Resource`.
|
||||
// @has user/fn.lock.html
|
||||
// @has - '//pre[@class="rust item-decl"]' "pub const fn lock<R>()\
|
||||
// where \
|
||||
// R: Resource"
|
||||
pub use const_effect_param::lock;
|
||||
|
||||
// Regression test for an issue introduced in PR #116670.
|
||||
// Don't hide the const param `host` since it actually isn't the host effect param.
|
||||
// @has user/fn.clash.html
|
||||
// @has - '//pre[@class="rust item-decl"]' \
|
||||
// "pub const fn clash<T, const host: u64>()\
|
||||
// where \
|
||||
// T: Clash<host>"
|
||||
pub use const_effect_param::clash;
|
@ -1,10 +0,0 @@
|
||||
// Regression test for issue #116629.
|
||||
// Check that we render the correct generic params of const fn
|
||||
|
||||
// aux-crate:const_fn=const-fn.rs
|
||||
// edition: 2021
|
||||
#![crate_name = "user"]
|
||||
|
||||
// @has user/fn.load.html
|
||||
// @has - '//pre[@class="rust item-decl"]' "pub const fn load() -> i32"
|
||||
pub use const_fn::load;
|
Loading…
Reference in New Issue
Block a user