Files
linux/rust/kernel/prelude.rs
Gary Guo 8d49d90fb9 rust: make build_assert module the home of related macros
Given the macro scoping rules, all macros are rendered twice, in the
module and in the top-level of kernel crate.

Add `#[doc(hidden)]` to the macro definition and `#[doc(inline)]` to the
re-export inside `build_assert` module so the top-level items are hidden.

[ Sadly, because the definition is hidden, `rustdoc` decides to not list
  them as re-exports in the `prelude` page anymore, even if we refer to
  the not-actually-hidden item.

    - Miguel ]

Acked-by: Danilo Krummrich <dakr@kernel.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Acked-by: Alexandre Courbot <acourbot@nvidia.com>
Acked-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
Acked-by: Boqun Feng <boqun@kernel.org>
Signed-off-by: Gary Guo <gary@garyguo.net>
Link: https://patch.msgid.link/20260609142637.373347-1-gary@kernel.org
[ Kept a single declaration in the prelude, and reworded since they
  already had `no_inline`. Removed other imports from `predefine` since
  we now use the prelude. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2026-06-10 09:07:13 +02:00

121 lines
1.8 KiB
Rust

// SPDX-License-Identifier: GPL-2.0
//! The `kernel` prelude.
//!
//! These are the most common items used by Rust code in the kernel,
//! intended to be imported by all Rust code, for convenience.
//!
//! # Examples
//!
//! ```
//! use kernel::prelude::*;
//! ```
#[doc(no_inline)]
pub use core::{
mem::{
align_of,
align_of_val,
size_of,
size_of_val, //
},
pin::Pin, //
};
#[doc(no_inline)]
pub use ::ffi::{
c_char,
c_int,
c_long,
c_longlong,
c_schar,
c_short,
c_uchar,
c_uint,
c_ulong,
c_ulonglong,
c_ushort,
c_void,
CStr, //
};
#[doc(no_inline)]
pub use macros::{
export,
fmt,
kunit_tests,
module,
vtable, //
};
#[doc(no_inline)]
pub use pin_init::{
init,
pin_data,
pin_init,
pinned_drop,
InPlaceWrite,
Init,
PinInit,
Zeroable, //
};
#[doc(no_inline)]
pub use zerocopy::FromBytes;
#[doc(no_inline)]
pub use zerocopy_derive::FromBytes;
#[doc(no_inline)]
pub use super::{
alloc::{
flags::*,
Box,
KBox,
KVBox,
KVVec,
KVec,
VBox,
VVec,
Vec, //
},
build_assert::{
build_assert,
build_error,
const_assert,
static_assert, //
},
current,
dev_alert,
dev_crit,
dev_dbg,
dev_emerg,
dev_err,
dev_info,
dev_notice,
dev_warn,
error::{
code::*,
Error,
Result, //
},
init::InPlaceInit,
pr_alert,
pr_crit,
pr_debug,
pr_emerg,
pr_err,
pr_info,
pr_notice,
pr_warn,
str::CStrExt as _,
try_init,
try_pin_init,
uaccess::UserPtr,
ThisModule, //
};
// `super::std_vendor` is hidden, which makes the macro inline for some reason.
#[doc(no_inline)]
pub use super::dbg;