Skip to content

feat(bin-paths): add executable names output#9617

Merged
jdx merged 4 commits intojdx:mainfrom
risu729:feat/bin-paths-json
May 6, 2026
Merged

feat(bin-paths): add executable names output#9617
jdx merged 4 commits intojdx:mainfrom
risu729:feat/bin-paths-json

Conversation

@risu729
Copy link
Copy Markdown
Contributor

@risu729 risu729 commented May 5, 2026

I want to test the lazy-install approach discussed before; I think we need this.

Summary

  • add mise bin-paths --bin-names to emit executable names from active bin directories
  • keep default text output as bin directories
  • make mise bin-paths --json / -J imply --bin-names and emit executable entries with name, path, and symlink
  • preserve tool-specific filtering for both text and JSON entry output
  • regenerate CLI usage docs, manpage, and Fig completion spec

Examples

Default text output still prints bin directories:

$ mise bin-paths python
/home/risu/.local/share/mise/installs/python/3.14.4/bin

Use --bin-names to print executable names:

$ mise bin-paths node --bin-names
corepack
node
npm
npx

JSON output implies --bin-names and includes the executable name, full path, and symlink status:

$ mise bin-paths node --json
[
  {
    "name": "corepack",
    "path": "/home/risu/.local/share/mise/installs/node/24.0.0/bin/corepack",
    "symlink": true
  },
  {
    "name": "node",
    "path": "/home/risu/.local/share/mise/installs/node/24.0.0/bin/node",
    "symlink": false
  },
  {
    "name": "npm",
    "path": "/home/risu/.local/share/mise/installs/node/24.0.0/bin/npm",
    "symlink": true
  },
  {
    "name": "npx",
    "path": "/home/risu/.local/share/mise/installs/node/24.0.0/bin/npx",
    "symlink": true
  }
]

Context

Testing

  • mise run test:e2e cli/test_bin_paths
  • mise run render:usage
  • mise run render:mangen
  • mise run render:fig
  • cargo clippy --all-features --all-targets -- -D warnings
  • mise run lint
  • git diff --check

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented May 5, 2026

Greptile Summary

This PR adds --bin-names and --json / -J flags to mise bin-paths, letting callers enumerate individual executables (with name, path, and symlink flag) rather than just directory paths. Existing text output is unchanged.

  • src/cli/bin_paths.rs implements list_bins, which reads each bin directory, filters to executable files (following symlinks but excluding directory-symlinks via path.is_file()), sorts by name then path, and deduplicates exact (name, path) pairs.
  • E2E tests cover the new flags, symlink detection, non-executable exclusion, and directory-symlink exclusion.
  • Docs, man page, usage KDL, and the Fig completion spec are regenerated.

Confidence Score: 5/5

Safe to merge; the change is additive and does not alter any existing output paths.

The new flags are purely additive — the existing plain-path output is untouched. The filtering logic (executable check, directory-symlink guard via path.is_file()) is correct and exercised by the new e2e tests. The clap default_value_if idiom for implying --bin-names from --json is idiomatic. No regressions are expected.

No files require special attention.

Reviews (4): Last reviewed commit: "feat(bin-paths): add executable names ou..." | Re-trigger Greptile

Comment thread src/cli/bin_paths.rs Outdated
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request adds a --json flag to the mise bin-paths command, allowing executable entries to be output in JSON format. The update includes corresponding documentation, CLI usage specifications, and new E2E tests. Feedback focused on improving the list_bins implementation by refining directory checks, enhancing error handling during file traversal, and optimizing the sequence of file type and executable validations.

Comment thread src/cli/bin_paths.rs Outdated
@risu729

This comment was marked as outdated.

@risu729 risu729 changed the title feat(bin-paths): add json executable listing feat(bin-paths): add executable names output May 5, 2026
@risu729 risu729 marked this pull request as ready for review May 6, 2026 12:06
@jdx jdx merged commit ba56963 into jdx:main May 6, 2026
38 checks passed
@risu729 risu729 deleted the feat/bin-paths-json branch May 6, 2026 23:38
mise-en-dev added a commit that referenced this pull request May 7, 2026
### 🚀 Features

