5c6fe68c00
new lint: `source_item_ordering` changelog: [`source_item_ordering`]: Introduced a new restriction lint that checks the ordering of items in Modules, Enums, Structs, Impls and Traits. From the written documentation: > Why restrict this? > Keeping a consistent ordering throughout the codebase helps with working as a team, and possibly improves maintainability of the codebase. The idea is that by defining a consistent and enforceable rule for how source files are structured, less time will be wasted during reviews on a topic that is (under most circumstances) not relevant to the logic implemented in the code. Sometimes this will be referred to as "bike-shedding". > > Keep in mind, that ordering source code alphabetically can lead to reduced performance in cases where the most commonly used enum variant isn't the first entry anymore, and similar optimizations that can reduce branch misses, cache locality and such. Either don't use this lint if that's relevant, or disable the lint in modules or items specifically where it matters. Other solutions can be to use profile guided optimization (PGO), or other advanced optimization methods. I tried to build it as configurable as possible, as such a highly opinionated lint should be adjustable to personal opinions. I'm open to any input and will be available both here and on the zulip for communication. In the meantime I'll be testing this lint against my own code-bases, which I've (manually) kept ordered with the default config, to see how well it works in practice. And lastly, a big thanks to the community for making clippy the best linter there is! |
||
---|---|---|
.. | ||
continuous_integration | ||
development | ||
configuration.md | ||
installation.md | ||
lint_configuration.md | ||
lints.md | ||
README.md | ||
SUMMARY.md | ||
usage.md |
Clippy
A collection of lints to catch common mistakes and improve your Rust code.
There are over 750 lints included in this crate!
Lints are divided into categories, each with a default lint
level. You can choose how
much Clippy is supposed to annoy help you by changing the lint level by
category.
Category | Description | Default level |
---|---|---|
clippy::all |
all lints that are on by default (correctness, suspicious, style, complexity, perf) | warn/deny |
clippy::correctness |
code that is outright wrong or useless | deny |
clippy::suspicious |
code that is most likely wrong or useless | warn |
clippy::style |
code that should be written in a more idiomatic way | warn |
clippy::complexity |
code that does something simple but in a complex way | warn |
clippy::perf |
code that can be written to run faster | warn |
clippy::pedantic |
lints which are rather strict or have occasional false positives | allow |
clippy::restriction |
lints which prevent the use of language and library features1 | allow |
clippy::nursery |
new lints that are still under development | allow |
clippy::cargo |
lints for the cargo manifest | allow |
More to come, please file an issue if you have ideas!
The restriction
category should, emphatically, not be enabled as a whole. The contained
lints may lint against perfectly reasonable code, may not have an alternative suggestion,
and may contradict any other lints (including other categories). Lints should be considered
on a case-by-case basis before enabling.
-
Some use cases for
restriction
lints include:- Strict coding styles (e.g.
clippy::else_if_without_else
). - Additional restrictions on CI (e.g.
clippy::todo
). - Preventing panicking in certain functions (e.g.
clippy::unwrap_used
). - Running a lint only on a subset of code (e.g.
#[forbid(clippy::float_arithmetic)]
on a module).
- Strict coding styles (e.g.