-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Several lints do not check against alternative method syntax #94
Milestone
Comments
BD103
added a commit
that referenced
this issue
Sep 27, 2024
As per @alice-i-cecile's request! Closes #58. This adds the `bevy::panicking_query_methods` lint, which searches for usage of panicking methods like `Query::single()`. It is currently `Allow`-by-default, so you need to explicitly opt-in to use it. (In the [project](https://github.com/orgs/TheBevyFlock/projects/3/views/1?sliceBy%5Bvalue%5D=Restriction) it's under the Restriction category.) This lint checks both `Query` and `QueryState`. I will write a lint for resources in another PR. :) ## Testing Wow, I'm so glad you asked! (You asked how to test this lint, right?) I used the following example when testing. Paste it into `bevy_lint/examples/lint_test.rs`, run `cd bevy_lint`, then run `cargo build && cargo run -- --example lint_test`. ```rust #![feature(register_tool)] #![register_tool(bevy)] #![deny(bevy::panicking_query_methods)] #![deny(bevy::panicking_world_methods)] use bevy::prelude::*; #[derive(Component)] struct MyComponent; #[derive(Resource)] struct MyResource; fn main() { App::new().add_systems(Update, my_system); let mut world = World::new(); let mut query_state = QueryState::<&mut MyComponent>::new(&mut world); let _ = query_state.single_mut(&mut world); world.insert_resource(MyResource); let _ = world.resource::<MyResource>(); } fn my_system(query: Query<&MyComponent>) { let _ = query.many([]); } ``` The warnings should look like this: ```bash error: called a `QueryState` method that can panic when a non-panicking alternative exists --> bevy_lint/examples/lint_test.rs:21:25 | 21 | let _ = query_state.single_mut(&mut world); | ^^^^^^^^^^^^^^^^^^^^^^ | = help: use `query_state.get_single_mut(&mut world)` and handle the `Option` or `Result` note: the lint level is defined here --> bevy_lint/examples/lint_test.rs:4:9 | 4 | #![deny(bevy::panicking_query_methods)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: called a `World` method that can panic when a non-panicking alternative exists --> bevy_lint/examples/lint_test.rs:24:19 | 24 | let _ = world.resource::<MyResource>(); | ^^^^^^^^^^^^^^^^^^^^^^^^ | = help: use `world.get_resource::<MyResource>()` and handle the `Option` or `Result` note: the lint level is defined here --> bevy_lint/examples/lint_test.rs:5:9 | 5 | #![deny(bevy::panicking_world_methods)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: called a `Query` method that can panic when a non-panicking alternative exists --> bevy_lint/examples/lint_test.rs:28:19 | 28 | let _ = query.many([]); | ^^^^^^^^ | = help: use `query.get_many([])` and handle the `Option` or `Result` ``` Fiddle around with it and try to break it! Good luck, though. Unless you use #94, this is the most foolproof lint I've written so far! >:D
This also occurs in In total, the following lints are affected:
|
BD103
changed the title
Several lints do not check against alternative method syntax
Oct 8, 2024
main_return_without_appexit
and insert_event_resource
do not lint against alternative method syntax
BD103
added
A-Linter
Related to the linter and custom lints
and removed
A-CI
Related to CI and GitHub Actions
labels
Nov 3, 2024
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The following code does not raise any warnings:
This is likely because both lints match against just
ExprKind::MethodCall
, when they should also be looking for normal function calls.Not sure if this bug will come up often, so this is probably low-priority.
The text was updated successfully, but these errors were encountered: