浏览代码

feat(uv): add `uv` plugin (#12702)

The uv plugin adds shell completions and many useful aliases.
Sebastian Correa 1 月之前
父节点
当前提交
d59f2fac36
共有 2 个文件被更改,包括 66 次插入0 次删除
  1. 28 0
      plugins/uv/README.md
  2. 38 0
      plugins/uv/uv.plugin.zsh

+ 28 - 0
plugins/uv/README.md

@@ -0,0 +1,28 @@
+# uv plugin
+
+This plugin automatically installs [uv](https://github.com/astral-sh/uv)'s completions for you, and keeps them up to date. It also adds convenient aliases for common usage.
+
+To use it, add `uv` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... uv)
+```
+
+## Aliases
+
+| Alias | Command                                                                 | Description                                                          |
+|:----- |------------------------------------------------------------------------ |:-------------------------------------------------------------------- |
+| uva   | `uv add`                                                                | Add packages to the project                                          |
+| uvexp | `uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet` | Export the lock file to `requirements.txt`          |
+| uvl   | `uv lock`                                                               | Lock the dependencies                                                |
+| uvlr  | `uv lock --refresh`                                                     | Rebuild the lock file without upgrading dependencies                 |
+| uvlu  | `uv lock --upgrade`                                                     | Lock the dependencies to the newest compatible versions              |
+| uvp   | `uv pip`                                                                | Manage pip packages                                                  |
+| uvpy  | `uv python`                                                             | Manage Python installs                                               |
+| uvr   | `uv run`                                                                | Run commands within the project's environment                        |
+| uvrm  | `uv remove`                                                             | Remove packages from the project                                     |
+| uvs   | `uv sync`                                                               | Sync the environment with the lock file                              |
+| uvsr  | `uv sync --refresh`                                                     | "Force" sync the environment with the lock file (ignore cache)       |
+| uvsu  | `uv sync --upgrade`                                                     | Sync the environment, allowing upgrades and ignoring the lock file   |
+| uvup  | `uv self update`                                                        | Update the UV tool to the latest version                             |
+| uvv   | `uv venv`                                                               | Manage virtual environments                                          |

+ 38 - 0
plugins/uv/uv.plugin.zsh

@@ -0,0 +1,38 @@
+# Return immediately if uv is not found
+if (( ! ${+commands[uv]} )); then
+  return
+fi
+
+alias uva='uv add'
+alias uvexp='uv export --format requirements-txt --no-hashes --output-file requirements.txt --quiet'
+alias uvl='uv lock'
+alias uvlr='uv lock --refresh'
+alias uvlu='uv lock --upgrade'
+alias uvp='uv pip'
+alias uvpy='uv python'
+alias uvr='uv run'
+alias uvrm='uv remove'
+alias uvs='uv sync'
+alias uvsr='uv sync --refresh'
+alias uvsu='uv sync --upgrade'
+alias uvup='uv self update'
+alias uvv='uv venv'
+
+# If the completion file doesn't exist yet, we need to autoload it and
+# bind it. Otherwise, compinit will have already done that.
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_uv" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _uv
+  _comps[uv]=_uv
+fi
+
+if [[ ! -f "$ZSH_CACHE_DIR/completions/_uvx" ]]; then
+  typeset -g -A _comps
+  autoload -Uz _uvx
+  _comps[uvx]=_uvx
+fi
+
+# uv and uvx are installed together (uvx is an alias to `uv tool run`)  
+# Overwrites the file each time as completions might change with uv versions.
+uv generate-shell-completion zsh >| "$ZSH_CACHE_DIR/completions/_uv" &|
+uvx --generate-shell-completion zsh >| "$ZSH_CACHE_DIR/completions/_uvx" &|