eslint rule suggestion: report an Index that the system's own query already covers

Đang mở
#235 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

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 not unique,
  • exactly one system uses it, through a lookup,
  • the index's with (and not) is covered by that system's own components declaration, 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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của adobe/data

Tất cả issue của adobe/data

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.