更好的预提交,用 Rust 重构。
Better pre-commit, re-engineered in Rust

原始链接: https://prek.j178.dev/

## prek:pre-commit 的更快替代方案 prek 是一个基于 Rust 的新框架,旨在作为流行的 `pre-commit` 工具的直接替代品。它旨在通过**更快、无依赖**和提供增强的功能来改进 `pre-commit`。 主要优势包括一个**单个、自包含的二进制文件**(无需 Python),通过共享工具链和并行处理实现**显著的速度提升**和**减少磁盘空间使用**。prek 保持与现有 `pre-commit` 配置和钩子的**完全兼容性**,并添加了对**单仓库**的内置支持以及通过 `uv` 进行高效 Python 环境管理。 目前为 Airflow 等项目提供支持,prek 通过诸如目标目录运行 (`prek run --directory`)、上次提交检查 (`prek run --last-commit`) 以及改进的钩子列表和选择等功能,改善了用户体验。虽然仍在开发中(某些功能缺失),但 prek 对于那些寻求更高效和简化的 pre-commit 工作流程的人来说是一个有希望的替代方案。

Hacker News 新闻 | 过去 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 更好的 pre-commit,用 Rust 重构 (j178.dev) 7 分,由 nikolay 1 小时前发布 | 隐藏 | 过去 | 收藏 | 1 条评论 nikolay 1 小时前 [–] https://github.com/j178/prekreply 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:
相关文章

原文

pre-commit is a framework to run hooks written in many languages, and it manages the language toolchain and dependencies for running the hooks.

prek is a reimagined version of pre-commit, built in Rust. It is designed to be a faster, dependency-free and drop-in alternative for it, while also providing some additional long-requested features.

Note

Although prek is pretty new, it’s already powering real‑world projects like Airflow, and more projects are picking it up—see Who is using prek?. If you’re looking for an alternative to pre-commit, please give it a try—we’d love your feedback!

Please note that some subcommands and languages are still missing for full drop‑in parity with pre-commit. Track the remaining gaps here: TODO.

Features

  • 🚀 A single binary with no dependencies, does not require Python or any other runtime.
  • Faster than pre-commit and more efficient in disk space usage.
  • 🔄 Fully compatible with the original pre-commit configurations and hooks.
  • 🏗️ Built-in support for monorepos (i.e. workspace mode).
  • 🐍 Integration with uv for managing Python virtual environments and dependencies.
  • 🛠️ Improved toolchain installations for Python, Node.js, Go, Rust and Ruby, shared between hooks.
  • 📦 Built-in Rust-native implementation of some common hooks.

Why prek?

prek is faster

  • It is multiple times faster than pre-commit and takes up half the disk space.
  • It redesigned how hook environments and toolchains are managed, they are all shared between hooks, which reduces the disk space usage and speeds up the installation process.
  • Repositories are cloned in parallel, and hooks are installed in parallel if their dependencies are disjoint.
  • It uses uv for creating Python virtualenvs and installing dependencies, which is known for its speed and efficiency.
  • It implements some common hooks in Rust, built in prek, which are faster than their Python counterparts.

prek provides a better user experience

  • No need to install Python or any other runtime, just download a single binary.
  • No hassle with your Python version or virtual environments, prek automatically installs the required Python version and creates a virtual environment for you.
  • Built-in support for workspaces (or monorepos), each subproject can have its own .pre-commit-config.yaml file.
  • prek run has some nifty improvements over pre-commit run, such as:
  • prek run --directory <dir> runs hooks for files in the specified directory, no need to use git ls-files -- <dir> | xargs pre-commit run --files anymore.
  • prek run --last-commit runs hooks for files changed in the last commit.
  • prek run [HOOK] [HOOK] selects and runs multiple hooks.
  • prek list command lists all available hooks, their ids, and descriptions, providing a better overview of the configured hooks.
  • prek provides shell completions for prek run <hook_id> command, making it easier to run specific hooks without remembering their ids.

For more detailed improvements prek offers, take a look at Difference from pre-commit.

Who is using prek?

prek is pretty new, but it is already being used or recommend by some projects and organizations:

Getting Started

联系我们 contact @ memedata.com