eslint rule suggestion: report an Index that the system's own query already covers
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- eslint, typescript
- Lĩnh vực
- tooling
Hướng nghiên cứu
Start by reading the existing ESLint plugin and rule entry points; the issue notes that the plugin already sees system declarations and lookups. Check related issues #233 and #234 for context, then add tests for the listed report and non-report cases. Done means the rule reports only qualifying indexes at Index.create and leaves the specified legitimate indexes alone.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Summary
Suggestion for the planned ESLint rule: report an Index that a plain query already covers. An index is kept up to date on every structural change and costs memory, so defining one for something a system can read with components: { with, not } is waste, and it is easy to write by habit.
Case
A system that despawns every entity carrying a tag was written with an index:
const transients = Index.create({ key: [], components: { with: [frameTransient] } });
export const endFrame = System.create({ lookup: { transients: { index: transients } } }, ({ commands, lookup }) => {
const all = lookup.transients();
for (let i = 0; i < all.length; i++) commands.despawn(all.at(i).entity);
});
A row system reads the same entities with nothing to maintain:
export const endFrame = System.create({ components: { with: [frameTransient] } }, (row, { commands }) => {
commands.despawn(row.entity);
});
Rule
Report an index when all of these hold:
- it has
key: []and is notunique, - exactly one system uses it, through a lookup,
- the index's
with(andnot) is covered by that system's owncomponentsdeclaration, so the system already matches those entities, - the body only iterates the lookup's rows (
for (i < rows.length) rows.at(i)), with no keyed access.
Message: "this index is replaceable by the system's own components query; make it a row system" (or the equivalent for per-run systems), pointing at the Index.create.
What it must not report
An all-rows index (key: []) is legitimate when:
- several systems read it,
- a per-run system needs the whole set before it acts (for example, "is there any request for X?" across all rows), which a row system, called once per row, can't express,
- it is read from a system whose own declaration doesn't match those entities (a different archetype).
An index with a key (a keyed or unique lookup) is never reported.
Notes
- It could also be a compiler warning, since the plugin already sees every system's declaration and lookups, but a lint rule fits better: the first check is a style judgment and the fix depends on the body.
- Related: https://github.com/adobe/data/issues/234 (the widened-access fallback) and https://github.com/adobe/data/issues/233 (describing inferred access), both about making what the build infers visible.
- Ngôn ngữ chính
- TypeScript
- Star
- 12
- Fork
- 8
- Merge trung bình
- 11 giờ 2 phút
- Pull request đã merge (30 ngày)
- 23
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của adobe/data
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
Maintainer thường phản hồi trong vòng 1 ngày
-
ecs: let kernels issue commands through helpers (component lists, symbol-keyed values, void helpers)Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 15/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 8/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 22/100
Maintainer thường phản hồi trong vòng 1 ngày
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 85/100
formbricks/formbricks#9918 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Chat: Resize question overlayĐang mởenhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
thecodacus/pithagoras#364 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
openclimatefix/quartz-frontend#823 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
area:agent-manager community needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
`contacts.create` posts to `/audiences/undefined/contacts` when `audienceId` is undefinedCó thể đã có người làm @RaphaelFakhri đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
resend/resend-node#1176 ·
Maintainer thường phản hồi trong vòng 1 ngày