首页
/ Zed 中配置 Rego(OPA Policy)语言支持:Rego 扩展安装、Regal 语言服务器与规则配置实战

Zed 中配置 Rego(OPA Policy)语言支持:Rego 扩展安装、Regal 语言服务器与规则配置实战

2026-09-06 19:10:33作者:魏侃纯Zoe

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 扩展(社区维护)提供,其依赖的两大底层组件分别是:

换句话说,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.pathargumentsenv 等字段均受支持),实际键名请以扩展加载后 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-commentlevel: ignore:完全关闭该规则,即使代码里存在 TODO 注释也不再报告,适合不希望被 TODO 噪音干扰的团队;
  • line-lengthlevel: warning:仅以“警告”级别提示过长的行,不会让检查失败;
  • opa-fmtlevel: 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 字符的行会触发该规则的检查。它是典型的“规则级参数”用法:不同规则可以携带各自的自定义配置项,统一平铺在该规则的键下,与 levelignore 并列。

配置生效范围与进一步查阅

.regal/config.yaml 属于项目级配置,放在 Rego 项目根目录即可被 Regal 读取。需要强调的一点是:这些规则与语言服务器的编辑器行为在 Zed 中是正交的——Regal 负责“规则诊断”,而 Zed 编辑器本身(缩进、软换行、格式化触发时机等)则由 settings.json 中的 languageslsp 等区块控制。若需要更完整的规则目录、类别定义与配置写法(例如其他严重级别、默认值等),请查阅 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_wrappreferred_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 → 类别 → 规则名 的层级,以及 levelignore/warning/error)、规则参数(如 max-line-length)、ignore.files glob 这三个核心维度,即可精细化控制诊断输出;
  • 编辑器行为(格式化、缩进、软换行)则通过 Zed 标准的 languages/lsp 配置微调,与 Regal 规则配置相互独立、互补配合。

想了解更完整的配置项清单,可以继续阅读仓库中的 配置受支持语言语言支持总览安装扩展,它们分别覆盖了语言服务器机制、Rego 所在的语言清单以及扩展安装细节。

登录后查看全文
热门项目推荐
相关项目推荐