- **(aqua)** support registry libc variants by @jdx in
[#9652](#9652)
- **(bin-paths)** add executable names output by @risu729 in
[#9617](#9617)

### 🐛 Bug Fixes

- **(aqua)** preserve configured file extensions by @risu729 in
[#9611](#9611)
- **(aqua)** support registry file links by @risu729 in
[#9610](#9610)
- **(backend)** reject bare package backend names by @risu729 in
[#9608](#9608)
- **(backend)** apply inline tool option overrides by @risu729 in
[#9306](#9306)
- **(backend)** skip versions host for local tool opts by @risu729 in
[#9568](#9568)
- **(github)** chmod explicit archive bin by @risu729 in
[#9609](#9609)
- **(install)** skip remote-versions refresh in prefer-offline mode by
@jdx in [#9627](#9627)
- **(lock)** scope targets to active project root by @risu729 in
[#9319](#9319)
- **(lockfile)** respect existing platforms during auto-lock by @jdx in
[#9621](#9621)
- **(pipx)** filter yanked pypi releases by @risu729 in
[#9607](#9607)
- **(pipx)** declare python as a backend dependency by @jdx in
[#9678](#9678)
- **(schema)** update refs to $defs in mise-registry-tool.json by
@risu729 in [#9671](#9671)
- **(task)** terminate parallel siblings on failure via process groups
by @jdx in [#9655](#9655)
- **(task)** stable MISE_PROJECT_ROOT for monorepo tasks, add
MISE_MONOREPO_ROOT by @jdx in
[#9657](#9657)
- **(trust)** run enter hooks after trusting config by @risu729 in
[#9634](#9634)
- **(ui)** stop clearing screen for prompts by @jdx in
[#9619](#9619)
- use /bin/cp on macos by @pdehlke in
[#9656](#9656)

### 🚜 Refactor

- **(aqua)** store aqua var defaults as strings by @risu729 in
[#9645](#9645)
- **(config)** support structured TOML values in registry backend
options by @risu729 in [#9584](#9584)
- **(deps)** remove serde_derive dependency by @risu729 in
[#9670](#9670)
- **(deps)** remove anyhow dependency by @risu729 in
[#9661](#9661)
- **(deps)** use std::sync::LazyLock instead of once_cell::Lazy by
@risu729 in [#9668](#9668)
- **(schema)** generate task schema from mise schema by @risu729 in
[#9581](#9581)
- **(schema)** reuse task props with unevaluatedProperties by @risu729
in [#9582](#9582)
- **(schema)** reuse registry common types by @risu729 in
[#9648](#9648)
- **(schema)** reuse plugin script config by @risu729 in
[#9647](#9647)
- **(schema)** use $defs in schema files by @risu729 in
[#9646](#9646)

### 📚 Documentation

- **(node)** add tips for enabling node idiomatic by @fu050409 in
[#9675](#9675)

### 🧪 Testing

- **(cli)** remove nondeterministic tool depends assertion by @risu729
in [#9633](#9633)
- **(e2e)** pin uv to 0.11.8 around astral-sh/uv#19278 by @jdx in
[#9618](#9618)
- **(e2e)** wait for docker env cleanup by @risu729 in
[#9631](#9631)
- **(zig)** use official zig instead of mach mirror by @jdx in
[#9659](#9659)

### 📦️ Dependency Updates

- fall through to hash check when providers have no outputs by @jdx in
[#9622](#9622)
- bump Cargo.lock by @jdx in
[#9625](#9625)

### 📦 Registry

- remove registry depends by @risu729 in
[#9571](#9571)
- add code-review-graph (pipx:code-review-graph) by @chautruonglong in
[#9673](#9673)

### Chore

- **(ci)** split large registry test-tool changes by @risu729 in
[#9628](#9628)
- **(ci)** make perf script robust to runner noise by @jdx in
[#9635](#9635)
- **(ci)** skip hyperfine comments without permission by @risu729 in
[#9629](#9629)

### New Contributors

- @chautruonglong made their first contribution in
[#9673](#9673)
- @pdehlke made their first contribution in
[#9656](#9656)

## 📦 Aqua Registry Updates

### New Packages (5)

-
[`anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli)
- [`crates.io/wasmi_cli`](https://github.com/wasmi-labs/wasmi)
- [`openclaw/gogcli`](https://github.com/openclaw/gogcli)
- `racket-lang.org/racket-minimal`
- [`runs-on/cli`](https://github.com/runs-on/cli)

### Updated Packages (13)

- [`UpCloudLtd/upcloud-cli`](https://github.com/UpCloudLtd/upcloud-cli)
- [`aristocratos/btop`](https://github.com/aristocratos/btop)
- [`dprint/dprint`](https://github.com/dprint/dprint)
- [`j178/prek`](https://github.com/j178/prek)
- [`jdx/hk`](https://github.com/jdx/hk)
- [`jdx/mise`](https://github.com/jdx/mise)
- [`jdx/usage`](https://github.com/jdx/usage)
- [`jreleaser/jreleaser`](https://github.com/jreleaser/jreleaser)
-
[`jreleaser/jreleaser/standalone`](https://github.com/jreleaser/jreleaser)
- [`pnpm/pnpm`](https://github.com/pnpm/pnpm)
- [`suzuki-shunsuke/cmdx`](https://github.com/suzuki-shunsuke/cmdx)
- [`suzuki-shunsuke/ghir`](https://github.com/suzuki-shunsuke/ghir)
- [`twpayne/chezmoi`](https://github.com/twpayne/chezmoi)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants