Changelog
All notable user-facing changes to the Bevy Linter will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
All Changes: lint-v0.4.0...main
v0.4.0 - 2025-08-06
All Changes: lint-v0.3.0...lint-v0.4.0
Added
- You can now run
bevy_lint --fix
to auto-fix lints (#505) bevy_lint
now has a custom--help
screen to display options specific to the linter (#505)- Added lints
update_schedule
andfixed_update_schedule
torestriction
(#463)- These can help restrict modules to only use the
Update
orFixedUpdate
schedules. Useful for separating game and rendering logic!
- These can help restrict modules to only use the
- Added lint
camera_modification_in_fixed_update
tonursery
(#417)- This catches cases where a camera is modified during
FixedUpdate
, which can cause laggy visuals.
- This catches cases where a camera is modified during
- The Bevy CLI (Alpha) can now automatically install the linter for you (#406)
- It is now possible to use the linter without Rustup by specifying the
BEVY_LINT_SYSROOT
environmental variable (#478)- This should make it easier to use the linter with NixOS.
- Added opt-in support for caching
bevy_lint
in Github Actions (#530)- This can double the speed at which
bevy_lint
is installed in CI, so it is highly recommended to enable it by following these instructions!
- This can double the speed at which
- Added docs on how to use
bevy_lint
with Rust-Analyzer (#503) - Added docs for troubleshooting issues with
cranelift
andsccache
(#453, #522)
Changed
- The lint
insert_unit_bundle
has been renamed tounit_in_bundle
because it now supports many more cases, not justCommands::spawn()
(#502) - Improved
unconventional_naming
's diagnostics when encountering aPlugin
(#495) - The linter documentation has been moved to use
mdbook
instead ofrustdoc
(#420, #436)- You can find the new docs here.
- The list of all lints is still generated using
rustdoc
, which you can find here.
- Bumped nightly toolchain to
nightly-2025-06-26
(#507)- This adds support for the latest Rust features, such as let-chains!
- You can now copy-and-paste most commands in the docs, without having to lookup the compatibility table (#475)
- You can now install specific commits of the linter with the Github Action (#501)
- This will only work for commits newer than
f38247d
.
- This will only work for commits newer than
Fixed
- The linter will no longer emit the
Plugin
/SystemSet
span twice inunconventional_naming
(#495) - Some lints now support auto-dereference receiver methods (#504)
- For example,
panicking_methods
now catchesBox<World>::resource()
where before it would silently pass.
- For example,
v0.3.0 - 2025-04-30
All Changes: lint-v0.2.0...lint-v0.3.0
Added
- Lint
iter_current_update_events
tosuspicious
(#314) - Lint
unconventional_naming
tostyle
(#345)plugin_not_ending_in_plugin
has been merged into this new lint.
- A Github Action to automatically install the linter (#380)
Changed
- The linter now supports Bevy 0.16, but no longer supports Bevy 0.15 (#323)
- Bumped nightly toolchain to
nightly-2025-04-03
(#373)- The linter now supports Rust 1.88.0.
- Moved lints into submodules for their corresponding lint groups (#321)
- This makes it easier to see what lint group a lint is under in the documentation. For example, in v0.2.0 if you wanted to view the
insert_unit_bundle
lint you would go tobevy_lint::lints::insert_unit_bundle
, but in v0.3.0 you would go tobevy_lint::lints::suspicious::insert_unit_bundle
. This signals thatinsert_unit_bundle
is asuspicious
lint.
- This makes it easier to see what lint group a lint is under in the documentation. For example, in v0.2.0 if you wanted to view the
- Moved lint group docs from
bevy_lint::groups
to their associatedbevy_lint::lints
submodules (#328) - Code generated from external macros are no longer linted (#263)
- External macros are macros that are defined in a separate crate from the one being linted. The output of these macros is skipped for all lints, as it was previously impossible to fix the warnings without an
#[allow(...)]
attribute.
- External macros are macros that are defined in a separate crate from the one being linted. The output of these macros is skipped for all lints, as it was previously impossible to fix the warnings without an
missing_reflect
now emits machine-applicable suggestions if all fields in a type implementPartialReflect
(#389)
Removed
- Lint
plugin_not_ending_in_plugin
(#345)- This lint has been merged into the new
unconventional_naming
lint.
- This lint has been merged into the new
Fixed
main_return_without_appexit
no longer fires if theAppExit
is used (#346)- The goal of the lint is to encourage the
AppExit
to be handled, although returning it frommain()
is just one solution. This fix prevents the lint from yelling at you if you choose to handle it a different way, or simply choose to discard it withlet _ = app.run();
.
- The goal of the lint is to encourage the
- Fixed the Rust version in the compatibility table for v0.2.0 (#363)
v0.2.0 - 2025-03-19
All Changes: lint-v0.1.0...lint-v0.2.0
Added
- Lint
borrowed_reborrowable
topedantic
(#164) - Lint
insert_unit_bundle
tosuspicious
(#210) - Lint configuration in
Cargo.toml
(#251) - Support for
bevy_lint --version
(#257) - Support for qualified method syntax in several lints (#253)
- Lint
duplicate_bevy_dependencies
(#280)
Changed
- The linter now supports Bevy 0.15, but no longer supports Bevy 0.14 (#191)
- Eventually the linter will support multiple versions of Bevy at the same time. Please see #138 for more information.
- Bumped nightly toolchain to
nightly-2025-02-20
(#278) - Lowered
zst_query
lint fromrestriction
tonursery
(#261)zst_query
does not respectQueryData::Item
, meaning it is broken for queries likeHas<T>
andAnyOf<T>
. Please see #279 for more information.
- Merged
panicking_query_methods
andpanicking_world_methods
into a single lint:panicking_methods
(#271)
Fixed
rustc_driver.dll
not found on Windows (#281)bevy_lint
should now work on Windows, as it was previously broken by this bug.
v0.1.0 - 2024-11-17
All Changes: lint-v0.1.0
Added
- Lint
main_return_without_appexit
topedantic
(#84) - Lint
insert_event_resource
tosuspicious
(#86) - Lint groups
correctness
,suspicious
,complexity
,performance
,style
,pedantic
,restriction
, andnursery
(#98)- These are based directly on Clippy's Lint Groups.
- Lints
panicking_query_methods
andpanicking_world_methods
torestriction
(#95) - Lint
plugin_not_ending_in_plugin
tostyle
(#111) - Lint
missing_reflect
torestriction
(#139) - Lint
zst_query
torestriction
(#168)