Repository navigation
fix(env): call fish built-ins with builtin in env.fish - #3353
Conversation
User functions named like fish built-ins replaced them in env.fish. A user count function made vp env use report success without setting VP_NODE_VERSION. Closes voidzero-dev#3128
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Nice work! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
|
Maybe we should wait for #3354 to be merged first and then do a final check on this PR just to be safe. |
|
I merged All 3 I also ran a manual check with the debug
$ builtin source <tmp>/env.fish
-> status=0
$ vp env use 20.20.2 --no-install
Using Node.js v20.20.2 (resolved from 20.20.2)
-> status=0
VP_NODE_VERSION=20.20.2
$ vp env use --help >/dev/null
-> status=0
VP_NODE_VERSION=20.20.2 (expected: unchanged)
$ vp -C . env use 22.23.4 --no-install
Using Node.js v22.23.4 (resolved from 22.23.4)
-> status=0
VP_NODE_VERSION=22.23.4
$ complete -C 'vpr '
build vite build
test:e2e playwright test
test:unit vitest run
$ complete -C 'vpr test\:u'
test:unit vitest run
$ count a b c
0 |
Vite+ 1.5.1 checks managed package-manager downloads against the integrity hash in `packageManager`, restores interactive input in `vp run` tasks, fixes `vp migrate` config merges, and adds a reference page for each package command. ### Features - Vite+ checks a downloaded pnpm, Yarn 2+, or bun against the integrity hash in the project's `packageManager` field instead of the hash that the registry reports, and rejects a download that does not match. Mirrors and private registries that serve the same package still pass. Each pinned version gets its own cache directory, so a project with a pinned package manager downloads it once more after the upgrade. Unpinned installs keep their current location ([#3400](#3400)), by @fengmk2 and @arkmarta. - Upgrade the bundled Vite and Rolldown ([#3390](#3390)), by @voidzero-guard[bot] and @fengmk2: - `vite@8.3.5` to `vite@8.3.7`. A pnpm install no longer turns every cached build into a cache miss, because Vite tells Vite Task to ignore `node_modules/.modules.yaml`. It also fixes named imports from Node.js built-ins and reloads in bundled dev mode, subpath imports (`#`) in the dependency optimizer, SSR builds with `build.ssr: true`, and chunks shared with workers. - `rolldown@1.2.16` to `rolldown@1.2.18`, with module source maps that keep only the sources and names that they trace. - `@voidzero-dev/vite-plus-core` requires `postcss@^8.5.32`, as the bundled Vite does. ### Fixes & Enhancements - Scripts that `vp run` starts get a blocking stdin again when the `run` block of `vite.config.ts` is not statically analyzable (for example, a task command held in a constant), so interactive prompts such as `vp update --interactive` wait for input instead of failing with `EAGAIN` ([#3361](#3361)), by @everton-dgn. - `vp migrate` changes only the `return` statements of a `defineConfig` callback, so functions inside the config, such as Rolldown `codeSplitting.groups[].name` callbacks, keep their return values and the build no longer fails. When a callback return cannot receive the merged settings, migration keeps the standalone config files and asks for a manual merge. Pack and task cache migration also recognize configs wrapped in parentheses, `as`, `satisfies`, `<T>`, or `!` ([#3325](#3325), [#3372](#3372)), by @jong-kyung. - `vp create react-router` passes `--no-git-init` to `create-react-router`, so the generator's initial commit no longer stops the Vite+ setup when no Git identity is configured ([#3363](#3363)), by @chbaefront. - `env.fish` calls fish built-ins through `builtin`, so `vp env use` changes the Node.js version even when a user function has the name of a built-in such as `count` ([#3353](#3353)), by @naokihaba. - Shell completion suggests full command names before aliases, so `vp i<Tab>` offers `install` and `vp up<Tab>` offers `update`. An alias stays available when no full name matches ([#3337](#3337)), by @nekomoyi. - Completion for `vp run` and `vpr` skips comment keys such as `"# docs #"` in `package.json` scripts, matches task names that contain `:`, and shows each task's command as its description in Zsh and Fish ([#3354](#3354)), by @nekomoyi. - `vp pm dist-tag rm` works with Yarn Berry, because Vite+ passes `remove` to `yarn npm tag` ([#3358](#3358)), by @jong-kyung. - A package-manager version that resolves through a dist-tag, such as `pnpm@latest` in `vp env use`, must be a valid semver version. Vite+ rejects any other registry reply with an error, including a version with surrounding whitespace ([#3395](#3395)), by @fengmk2 and @arkmarta. ### Docs - Add a Package Management section to the guide, with a reference page for each of the 38 package commands that lists its options, package-manager support, version requirements, and npm fallbacks. Help output for package commands and the old package management and install URLs point to the new pages ([docs](https://viteplus.dev/guide/package-management/)) ([#3105](#3105)), by @jong-kyung. - Show the README logo that matches the GitHub theme, so the logo stays visible after a theme change ([#3350](#3350)), by @fengmk2. ### Chore - Build Linux native bindings against the napi-cross glibc 2.17 sysroot with `@napi-rs/cli@3.10.12`, let the linker reject unresolved symbols, and run Linux CI on `ubuntu-latest` again. Let the dependency upgrade workflow change workflow files ([#3349](#3349), [#3384](#3384)), by @fengmk2. - Refine contributor guidance: `AGENTS.md` separates the `vite-plus` package from the global `vp` CLI and replaces `CLAUDE.md`, and the Node.js version RFCs describe `.nvmrc` support ([#3388](#3388), [#3383](#3383)), by @liangmiQwQ and @hyunbinseo. - Resolve the docs theme aliases from `import.meta.dirname`, so the docs dev server no longer warns about `__dirname` ([#3379](#3379)), by @liangmiQwQ. - Fold the `.node-version` parse tests into one table ([#3355](#3355)), by @Brooooooklyn. ### Bundled Versions | Tool | Version | Source | Changelog | | --------------- | ---------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | vite | `8.3.7` | [`5def936`](vitejs/vite@5def936) | [8.3.6](https://github.com/vitejs/vite/releases/tag/v8.3.6), [8.3.7](https://github.com/vitejs/vite/releases/tag/v8.3.7) | | rolldown | `1.2.18` | [`f9a49d6`](rolldown/rolldown@f9a49d6) | [1.2.18](https://github.com/rolldown/rolldown/releases/tag/v1.2.18) | | oxc-node | `1.0.1` | [`7ff14c3`](oxc-project/oxc-node@7ff14c3) | unchanged | | tsdown | `0.23.4` | [npm](https://npmx.dev/package/tsdown/v/0.23.4) | unchanged | | vitest | `5.1.0` | [npm](https://npmx.dev/package/vitest/v/5.1.0) | unchanged | | oxlint | `1.91.0` | [npm](https://npmx.dev/package/oxlint/v/1.91.0) | unchanged | | oxlint-tsgolint | `7.0.2005` | [npm](https://npmx.dev/package/oxlint-tsgolint/v/7.0.2005) | unchanged | | oxfmt | `0.76.0` | [npm](https://npmx.dev/package/oxfmt/v/0.76.0) | unchanged | ### Upgrade ```bash vp upgrade ``` ### New Contributors @chbaefront, @everton-dgn **Full Changelog**: v1.5.0...v1.5.1 --- Merging this PR will trigger the release workflow. --------- Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com> Co-authored-by: MK (fengmk2) <fengmk2@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Context
When a user defines a fish function with the name of a built-in,
env.fishcalls the user function instead of the built-in. With a usercountfunction,vp env usereports success, but the Node.js version does not change.The fish documentation for
functionwarns about this case. It says that a function with the name of a built-in often causes problems "in scripts written by others".env.fishis such a script.This PR adds
builtinto each built-in thatenv.fishcalls:count,math,contains,complete,commandline, andsource.builtinskips functions and runs only the built-in. #3123 did the same for Nushell with the%sigil.This PR does not change the
vpcompletion. clap_complete registers it with barecompleteandcommandline, soenv.fishcannot protect it. fish's own completions also call barecommandline.