feat(config): parse registry idiomatic version files - #11341
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRegistry idiomatic files now support string or structured entries with version parsers. Schemas, TOML parsing, code generation, backend discovery and parsing, registry entries, tests, and documentation were updated. ChangesRegistry idiomatic files
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant Backend
participant Registry
participant IdiomaticFile
participant VersionParser
Backend->>Registry: Find matching idiomatic file specification
Registry-->>Backend: Return path and parser fields
Backend->>IdiomaticFile: Read configured file
IdiomaticFile-->>Backend: Return file contents
Backend->>VersionParser: Parse contents with registry parser
VersionParser-->>Backend: Return parsed versions
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Greptile SummaryRegistry idiomatic-version files now support structured parser metadata and nested-path matching.
Confidence Score: 5/5The PR appears safe to merge. No blocking failure remains; the previously reported nested-directory parser bypass is fixed by preserving full discovered paths and matching structured registry entries with path-component-aware suffix selection. Important Files Changed
Reviews (9): Last reviewed commit: "fix(ci): satisfy clippy for idiomatic fi..." | Re-trigger Greptile |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/backend/mod.rs`:
- Around line 2128-2135: Update both wrappers, including
parse_idiomatic_file_with_options and the surrounding parse flow in the shown
function, to resolve and run a matching configured registry parser before the
native package.json parsing early return. Retain native parsing only when no
parser-bearing registry spec matches, and preserve the existing
parse_registry_idiomatic_file fallback behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Central YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: e337a5c9-803c-47a8-b4e4-3998c5cc1d6d
📒 Files selected for processing (6)
build.rsdocs/configuration.mddocs/contributing.mdschema/mise-registry-tool.jsonsrc/backend/mod.rssrc/registry.rs
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
e2e/backend/test_registry_idiomatic_version_files (1)
14-26: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCover all configured Taskfile filename variants.
This test exercises
Taskfile.ymlandtaskfile.yaml, but the registry also addsTaskfile.yamlandtaskfile.yml. Add assertions for the two missing names so each configured discovery path is verified.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@e2e/backend/test_registry_idiomatic_version_files` around lines 14 - 26, Extend the filename-variant coverage in the test around the existing Taskfile assertions by also creating and validating both missing names, Taskfile.yaml and taskfile.yml. Ensure each variant contains version 3.17 and is checked with the same “mise tool task” assertion flow as the existing files.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@registry/task.toml`:
- Line 4: Update the Taskfile version_regex matcher in the registry entry to
prevent matching across lines: replace newline-permitting prefix components such
as \s* and [^0-9]* with equivalents restricted to horizontal whitespace and
non-newline characters, while preserving the existing version capture and
anchored version: line behavior. Apply the same correction to the related
Taskfile matchers on lines 4–7.
---
Nitpick comments:
In `@e2e/backend/test_registry_idiomatic_version_files`:
- Around line 14-26: Extend the filename-variant coverage in the test around the
existing Taskfile assertions by also creating and validating both missing names,
Taskfile.yaml and taskfile.yml. Ensure each variant contains version 3.17 and is
checked with the same “mise tool task” assertion flow as the existing files.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Central YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: 10e9f418-1a47-4ef1-b60b-2592bb9e6349
📒 Files selected for processing (3)
e2e/backend/test_registry_idiomatic_version_filesregistry/dagger.tomlregistry/task.toml
Hyperfine Performance
|
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.7.14 x -- echo |
16.7 ± 0.8 | 15.4 | 19.9 | 1.00 |
mise x -- echo |
18.3 ± 1.5 | 16.7 | 38.2 | 1.09 ± 0.10 |
mise env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.7.14 env |
16.1 ± 0.8 | 14.7 | 19.4 | 1.00 |
mise env |
17.2 ± 0.8 | 15.9 | 21.1 | 1.07 ± 0.07 |
mise hook-env
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.7.14 hook-env |
16.7 ± 0.8 | 15.3 | 20.9 | 1.00 |
mise hook-env |
18.0 ± 0.9 | 16.6 | 22.6 | 1.08 ± 0.07 |
mise ls
| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |
|---|---|---|---|---|
mise-2026.7.14 ls |
14.4 ± 0.6 | 13.2 | 17.7 | 1.00 |
mise ls |
16.2 ± 1.1 | 14.3 | 22.1 | 1.12 ± 0.09 |
ls measured 12% slower, but the relative uncertainty overlaps the 10% threshold. |
xtasks/test/perf
| Command | mise-2026.7.14 | mise | Variance |
|---|---|---|---|
| install (cached) | 159ms | 174ms | -8% |
| ls (cached) | 62ms | 64ms | -3% |
| bin-paths (cached) | 66ms | 69ms | -4% |
| task-ls (cached) | 88ms | 91ms | -3% |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@registry/cmake.toml`:
- Line 8: Update the version_regex entry in the CMake registry configuration to
capture only the minimum version before an optional CMake policy range, so
cmake_minimum_required(VERSION 3.25...3.28) yields 3.25. If the generated
toolset must include the upper policy bound, handle that separately through
version_expr rather than expanding the capture.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Central YAML (base), Organization UI (inherited)
Review profile: CHILL
Plan: Pro Plus
Run ID: b543df93-f0b8-4b17-84a9-cfe6e85a4b66
📒 Files selected for processing (12)
docs/configuration.mddocs/contributing.mde2e/backend/test_registry_idiomatic_version_filesregistry/chezmoi.tomlregistry/cmake.tomlregistry/earthly.tomlregistry/golangci-lint.tomlregistry/goreleaser.tomlregistry/lefthook.tomlregistry/pixi.tomlregistry/pre-commit.tomlregistry/ruff.toml
🚧 Files skipped from review as they are similar to previous changes (1)
- docs/contributing.md
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 018f41a. Configure here.

