Ray 仓库 Lint 技能指南:用 pre-commit 对 Ray 代码完成格式化与质量检查
Ray 仓库 Lint 技能指南用 pre-commit 对 Ray 代码完成格式化与质量检查【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray本篇指南讲解 Ray 开源仓库GitHub 加速计划 / ra / ray的标准 lint 与格式化工作流如何在改动代码后用 pre-commit 快速检查、如何安装 pre-commit 环境、如何分类处理剩余的静态检查错误以及仓库的排除规则与 CI 层面的完整检查清单。读完本文你将能够像 Ray 开发者一样在提交代码前准确运行 Ray 的 lint 工具链并懂得如何利用# noqa、per-file-ignores与extend-exclude机制解决真实的代码质量问题。核心工作流只对本次修改的文件运行 lintRay 仓库把 lint 与格式化检查统一托管在 pre-commit 中。最常用、也最推荐的做法是只针对你本次修改的文件执行检查而不是对全仓库运行后者耗时且噪音大pre-commit run --files $(git diff --name-only HEAD)这条命令的作用分两步理解git diff --name-only HEAD列出工作区相对最近一次提交HEAD有改动的文件路径只包含已修改但尚未提交的文件pre-commit run --files 文件列表让 pre-commit 仅对传入的这些文件执行匹配的 hooks。这里的要点是不带--files的pre-commit run只处理已 staged暂存区的文件。如果你改完代码后还没有git add直接运行pre-commit run会得到一个“没有文件需要检查”的假象问题会漏到提交或 CI 阶段。所以当你的改动还停留在工作区时必须显式传入修改文件列表。Ray 的这份技能文档特意强调这一点它是日常开发中最容易踩的坑之一。安装 pre-commit 环境如果本机尚未安装 pre-commit按仓库约定的依赖锁定方式安装pip install -c python/requirements_compiled.txt pre-commit pre-commit install-c python/requirements_compiled.txt是约束文件constraints file保证 pre-commit 及依赖版本与 Ray 仓库验证过的版本一致pre-commit install会在.git/hooks/pre-commit安装 git 钩子此后每次git commit都会自动触发配置的检查。仓库官方文档 doc/source/ray-contribute/development.md 的 “Development tooling” 一节也给出了同样的安装方式pip install -c python/requirements_compiled.txt pre-commit pre-commit install并在该节说明若临时不想触发检查可在提交时使用git commit -n等价于--no-verify跳过 hooks。Ray 的检查体系全景.pre-commit-config.yamlRay 仓库根目录的 .pre-commit-config.yaml 是全部 lint/format 检查的唯一配置入口通过多个独立 repo 的 hooks 组合覆盖 Python、C、Java、TypeScript、Bazel、Shell、文档等几乎所有文件类型Hook版本作用范围files 字段用途trailing-whitespace / end-of-file-fixer / check-added-large-files / check-ast / check-json / check-tomlpre-commit-hooks v4.4.0全局含特定 exclude基础文件卫生尾随空白、文件末尾换行、大文件、AST 语法、JSON/TOML 合法ruff默认 --select I两段ruff-pre-commit v0.8.4全局Python lint 自动修复 isort 导入排序pydoclint0.8.3^python/ray/Google 风格 docstring 检查基线见 ci/lint/pydoclint-baseline.txtcpplint2.0.0^src/ray/(gcs/actor\|common/cgroup2\|...)/.*\.(h\|cc)$C 风格检查通过--filter关闭了一部分噪音规则buildifier / buildifier-lint8.0.1BUILD(.bazel)?文件Bazel BUILD 文件格式化与 lintblack22.10.0PythonPython 代码格式化prettierv3.0.3doc/下的 js/ts/tsx/html/css前端与文档代码格式化mypy两组v1.7.0autoscaler 相关文件 serve 白名单静态类型检查pyrefly-servelocal hookpyrefly1.1.1serve 白名单与 mypy 互补的第二套类型检查pygrep-hooksv1.10.0Python/rSTrst 指令、log.warn、mock 方法误用等shellcheckv0.9.0.1ShellShell 脚本检查--exclude1090,1091,2207兼容 macOS 旧 bashclang-formatv12.0.1C/CC 格式化pretty-format-javav2.11.0JavaJava 格式化google-java-formatter 1.7docstylelocal—Python调用 ci/lint/check-docstyle.sh 检查 Ray docstring 风格check-import-orderlocal—Python调用 ci/lint/check_import_order.py按 Ray 自己的 import 顺序规范检查check-cpp-files-inclusionlocal—^src/ray/C检查 C 文件包含合规check-train-circular-importslocal—^python/ray/train/.*\.py$检查 Ray Train 循环导入eslintv8.26.0dashboard client ts/tsx前端代码检查--max-warnings0valev3.17.1^doc/source/data/.*\.(md\|rst)$文档文风检查顶层 exclude哪些目录不做全局检查配置开头用一个大的exclude正则划定了不参与检查的路径包括python/ray/core/generated/、python/ray/serve/generated/、python/ray/cloudpickle/生成的 protobuf 代码与第三方 vendored 代码python/ray/dashboard/client/public/、python/ray/_private/runtime_env/_clonevirtualenv.py构建产物与临时脚本python/ray/data/examples/data/、release/release_logs/、rllib/offline/tests/data数据与日志目录thirdparty/patches/、python/requirements/llm/patches/、src/ray/thirdparty/补丁与第三方源码doc/source/除doc/source/data下的 md/rst 与 BUILD 文件文档 prose 默认不做通用 lint只交给 vale 等专门的 hook。注意 pre-commit 的机制顶层exclude与每个 hook 自身的files/exclude是“与”关系所以像trailing-whitespace这类全局 hook 在doc/source/data上会额外再排除配置注释里解释了原因如果不去掉启用 vale 时会连带重写 17 个无关文件属于刻意保持的配置边界。理解这层机制有助于判断一个文件“没被检查”到底是配置有意为之还是你的改动路径恰好被过滤了。处理剩余的 lint 错误pre-commit 中配置为自动修复的 hooks如 ruff、black、trailing-whitespace会直接改写你的文件。运行后仍报错的基本都是需要人工介入的逻辑性问题常见的几类缺失 import代码用到了某个符号但没有导入需要补import名称冲突局部变量遮蔽了内置名或模块级符号需要重命名或显式引用逻辑结构调整例如复杂条件、不规范的异常处理ruff 的 B 系列规则等需要按提示重构代码。处理原则是直接修改源码本身而不是绕过检查。# noqa的正确用法只有当问题属于“误报且无法通过改代码解决”时才使用# noqa并且必须带上规则代码和理由# noqa: E501 — URL cannot be splitE501是规则码行过长后面跟原因说明理由要真实可查例如“该 URL 无法断行”而不是空白注释滥用# noqa会掩盖真实问题Ray 的 lint 流程在 CI 上使用--show-diff-on-failure任何被掩盖的问题最终都会在审查与测试阶段暴露。排除机制pyproject.toml 中的 per-file-ignores 与 extend-excludeRay 把 Python 相关的豁免集中在 pyproject.toml[tool.ruff]段的extend-exclude列出整棵被跳过的目录/文件例如python/ray/thirdparty_files/、python/ray/_private/thirdparty/、python/build/以及个别故意保留语法错误的测试文件python/ray/serve/tests/test_config_files/syntax_error.py[tool.ruff.lint.per-file-ignores]按文件路径忽略特定规则例如doc/* [I]文档目录跳过 isort 导入排序、python/ray/__init__.py [I]注释里说明这些是“尚未格式化完成、将逐步从黑名单移除”的存量豁免[tool.ruff]同时定义了line-length 88、extend-select [I, B, Q, C4, W]以及一套ignore列表多为从原 flake8 迁移来的规则还有 isort 的section-order与known-third-party等导入排序语义。技能文档给出的处理原则非常清晰当你的 PR 恰好修改了位于这些列表中的文件时应当在你的改动范围内把 lint 问题修干净并考虑把该文件从豁免列表中移除但不要动那些与本次 PR 无关的豁免条目。这样既能逐步收敛存量技术债又不会让一次代码评审背上无关的改动。从本地到 CI完整的 lint 流水线本地 pre-commit 只是第一道关卡。Ray 的 CI 通过 ci/lint/lint.sh 对全仓库运行完整检查脚本中的pre_commit()函数显式列出了约 22 个 hook 并按顺序执行pre-commit run hook --all-files --show-diff-on-failure包括python-no-log-warn、ruff、check-ast、black、prettier、mypy、pyrefly-serve、clang-format、shellcheck、docstyle、check-import-order、check-cpp-files-inclusion、cpplint、buildifier、eslint等pre_commit_pydoclint()单独运行 pydoclintclang_format()和code_format()则分别负责 C 格式与 Shell 脚本格式的检查。这也解释了为什么本地提交前把文件级检查跑通能显著降低 CI 返工率。参考与延伸阅读Hook 配置总入口.pre-commit-config.yamlRuff 与 mypy 的 Python 配置pyproject.toml[tool.ruff]、[tool.mypy]段CI 全量 lint 脚本ci/lint/lint.sh导入顺序检查实现ci/lint/check_import_order.py支持-s/--skip跳过目录CI 中跳过ci、python/ray/thirdparty_files、python/build、libdocstring 基线文件ci/lint/pydoclint-baseline.txt官方开发工具章节doc/source/ray-contribute/development.md“Development tooling”在实际使用中建议把“pre-commit run --files $(git diff --name-only HEAD)”固化成提交前的肌肉记忆先跑文件级检查、再按错误类型分类处理自动修复 → 改源码 → 必要时带理由的# noqa、最后确认没有把无关文件拖进豁免改动——这条工作流既能保证 Ray 代码库的整洁也能让你的每次提交都经得起 CI 的完整检查。【免费下载链接】rayRay is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.项目地址: https://gitcode.com/gh_mirrors/ra/ray创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于 kNN 边距的可审计嵌入证据信号:agent-governance-toolkit 默认关闭、仅证据型 Prompt Injection 检测模块全解析

