Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Group Make targets (and other command types) with a consistent visual language

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

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
38/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
typescript

Hướng nghiên cứu

Start with src/CommandTreeProvider.ts and its buildRootCategories() entry point, then inspect the providers under src/discovery/. Review src/discovery/make.ts for the variable-filtering requirement and trace how each provider currently builds its command list. Done means a shared TaskGroup classifier and consistent grouping across the listed providers, with the specified Make, VS Code, Mise, and end-to-end fixture behavior.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Problem

The tree currently shows a flat list of Make targets under Make Targets (13) — help, build, ci, clean, fmt, lint, package, setup, test, test-exclude-ci, plus variables like COVERAGE_THRESHOLDS_FILE and UNAME that leaked in as pseudo-targets. This doesn't scale: real Makefiles routinely have dozens of targets and users can't find what they need.

The same problem exists across every command-type we support (Mise tasks, VS Code tasks, npm scripts, Just recipes, etc.). Each provider currently shows a flat list, and there is no shared visual language for grouping.

Goal

A consistent grouping visual language across all command types — Make, Mise, VS Code tasks, npm, Just, Cargo, Gradle, Rake, Taskfile, etc. — so that a user who learns the grouping for one provider immediately understands the others.

GNU convention (source of truth for Make)

Per GNU Makefile Conventions — Standard Targets for Users, standard target names fall into natural groups:

Group Standard targets
Build all (default)
Install install, install-html, install-pdf, install-ps, install-strip, installdirs, installcheck, uninstall
Clean clean, mostlyclean, distclean, maintainer-clean
Test check
Docs info, html, pdf, ps, TAGS
Dist dist

These are the canonical groups a user expects. Our grouping must at minimum recognise these.

Proposed groups (cross-provider)

A single taxonomy used by every discovery provider:

  • Build — compile/package (Make all/build, npm build, Cargo build, VS Code build group, Mise build:*)
  • Test — Make check/test, npm test, pytest, Cargo test, VS Code test group
  • Lint / Format — lint, fmt, format, check-format
  • Run / Dev — start, dev, serve, watch, launch configs
  • Clean — clean, distclean, mostlyclean, maintainer-clean
  • Install / Deps — install, setup, bootstrap, uninstall, install-*
  • Release / Dist — dist, package, release, publish
  • CI — ci, ci-*
  • Docs — docs, html, pdf, info, ps
  • Other — anything unmatched

Classification strategy

  1. Name-prefix / name-suffix rules — test-*, *-test, docker-*, db-* group by prefix.
  2. Known-target dictionary — exact matches to GNU standard names and common ecosystem names (npm's start/test/build; Cargo's build/test/check/doc; Mise build:*/test:*).
  3. Provider-native metadata where available:
    • VS Code tasks: group field (build, test) — see tasks.json reference.
    • npm: lifecycle scripts (pre*/post*) are grouped under their parent.
    • Mise: : namespace (build:web, build:api) — group by the prefix before :.
    • Just: doc comments above recipes.
    • Make: parse ## group: <name> or ## comment annotations when present (popular make help convention).
  4. Fallback: ungrouped targets go to Other.

Visual language

  • Each group shown as a collapsible tree node with a consistent icon + label across providers.
    • e.g. "Build" always uses the same icon whether it comes from Make, npm, or VS Code tasks.
  • Group order is fixed across providers (Build → Test → Lint → Run → Clean → Install → Release → CI → Docs → Other).
  • Groups with zero matches are hidden.
  • Single-item groups still render (consistency beats compactness).
  • A setting commandtree.grouping with values auto (default) / flat / custom lets users opt out.

Out of scope (follow-ups)

  • User-configurable custom groups via commandtree.json.
  • Per-workspace overrides of the default classification dictionary.
  • Drag-to-regroup in the tree.

Acceptance

  • Shared TaskGroup enum + classifier module used by every discovery provider
  • GNU standard Make target names classify correctly (see table above)
  • VS Code tasks honour their native group field
  • Mise : namespaces become groups
  • Variables like COVERAGE_THRESHOLDS_FILE and UNAME no longer appear as Make "targets" (separate filtering fix in src/discovery/make.ts)
  • E2E test asserts that, given a fixture Makefile with all, clean, distclean, check, install, they land in Build / Clean / Clean / Test / Install respectively
  • E2E test asserts grouping is identical in structure for a fixture package.json, Justfile, and mise.toml with equivalent tasks

References

Ngôn ngữ chính
TypeScript
Star
3
Fork
2
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

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 Nimblesite/CommandTree

Tất cả issue của Nimblesite/CommandTree

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.