about summary refs log tree commit diff
path: root/src/librustdoc
diff options
context:
space:
mode:
authorJacob Pratt <jacob@jhpratt.dev>2024-12-01 22:10:23 -0500
committerGitHub <noreply@github.com>2024-12-01 22:10:23 -0500
commit811eaebf7e1038cf229bc40f9f121f8709eeb5f4 (patch)
treea6d713a8dda192eef05e00d1268b20c05cde8fd6 /src/librustdoc
parenta522d78598415cdd614ccc6d961160f192f64b5c (diff)
parentd38f01312c1b827a7a0186c186482579a82cdec3 (diff)
Rollup merge of #133589 - voidc:remove-array-len, r=boxyuwu
Remove `hir::ArrayLen`

This refactoring removes `hir::ArrayLen`, replacing it with `hir::ConstArg`. To represent inferred array lengths (previously `hir::ArrayLen::Infer`), a new variant `ConstArgKind::Infer` is added.

r? `@BoxyUwU`
Diffstat (limited to 'src/librustdoc')
-rw-r--r--src/librustdoc/clean/mod.rs38
-rw-r--r--src/librustdoc/clean/types.rs9
2 files changed, 25 insertions, 22 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs
index 093f216accb..5b407ea9a2b 100644
--- a/src/librustdoc/clean/mod.rs
+++ b/src/librustdoc/clean/mod.rs
@@ -290,6 +290,7 @@ pub(crate) fn clean_const<'tcx>(
             ConstantKind::Path { path: qpath_to_string(qpath).into() }
         }
         hir::ConstArgKind::Anon(anon) => ConstantKind::Anonymous { body: anon.body },
+        hir::ConstArgKind::Infer(..) => ConstantKind::Infer,
     }
 }
 
@@ -1803,30 +1804,27 @@ pub(crate) fn clean_ty<'tcx>(ty: &hir::Ty<'tcx>, cx: &mut DocContext<'tcx>) -> T
         }
         TyKind::Slice(ty) => Slice(Box::new(clean_ty(ty, cx))),
         TyKind::Pat(ty, pat) => Type::Pat(Box::new(clean_ty(ty, cx)), format!("{pat:?}").into()),
-        TyKind::Array(ty, ref length) => {
-            let length = match length {
-                hir::ArrayLen::Infer(..) => "_".to_string(),
-                hir::ArrayLen::Body(const_arg) => {
-                    // NOTE(min_const_generics): We can't use `const_eval_poly` for constants
-                    // as we currently do not supply the parent generics to anonymous constants
-                    // but do allow `ConstKind::Param`.
-                    //
-                    // `const_eval_poly` tries to first substitute generic parameters which
-                    // results in an ICE while manually constructing the constant and using `eval`
-                    // does nothing for `ConstKind::Param`.
+        TyKind::Array(ty, ref const_arg) => {
+            // NOTE(min_const_generics): We can't use `const_eval_poly` for constants
+            // as we currently do not supply the parent generics to anonymous constants
+            // but do allow `ConstKind::Param`.
+            //
+            // `const_eval_poly` tries to first substitute generic parameters which
+            // results in an ICE while manually constructing the constant and using `eval`
+            // does nothing for `ConstKind::Param`.
+            let length = match const_arg.kind {
+                hir::ConstArgKind::Infer(..) => "_".to_string(),
+                hir::ConstArgKind::Anon(hir::AnonConst { def_id, .. }) => {
+                    let ct = lower_const_arg_for_rustdoc(cx.tcx, const_arg, FeedConstTy::No);
+                    let typing_env = ty::TypingEnv::post_analysis(cx.tcx, *def_id);
+                    let ct = cx.tcx.normalize_erasing_regions(typing_env, ct);
+                    print_const(cx, ct)
+                }
+                hir::ConstArgKind::Path(..) => {
                     let ct = lower_const_arg_for_rustdoc(cx.tcx, const_arg, FeedConstTy::No);
-                    let ct = if let hir::ConstArgKind::Anon(hir::AnonConst { def_id, .. }) =
-                        const_arg.kind
-                    {
-                        let typing_env = ty::TypingEnv::post_analysis(cx.tcx, *def_id);
-                        cx.tcx.normalize_erasing_regions(typing_env, ct)
-                    } else {
-                        ct
-                    };
                     print_const(cx, ct)
                 }
             };
-
             Array(Box::new(clean_ty(ty, cx)), length.into())
         }
         TyKind::Tup(tys) => Tuple(tys.iter().map(|ty| clean_ty(ty, cx)).collect()),
diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs
index 01d2661f73e..715bf68374a 100644
--- a/src/librustdoc/clean/types.rs
+++ b/src/librustdoc/clean/types.rs
@@ -2399,6 +2399,8 @@ pub(crate) enum ConstantKind {
     Extern { def_id: DefId },
     /// `const FOO: u32 = ...;`
     Local { def_id: DefId, body: BodyId },
+    /// An inferred constant as in `[10u8; _]`.
+    Infer,
 }
 
 impl Constant {
@@ -2424,6 +2426,7 @@ impl ConstantKind {
             ConstantKind::Local { body, .. } | ConstantKind::Anonymous { body } => {
                 rendered_const(tcx, tcx.hir().body(body), tcx.hir().body_owner_def_id(body))
             }
+            ConstantKind::Infer { .. } => "_".to_string(),
         }
     }
 
@@ -2431,7 +2434,8 @@ impl ConstantKind {
         match *self {
             ConstantKind::TyConst { .. }
             | ConstantKind::Path { .. }
-            | ConstantKind::Anonymous { .. } => None,
+            | ConstantKind::Anonymous { .. }
+            | ConstantKind::Infer => None,
             ConstantKind::Extern { def_id } | ConstantKind::Local { def_id, .. } => {
                 print_evaluated_const(tcx, def_id, true, true)
             }
@@ -2442,7 +2446,8 @@ impl ConstantKind {
         match *self {
             ConstantKind::TyConst { .. }
             | ConstantKind::Extern { .. }
-            | ConstantKind::Path { .. } => false,
+            | ConstantKind::Path { .. }
+            | ConstantKind::Infer => false,
             ConstantKind::Local { body, .. } | ConstantKind::Anonymous { body } => {
                 is_literal_expr(tcx, body.hir_id)
             }