Hacktoberfest 2026:維護者為十月標記出來的 issue,仍然開放、適合新手。 瀏覽 Hacktoberfest issue

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

未關閉
#18 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

評估

難度
5/5
預估耗時
一週以上
新手友好度
38/100
Issue 類型
功能
描述清晰度
基本清楚
活躍度
冷清
技術堆疊
typescript

研究方向

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.

由索引模型根據 Issue 內容生成。

描述

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

主要語言
TypeScript
星號
3
分支
2
PR 合併指標
30 天內沒有已合併 PR

環境準備

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

Nimblesite/CommandTree 的其他 Issue

查看 Nimblesite/CommandTree 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。