基于 kNN 边距的可审计嵌入证据信号:agent-governance-toolkit 默认关闭、仅证据型 Prompt Injection 检测模块全解析

基于 kNN 边距的可审计嵌入证据信号:agent-governance-toolkit 默认关闭、仅证据型 Prompt Injection 检测模块全解析 【免费下载链接】agent-governance-toolkit AI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, …

2026/9/19 8:20:43 阅读更多 →
Embeddings技术与向量数据库实战解析

Embeddings技术与向量数据库实战解析

1. 从文本到向量:Embeddings技术解析第一次接触Embeddings这个概念是在处理自然语言处理项目时。当时我们需要让计算机理解用户输入的搜索关键词,但传统的字符串匹配方式效果很差。直到尝试将文本转化为向量表示,才发现语义搜索的威力——即使…

2026/9/19 8:20:43 阅读更多 →
PPT Master 使用教程:让 AI 生成的 PPT 真的能在 PowerPoint 里编辑

PPT Master 使用教程:让 AI 生成的 PPT 真的能在 PowerPoint 里编辑

PPT Master 使用教程:让 AI 生成的 PPT 真的能在 PowerPoint 里编辑 【免费下载链接】ppt-master AI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations, data-backed charts and tables on demand, …

2026/9/19 8:20:43 阅读更多 →

