Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

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

Aberta
#18 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
38/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Pouca atividade
Stack de tecnologia
typescript

Direção de pesquisa

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.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

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

Linguagem predominante
TypeScript
Estrelas
3
Forks
2
Métricas de merge de PRs
Nenhum PR com merge em 30d

Preparar o ambiente

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de Nimblesite/CommandTree

Todas as issues de Nimblesite/CommandTree

Issues semelhantes

Mais issues de TypeScript

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.