preferMembershipFilterMove components whose values are not consumed from query() to with().small-rules/prefer-membership-filter-in-jecsMove discarded Jecs query component values into a membership-only with filter.
query() returns component values in argument order. When a loop does not consume one of those values,
putting the component in with() makes its membership-only role explicit. This is a clarity rule, not a
generated-code performance claim.
The rule handles direct query chains only. It leaves stored queries and rest bindings alone, and it withholds a fix when moving a component expression could change evaluation order or side effects.
preferMembershipFilterMove components whose values are not consumed from query() to with().This rule does not accept options.
import { world } from "@rbxts/jecs";const gameWorld = world();for (const [entity, visual, transform] of gameWorld.query(Visual, Transform).with(User)) { render(entity, visual);}After auto-fix
import { world } from "@rbxts/jecs";const gameWorld = world();for (const [entity, visual] of gameWorld.query(Visual).with(Transform, User)) { render(entity, visual);}import { world } from "@rbxts/jecs";const gameWorld = world();for (const [entity, visual] of gameWorld.query(Visual).with(Transform, User)) render(entity, visual);