Zed 中配置 Rego(OPA Policy)语言支持:Rego 扩展安装、Regal 语言服务器与规则配置实战
Zed 通过社区维护的 Rego 扩展提供 Open Policy Agent(OPA)策略语言的原生编辑体验,覆盖语法高亮、基于 Regal 语言服务器的诊断/补全与格式化等能力。本文以 Zed 官方语言支持文档 rego.md 为骨架,完整讲解扩展的安装前提、Regal 的接入方式,并逐行剖析 .regal/config.yaml 的规则配置写法,帮助你在 Zed 中搭建一套可落地的 Rego 策略编写与检查工作流。
Rego 在 Zed 中如何获得支持
Zed 的语言支持建立在两层技术上:Tree-sitter 负责语法高亮与基于结构的大纲等功能,Language Server Protocol(LSP) 负责语义级能力(补全、诊断、跳转定义、重构等),详见 配置受支持语言 与 语言支持总览。
Rego 语言本身并未内置在 Zed 核心中,而是由 Rego 扩展(社区维护)提供,其依赖的两大底层组件分别是:
- Tree-sitter 语法解析器:FallenAngel97/tree-sitter-rego,负责 Rego 源码的词法与语法解析;
- 语言服务器:open-policy-agent/regal(即 Regal),负责提供诊断、跳转等 LSP 语义能力。
换句话说,Zed 只负责"容器"(编辑器 + LSP 客户端 + Tree-sitter 解析框架),真正理解 Rego 语义、实施 OPA 风格检查的是 Regal。这决定了下面的安装顺序:先装扩展,再确保 Regal 可用。
安装扩展与准备 Regal 语言服务器
第一步:在 Zed 中安装 Rego 扩展
打开 Extensions(扩展画廊) 面板并安装 Rego 扩展即可。Zed 中打开扩展画廊的方式有:
- 通过命令面板 / 键盘快捷键调用
zed::Extensions; - 或从菜单栏选择 "Zed > Extensions"。
扩展会被安装到系统特定的目录下(详见 安装扩展):
- macOS:
~/Library/Application Support/Zed/extensions - Linux:
$XDG_DATA_HOME/zed/extensions或~/.local/share/zed/extensions - Windows:
%LOCALAPPDATA%\Zed\extensions
该目录下有两个子目录:installed 存放各扩展的源码,work 存放扩展运行期自行创建的文件(例如下载的语言服务器)。Rego 扩展的绝大部分功能依赖 Regal 语言服务器,因此还需要单独安装 Regal。
第二步:安装并接入 Regal 语言服务器
Rego 扩展“很大程度基于 Regal 语言服务器”,只有安装了 Regal 才能真正使用扩展的能力,因此应参考 Regal 官方的 Getting Started 指南完成 Regal 二进制安装。推荐的做法是让 regal 命令出现在你的 PATH 中,Zed 启动对应语言服务器时即可直接找到它。
如果你希望指定一个非默认路径的 Regal 可执行文件,也可以借助 Zed 通用的语言服务器 binary 配置机制(见 配置语言服务器)来覆盖:
{
"lsp": {
"regal": {
"binary": {
"path": "/absolute/path/to/regal",
"arguments": []
}
}
}
}
说明:
lsp下具体的服务器键名由 Rego 扩展所声明的语言服务器名称决定,通常对应regal;上例展示了 Zed 通用的覆盖语言服务器启动方式(binary.path、arguments、env等字段均受支持),实际键名请以扩展加载后 Zed 自动补全提示的 LSP 适配器名称为准。也可利用 Zed 在settings.json中的自动补全来发现所有已识别的 LSP 适配器。
验证支持是否生效
完成上述两步后,打开一个 .rego 文件,应能看到 Rego 语法高亮;同时 Regal 语言服务器启动后,会在“诊断”视图中呈现规则检查结果,并支持大纲、代码补全等语义功能。若诊断未出现,请优先确认 Regal 二进制是否在 PATH 中、扩展是否成功安装。
配置扩展行为:深入 .regal/config.yaml
Rego 扩展的行为(规则检查与代码风格)通过项目根目录下的 .regal/config.yaml 文件配置。该文件遵循 Regal 的配置格式,Zed 侧本身无需重复声明这些 lint 规则,它们会由 Regal 语言服务器读取并转化为编辑器中的诊断。
官方示例配置逐行解析
Zed 官方文档给出了一个典型的配置示例:关闭 todo-comment 规则、自定义 line-length 规则、并让 opa-fmt 规则忽略测试文件:
rules:
style:
todo-comment:
# 不要对 todo 注释做报告
level: ignore
line-length:
# 自定义规则配置
max-line-length: 100
# 对过长行给出警告,但不至于失败
level: warning
opa-fmt:
# 默认即为 error,并非必须显式声明,
# 但显式写明不会有任何副作用
level: error
# 任意单条规则都支持文件忽略列表
# 此处示例为忽略测试文件
ignore:
files:
- "*_test.rego"
该示例虽然简短,却涵盖了 Regal 规则配置的三个关键维度,逐一拆解如下:
1. 规则按类别(category)分组。最外层是 rules 映射,其下按规则类别组织(示例中的类别是 style,即风格类规则),再往下是具体的规则名。如果你想配置其他类别下的规则,只需把规则名放到对应类别层级之下即可,结构与示例完全同构。
2. 每条规则的 level 决定其严重级别。它控制该规则触发时以什么级别呈现(如 error 为错误、warning 为警告、ignore 为关闭)。示例中三种取值都出现了:
todo-comment的level: ignore:完全关闭该规则,即使代码里存在TODO注释也不再报告,适合不希望被 TODO 噪音干扰的团队;line-length的level: warning:仅以“警告”级别提示过长的行,不会让检查失败;opa-fmt的level: error:保持错误级。opa-fmt负责检查文件是否符合 OPA 格式化约定;示例注释也说明error本就是该规则的默认级别,这里显式写出只是为了可读性,不会改变行为。
3. 规则级 ignore.files 支持按文件(glob)排除。Regal 允许为任意单条规则指定 ignore.files 文件忽略列表,这里的 ignore 位于单条规则(opa-fmt)内部而非全局,因此只对 opa-fmt 生效。示例以 "*_test.rego" 匹配所有以 _test.rego 结尾的测试策略文件——测试代码往往刻意使用非规范的临时写法(如便于断言的布局),通过文件级忽略可以避免格式化规则在测试文件上误报。
与行宽相关的自定义参数
line-length 规则暴露了规则专属的参数 max-line-length,示例设置为 100,表示超过 100 字符的行会触发该规则的检查。它是典型的“规则级参数”用法:不同规则可以携带各自的自定义配置项,统一平铺在该规则的键下,与 level、ignore 并列。
配置生效范围与进一步查阅
.regal/config.yaml 属于项目级配置,放在 Rego 项目根目录即可被 Regal 读取。需要强调的一点是:这些规则与语言服务器的编辑器行为在 Zed 中是正交的——Regal 负责“规则诊断”,而 Zed 编辑器本身(缩进、软换行、格式化触发时机等)则由 settings.json 中的 languages、lsp 等区块控制。若需要更完整的规则目录、类别定义与配置写法(例如其他严重级别、默认值等),请查阅 Regal 官方配置文档,它是该配置文件的权威参考。
在 Zed 中进一步微调 Rego 编辑体验
除了 Regal 侧的规则配置,你还可以用 Zed 标准的语言级设置来定制 Rego 文件的编辑行为。Zed 允许通过 settings.json(用户级 ~/.config/zed/settings.json 或项目级 .zed/settings.json)下的 languages 键为单个语言覆盖全局设置,例如:
{
"languages": {
"Rego": {
"tab_size": 4,
"format_on_save": "on",
"formatter": "language_server"
}
}
}
常用且与 Rego 编写相关的语言级设置包括:
tab_size:每级缩进的空格数(Rego 官方风格使用 Tab 缩进,可按团队约定调整);formatter:选用"language_server"(由 Regal 等 LSP 提供格式化)或外部命令;format_on_save:保存时是否自动格式化;enable_language_server:是否启用该语言的语言服务器,与 Regal 的接入开关直接相关;soft_wrap、preferred_line_length等:配合line-length规则可以保持“编辑器视觉折行”与“Regal 规则阈值”的一致体验。
这些配置项与 .regal/config.yaml 各司其职:前者决定 Zed 编辑器如何呈现与操作 Rego 代码,后者决定 Regal 检查引擎报告哪些问题。两者叠加,才能得到一套完整、可预期的 Rego 开发体验。
小结
- Rego 在 Zed 中的支持由社区 Rego 扩展提供,底层依赖 tree-sitter-rego 语法解析与 Regal 语言服务器;
- 安装路径为“扩展画廊安装 Rego 扩展 → 安装 Regal 并确保其可被找到”,必要时可在 Zed 的
lsp配置中覆盖二进制路径; - 扩展的规则行为统一收敛在项目根目录的
.regal/config.yaml:掌握rules→ 类别 → 规则名 的层级,以及level(ignore/warning/error)、规则参数(如max-line-length)、ignore.filesglob 这三个核心维度,即可精细化控制诊断输出; - 编辑器行为(格式化、缩进、软换行)则通过 Zed 标准的
languages/lsp配置微调,与 Regal 规则配置相互独立、互补配合。
想了解更完整的配置项清单,可以继续阅读仓库中的 配置受支持语言、语言支持总览 与 安装扩展,它们分别覆盖了语言服务器机制、Rego 所在的语言清单以及扩展安装细节。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00