bevy/crates/bevy_ecs_compile_fail_tests/tests/ui
Alice Cecile 509548190b Add get_multiple and get_multiple_mut APIs for Query and QueryState (#4298)
# Objective

- The inability to have multiple active mutable borrows into a query is a common source of borrow-checker pain for users.
- This is a pointless restriction if and only if we can guarantee that the entities they are accessing are unique.
- This could already by bypassed with get_unchecked, but that is an extremely unsafe API.
- Closes https://github.com/bevyengine/bevy/issues/2042.

## Solution

- Add `get_multiple`, `get_multiple_mut` and their unchecked equivalents (`multiple` and `multiple_mut`) to `Query` and `QueryState`.
- Improve the `QueryEntityError` type to provide more useful error information.

## Changelog

- Added `get_multiple`, `get_multiple_mut` and their unchecked equivalents (`multiple` and `multiple_mut`) to Query and QueryState.

## Migration Guide

- The `QueryEntityError` enum now has a `AliasedMutability variant, and returns the offending entity.

## Context

This is a fresh attempt at #3333; rebasing was behaving very badly and it was important to rebase on top of the recent query soundness fixes. Many thanks to all the reviewers in that thread, especially @BoxyUwU for the help with lifetimes.

## To-do

- [x] Add compile fail tests
- [x] Successfully deduplicate code
- [x] Decide what to do about failing doc tests
- [x] Get some reviews for lifetime soundness
2022-03-30 19:16:48 +00:00
..
query_lifetime_safety.rs yeet unsound lifetime annotations on Query methods (#4243) 2022-03-22 02:49:41 +00:00
query_lifetime_safety.stderr yeet unsound lifetime annotations on Query methods (#4243) 2022-03-22 02:49:41 +00:00
system_query_get_lifetime_safety.rs Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_query_get_lifetime_safety.stderr Fix clippy lints for 1.57 (#3238) 2021-12-02 23:40:37 +00:00
system_query_get_multiple_lifetime_safety.rs Add get_multiple and get_multiple_mut APIs for Query and QueryState (#4298) 2022-03-30 19:16:48 +00:00
system_query_get_multiple_lifetime_safety.stderr Add get_multiple and get_multiple_mut APIs for Query and QueryState (#4298) 2022-03-30 19:16:48 +00:00
system_query_get_multiple_mut_lifetime_safety.rs Add get_multiple and get_multiple_mut APIs for Query and QueryState (#4298) 2022-03-30 19:16:48 +00:00
system_query_get_multiple_mut_lifetime_safety.stderr Add get_multiple and get_multiple_mut APIs for Query and QueryState (#4298) 2022-03-30 19:16:48 +00:00
system_query_iter_lifetime_safety.rs Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_query_iter_lifetime_safety.stderr Fix clippy lints for 1.57 (#3238) 2021-12-02 23:40:37 +00:00
system_query_set_get_lifetime_safety.rs ParamSet for conflicting SystemParam:s (#2765) 2022-03-29 23:39:38 +00:00
system_query_set_get_lifetime_safety.stderr ParamSet for conflicting SystemParam:s (#2765) 2022-03-29 23:39:38 +00:00
system_query_set_iter_lifetime_safety.rs ParamSet for conflicting SystemParam:s (#2765) 2022-03-29 23:39:38 +00:00
system_query_set_iter_lifetime_safety.stderr ParamSet for conflicting SystemParam:s (#2765) 2022-03-29 23:39:38 +00:00
system_state_get_lifetime_safety.rs Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_state_get_lifetime_safety.stderr Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_state_iter_lifetime_safety.rs Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_state_iter_lifetime_safety.stderr Assert compiler errors for compile_fail tests (#3067) 2021-11-13 22:43:19 +00:00
system_state_iter_mut_overlap_safety.rs Implement iter() for mutable Queries (#2305) 2021-12-01 23:28:10 +00:00
system_state_iter_mut_overlap_safety.stderr Fix clippy lints for 1.57 (#3238) 2021-12-02 23:40:37 +00:00