Skip to content

Commit

Permalink
rustdoc: properly elide cross-crate host effect args
Browse files Browse the repository at this point in the history
  • Loading branch information
fmease committed Nov 4, 2023
1 parent ffb7ed9 commit ee0cdfd
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 21 deletions.
3 changes: 2 additions & 1 deletion src/librustdoc/clean/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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) =>
{
Expand Down
6 changes: 1 addition & 5 deletions src/librustdoc/clean/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 2 additions & 0 deletions tests/rustdoc/const-effect-param.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// Check that we don't render host effect parameters & arguments.

#![crate_name = "foo"]
#![feature(effects, const_trait_impl)]

Expand Down
18 changes: 18 additions & 0 deletions tests/rustdoc/inline_cross/auxiliary/const-effect-param.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#![feature(effects, const_trait_impl)]

#[const_trait]
pub trait Resource {}

impl Resource for () {}

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>() {}
5 changes: 0 additions & 5 deletions tests/rustdoc/inline_cross/auxiliary/const-fn.rs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub use const_effect_param::*;
29 changes: 29 additions & 0 deletions tests/rustdoc/inline_cross/const-effect-param.rs
Original file line number Diff line number Diff line change
@@ -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` just 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;
10 changes: 0 additions & 10 deletions tests/rustdoc/inline_cross/const-fn.rs

This file was deleted.

0 comments on commit ee0cdfd

Please sign in to comment.