Summary
GNU Make (and by convention, Mise) uses naming conventions to distinguish user-facing targets from internal implementation targets. CommandTree should reflect these conventions in the UI.
Request
a) Sorting: Private targets grouped below public targets
Targets/tasks prefixed with _ are an established community convention for private, internal-use-only recipes — not meant to be invoked directly by the user. They should be rendered in a second sorted group, visually separated from the primary targets.
Layout:
▾ Makefile
build
ci
clean
fmt
lint
setup
test
───────────────── ← divider
_build
_clean
_fmt
_lint
_test_e2e
_test_fsharp
Same convention applies to Mise tasks (mise.toml). Mise has no built-in private task mechanism, but _-prefixed tasks are the de facto community convention (borrowed from Make).
b) Visual de-emphasis: Harder to accidentally tap
Private targets should be rendered in a lower-contrast, dimmed style so they don't compete visually with the primary targets. The goal is: present but obviously secondary — a user shouldn't accidentally tap one.
Suggested treatment:
- Reduced opacity / muted foreground color (e.g.,
text-muted / secondary token)
- Possibly slightly smaller font weight (not smaller size — still legible)
- No bold or accent color
Additional Make Naming Conventions to Handle
While addressing this, here are other GNU Make conventions worth consistent treatment:
| Convention |
Example |
Meaning |
Suggested UI treatment |
_ prefix |
_test_fsharp |
Private/internal helper |
Dimmed, sorted below public |
. prefix |
.PHONY, .DEFAULT, .SILENT |
GNU Make built-in special targets |
Hide entirely — these are not invokable targets |
% pattern rules |
%.o: %.c |
Implicit/pattern rules |
Hide entirely — not directly invocable |
help |
help |
Convention: prints available targets |
Pin to top or highlight as entry point |
| ALL_CAPS |
TAGS |
Metadata/utility targets (rare as targets) |
No special treatment needed unless prefixed |
.PHONY as the canonical source of truth
In well-structured Makefiles, .PHONY declares all non-file targets. CommandTree could use .PHONY membership as a signal that a target is intentionally invokable (and not a file artifact), distinct from internal helper recipes that are often deliberately omitted from .PHONY.
Rationale
- Users shouldn't accidentally run internal recipes (e.g.,
_test_fsharp without the test fixture setup that test provides)
- Visual hierarchy reduces cognitive load — the 5–7 primary targets are what 95% of interactions need
- Following existing conventions (rather than inventing new ones) means projects get the right behavior without any configuration
References
Summary
GNU Make (and by convention, Mise) uses naming conventions to distinguish user-facing targets from internal implementation targets. CommandTree should reflect these conventions in the UI.
Request
a) Sorting: Private targets grouped below public targets
Targets/tasks prefixed with
_are an established community convention for private, internal-use-only recipes — not meant to be invoked directly by the user. They should be rendered in a second sorted group, visually separated from the primary targets.Layout:
Same convention applies to Mise tasks (mise.toml). Mise has no built-in private task mechanism, but
_-prefixed tasks are the de facto community convention (borrowed from Make).b) Visual de-emphasis: Harder to accidentally tap
Private targets should be rendered in a lower-contrast, dimmed style so they don't compete visually with the primary targets. The goal is: present but obviously secondary — a user shouldn't accidentally tap one.
Suggested treatment:
text-muted/secondarytoken)Additional Make Naming Conventions to Handle
While addressing this, here are other GNU Make conventions worth consistent treatment:
_prefix_test_fsharp.prefix.PHONY,.DEFAULT,.SILENT%pattern rules%.o: %.chelphelpTAGS.PHONYas the canonical source of truthIn well-structured Makefiles,
.PHONYdeclares all non-file targets. CommandTree could use.PHONYmembership as a signal that a target is intentionally invokable (and not a file artifact), distinct from internal helper recipes that are often deliberately omitted from.PHONY.Rationale
_test_fsharpwithout the test fixture setup thattestprovides)References