Summary
idiomatic_filesentries to defineversion_regex,version_json_path, andversion_exprparser metadataRegistry coverage
This PR adds idiomatic parsing for 11 registry tools:
dagger.json→engineVersionTaskfile.yml/Taskfile.yamlcasing variants →version.chezmoiversionCMakeLists.txt→cmake_minimum_required(VERSION ...)Earthfile→VERSION.config/paths →min_versionpixi.tomlandpyproject.toml→requires-pixi.pre-commit-config.yaml→minimum_pre_commit_versionruff.tomland.ruff.toml→required-versionThe catalog intentionally uses only exact versions, minimum/required versions, or configuration-format majors that are coupled to the compatible CLI major. It avoids unrelated project and schema version fields.
User impact
Users continue opting in per tool:
Existing filename-only entries behave unchanged. Structured parsing runs in-process and does not execute plugin or shell code.
Popularity
Validation
mise run lintmise run lint-fixmise run test:unit— 1,969 passedcargo test registry_idiomatic_filecargo test dynamic_registrymise run test:e2e backend/test_registry_idiomatic_version_files— all 11 tools passedThis pull request was generated by an AI coding assistant.
Summary by CodeRabbit
idiomatic_filesentries (path + optional rules).version_regex,version_json_path, andversion_expr.idiomatic_filesfields.idiomatic_filesshape.Note
Medium Risk
Changes affect config discovery and version resolution across many tools; incorrect regex/JSON paths could mis-resolve versions, though behavior remains opt-in via
idiomatic_version_file_enable_toolsand plain entries stay compatible.Overview
Registry
idiomatic_filescan now be plain paths or tables withversion_regex,version_json_path, andversion_expr(same model as the HTTP backend). Build-time and runtime registry loading both accept the new shape; unknown table keys are rejected.Parsing runs in-process via
version_list::parse_version_listwhen a registry spec defines a parser. Registry parsers take precedence over backend-native idiomatic parsing; entries without parsers still fall back to plain-text or plugin behavior. Path matching uses suffix specificity (e.g. nested.config/goreleaser.yamlover generic names).Discovery no longer keys only on
file_name(): config detection and idiomatic tool resolution match full relative paths and pick the most specific registered filename.Core plugins drop duplicated
_idiomatic_filenamesin favor of centralizedregistry/*.tomlentries (including many language runtimes). New structured parsers are added for tools such as dagger, task, cmake, lefthook, goreleaser, pixi, ruff, and others; yarn gains.yvmrcin idiomatic files.Docs explain registry parsers and minimum/major version semantics; the idiomatic-files table is regenerated from the baked registry via
mise render-help. Schema, contributing guide, unit tests, and an e2e script cover the 11 structured tools.Reviewed by Cursor Bugbot for commit 7e243d6. Bugbot is set up for automated code reviews on this repo. Configure here.