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
Changed
- The linter now supports Bevy 0.17, but no longer supports Bevy 0.16 (#577)
insert_event_resourcelint got renamed toinsert_message_resource.iter_current_update_eventslint got renamed toiter_current_update_messages.
v0.4.0 - 2025-08-06
All Changes: lint-v0.3.0...lint-v0.4.0
Added
- You can now run
bevy_lint --fixto auto-fix lints (#505) bevy_lintnow has a custom--helpscreen to display options specific to the linter (#505)- Added lints
update_scheduleandfixed_update_scheduletorestriction(#463)- These can help restrict modules to only use the
UpdateorFixedUpdateschedules. Useful for separating game and rendering logic!
- These can help restrict modules to only use the
- Added lint
camera_modification_in_fixed_updatetonursery(#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_SYSROOTenvironmental variable (#478)- This should make it easier to use the linter with NixOS.
- Added opt-in support for caching
bevy_lintin Github Actions (#530)- This can double the speed at which
bevy_lintis 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_lintwith Rust-Analyzer (#503) - Added docs for troubleshooting issues with
craneliftandsccache(#453, #522)
Changed
- The lint
insert_unit_bundlehas been renamed tounit_in_bundlebecause 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
mdbookinstead 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/SystemSetspan twice inunconventional_naming(#495) - Some lints now support auto-dereference receiver methods (#504)
- For example,
panicking_methodsnow 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_eventstosuspicious(#314) - Lint
unconventional_namingtostyle(#345)plugin_not_ending_in_pluginhas 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_bundlelint 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_bundleis asuspiciouslint.
- 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::groupsto their associatedbevy_lint::lintssubmodules (#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_reflectnow 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_naminglint.
- This lint has been merged into the new
Fixed
main_return_without_appexitno longer fires if theAppExitis used (#346)- The goal of the lint is to encourage the
AppExitto 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_reborrowabletopedantic(#164) - Lint
insert_unit_bundletosuspicious(#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_querylint fromrestrictiontonursery(#261)zst_querydoes not respectQueryData::Item, meaning it is broken for queries likeHas<T>andAnyOf<T>. Please see #279 for more information.
- Merged
panicking_query_methodsandpanicking_world_methodsinto a single lint:panicking_methods(#271)
Fixed
rustc_driver.dllnot found on Windows (#281)bevy_lintshould 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_appexittopedantic(#84) - Lint
insert_event_resourcetosuspicious(#86) - Lint groups
correctness,suspicious,complexity,performance,style,pedantic,restriction, andnursery(#98)- These are based directly on Clippy's Lint Groups.
- Lints
panicking_query_methodsandpanicking_world_methodstorestriction(#95) - Lint
plugin_not_ending_in_plugintostyle(#111) - Lint
missing_reflecttorestriction(#139) - Lint
zst_querytorestriction(#168)