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.3.0...main

v0.3.0 - 2025-04-30

All Changes: lint-v0.2.0...lint-v0.3.0

Added

  • Lint iter_current_update_events to suspicious (#314)
  • Lint unconventional_naming to style (#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 to bevy_lint::lints::insert_unit_bundle, but in v0.3.0 you would go to bevy_lint::lints::suspicious::insert_unit_bundle. This signals that insert_unit_bundle is a suspicious lint.
  • Moved lint group docs from bevy_lint::groups to their associated bevy_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.
  • missing_reflect now emits machine-applicable suggestions if all fields in a type implement PartialReflect (#389)

Removed

  • Lint plugin_not_ending_in_plugin (#345)
    • This lint has been merged into the new unconventional_naming lint.

Fixed

  • main_return_without_appexit no longer fires if the AppExit is used (#346)
    • The goal of the lint is to encourage the AppExit to be handled, although returning it from main() 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 with let _ = app.run();.
  • 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 to pedantic (#164)
  • Lint insert_unit_bundle to suspicious (#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 from restriction to nursery (#261)
    • zst_query does not respect QueryData::Item, meaning it is broken for queries like Has<T> and AnyOf<T>. Please see #279 for more information.
  • Merged panicking_query_methods and panicking_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 to pedantic (#84)
  • Lint insert_event_resource to suspicious (#86)
  • Lint groups correctness, suspicious, complexity, performance, style, pedantic, restriction, and nursery (#98)
  • Lints panicking_query_methods and panicking_world_methods to restriction (#95)
  • Lint plugin_not_ending_in_plugin to style (#111)
  • Lint missing_reflect to restriction (#139)
  • Lint zst_query to restriction (#168)