最新新闻

Edge图片加载失败的四大根因与工程化解决方案

Edge图片加载失败的四大根因与工程化解决方案

1. 这不是Bug,是Edge在“认真执行规则”——从一张图片加载失败说起你刚打开一个网页,页面主体文字都出来了,唯独那张本该放在标题下方的Banner图,只留下一个灰色方框加个破碎图标;或者更隐蔽些:整页图文混…

2026/9/19 9:17:10 阅读更多 →
苹果CMS源码搭建韩剧TV视频站全流程解析:从环境到合规

苹果CMS源码搭建韩剧TV视频站全流程解析:从环境到合规

做视频站这几年,苹果CMS确实是个绕不开的名字。国内很多影视站、短视频站、甚至企业门户背后跑的都是这套PHP程序,生态成熟、模板丰富,尤其“采集站”这个玩法更是让它在站长圈里几乎成了标配。不过说句实在话,真正能把苹果CMS用得…

2026/9/19 9:17:10 阅读更多 →
Ryujinx 模拟器上手:3 步装好 Switch 游戏,帧率与存档都有说法

Ryujinx 模拟器上手:3 步装好 Switch 游戏,帧率与存档都有说法

Ryujinx 模拟器上手:3 步装好 Switch 游戏,帧率与存档都有说法 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx 是用 C# 写的开源 Switch 游戏模拟器&am…

2026/9/19 9:17:10 阅读更多 →
uni-app x 组件指南:ad-custom 模板广告组件(广告单元、自动刷新与事件回调)

uni-app x 组件指南:ad-custom 模板广告组件(广告单元、自动刷新与事件回调)

uni-app x 组件指南:ad-custom 模板广告组件(广告单元、自动刷新与事件回调) 【免费下载链接】uni-app A cross-platform framework using Vue.js 项目地址: https://gitcode.com/gh_mirrors/un/uni-app 本文以 docs/component/ad-cust…

2026/9/19 9:17:10 阅读更多 →
Jekyll 4.0.0.pre.beta1 预发布详解:破坏性变更、安装与升级实战指南

Jekyll 4.0.0.pre.beta1 预发布详解:破坏性变更、安装与升级实战指南

Jekyll 4.0.0.pre.beta1 预发布详解:破坏性变更、安装与升级实战指南 【免费下载链接】jekyll :globe_with_meridians: Jekyll is a blog-aware static site generator in Ruby 项目地址: https://gitcode.com/gh_mirrors/je/jekyll 本文以 Jekyll 官方在 201…

2026/9/19 9:17:10 阅读更多 →
React Native在OpenHarmony实现拖拽排序的实践

React Native在OpenHarmony实现拖拽排序的实践

1. 项目背景与核心价值在跨平台移动应用开发中,列表数据的拖拽排序是一个高频需求场景。传统方案往往需要针对iOS和Android平台分别实现,而React Native与OpenHarmony的结合为开发者提供了全新的技术路径。这个项目演示了如何基于React Native框架&#…

2026/9/19 9:16:09 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →