[PATCH 00/19] rust: lint improvements

Miguel Ojeda
2024-09-04T20:44:42Z

Hi all,

This is a series that contains a series of lint-related things:

- Cleanups and other improvements and fixes, including removing `allow`s that
are not needed anymore for different reasons and a workaround for
`dbg_macro` detection.

- The enablement of some safety lints so that the toolchain enforces that we
write `// SAFETY` comments and `# Safety` sections properly.

- The addition of `.clippy.toml`, which allows us to take advantage of a few
configuration options.

- Start using the new `#[expect(...)]` feature and add documentation on it as
well as lints in general.

Overall, this should improve the quality of the code and documentation as well
as reduce the time needed in reviews.

I want to mention Trevor's nice work on lints from a while ago [1]. I think we
should still do something like that: discuss which lints we would like to have
one-by-one and start enabling them (and perhaps have a file like Trevor proposed
etc.).

For the moment, though, I am sending these, since we would like to have at least
the safety-related ones enabled soon [2]: now that more code and developers
are joining, it sounds like a good time to start enforcing it -- it should make
new Rust kernel developers aware of the need of writing them, which has proven
to be a common request from reviewers.

If needed, the series can be applied partially or split, but most of it should
be fairly uncontroversial.

Link: https://github.com/Rust-for-Linux/linux/pull/1025 [1]
Link: https://lore.kernel.org/rust-for-linux/CD29DF8F-7FF3-466F-9724-BC92C14A68BD@collabora.com/ [2]

Miguel Ojeda (19):
rust: workqueue: remove unneeded ``#[allow(clippy::new_ret_no_self)]`
rust: sort global Rust flags
rust: types: avoid repetition in `{As,From}Bytes` impls
rust: enable `clippy::undocumented_unsafe_blocks` lint
rust: enable `clippy::unnecessary_safety_comment` lint
rust: enable `clippy::unnecessary_safety_doc` lint
rust: enable `clippy::ignored_unit_patterns` lint
rust: enable `rustdoc::unescaped_backticks` lint
rust: init: remove unneeded `#[allow(clippy::disallowed_names)]`
rust: sync: remove unneeded
`#[allow(clippy::non_send_fields_in_send_ty)]`
rust: introduce `.clippy.toml`
rust: replace `clippy::dbg_macro` with `disallowed_macros`
rust: rbtree: fix `SAFETY` comments that should be `# Safety` sections
rust: provide proper code documentation titles
rust: enable Clippy's `check-private-items`
Documentation: rust: add coding guidelines on lints
rust: start using the `#[expect(...)]` attribute
Documentation: rust: discuss `#[expect(...)]` in the guidelines
rust: std_vendor: simplify `{ .. macro! .. }` with inner attributes

.clippy.toml | 9 ++
.gitignore | 1 +
Documentation/rust/coding-guidelines.rst | 139 +++++++++++++++++++++++
MAINTAINERS | 1 +
Makefile | 15 ++-
rust/Makefile | 5 +-
rust/bindings/lib.rs | 1 +
rust/kernel/alloc/allocator.rs | 2 +
rust/kernel/error.rs | 11 +-
rust/kernel/init.rs | 30 ++---
rust/kernel/init/__internal.rs | 11 +-
rust/kernel/init/macros.rs | 18 ++-
rust/kernel/ioctl.rs | 2 +-
rust/kernel/lib.rs | 1 +
rust/kernel/list.rs | 1 +
rust/kernel/list/arc_field.rs | 2 +-
rust/kernel/print.rs | 5 +-
rust/kernel/rbtree.rs | 9 +-
rust/kernel/std_vendor.rs | 16 ++-
rust/kernel/str.rs | 7 +-
rust/kernel/sync/arc.rs | 2 +-
rust/kernel/sync/arc/std_vendor.rs | 2 +
rust/kernel/sync/condvar.rs | 1 -
rust/kernel/sync/lock.rs | 6 +-
rust/kernel/types.rs | 74 ++++++------
rust/kernel/workqueue.rs | 9 +-
rust/uapi/lib.rs | 1 +
samples/rust/rust_print.rs | 1 +
scripts/Makefile.build | 2 +-
29 files changed, 293 insertions(+), 91 deletions(-)
create mode 100644 .clippy.toml

base-commit: 68d3b6aa08708bb3907c2c13eaf4b3ccf4805160
--
2.46.0