Vize

oxlint-plugin-vize阿尔法

今天我要打开oxlint-plugin-vize的第一个 alpha 版本,一个新的 Oxlint JS 插件桥接器,用于 Vize Patina。

目标很简单:保持 Oxlint 作为 JavaScript 和 TypeScript 规则的主运行工具,同时让 Vize 在同一运行中贡献 Vue 特定的诊断。这个阿尔法不是在奥克斯林特和帕蒂娜之间做选择,而是让他们合作。

这是什么

oxlint-plugin-vize让Oxlint通过Vize的原生绑定执行Patina,同时仍使用Oxlint的JS插件模型和规则配置。

这意味着单.oxlintrc.json可以混合规则,比如:

  • Oxlint 核心规则,如 no-console

  • Oxlint 内置的 vue 插件

  • Vize规则,如vize/vue/require-v-for-key

  • 带包绿支持的Vue诊断,如vize/vue/no-v-htmlvize/vue/no-duplicate-attributes

插件使用vize命名空间,并读取settings.vize设置。

为什么这个阿尔法很重要

Patina 已经很熟悉 Vue 模板,但许多团队希望 Oxlint 继续成为他们 lint 工作流程的核心。

这个阿尔法是朝向那个形状的第一步:

  • 一个lint命令

  • 一个配置文件

  • 一个输出流

  • Rust原生的JavaScript和TypeScript规则,以及Vue模板感知的诊断工具

对于Vue项目来说,这种组合很重要。模板规则如缺少v-for键或不安全的v-html使用,应能与通用的Oxlint规则并存,而不必要求单独的lint通行和独立的报告格式。

配置示例

{
  "plugins": ["vue"],
  "jsPlugins": ["oxlint-plugin-vize"],
  "settings": {
    "vize": {
      "locale": "en",
      "helpLevel": "none"
    }
  },
  "rules": {
    "no-console": "warn",
    "vize/vue/require-v-for-key": "error",
    "vize/vue/no-v-html": "warn",
    "vize/vue/no-duplicate-attributes": "error"
  }
}

该阿尔法目前支持:

  • settings.vize.locale 用于诊断语言

  • settings.vize.helpLevel "full""short""none"

  • showHelp 用于向后兼容

  • settings.patina作为兼容别名,而settings.vize成为典范密钥

工作原理

桥梁设计基于Oxlint的按规则执行模型,而非与之抗衡。

  • 文件中第一个启用的 Vize 规则仅对该规则运行原生 Patina 通行。

  • 如果同一文件启用了第二个 Vize 规则,插件升级为共享的全文件 Patina 通道,并将结果用于剩余的 Vize 规则。

  • 文件内容和规则结果在 Oxlint 进程的生命周期内按文件和设置缓存。

这种设计既便宜地保留了第一条规则,又避免了多个Vice规则激活后重复的原生工作。

诊断与输出

这种集成中一个难点是位置报告。

Oxlint 的 JS 插件系统目前可从提取的 Vue 脚本程序运行,而许多 Patina 诊断则源自 <template> 或其他 SFC 模块。在这个 alpha 版本中,oxlint-plugin-vize 在诊断信息中保持真实的 Vue 块和 line:column 在线,这样输出仍然会指向 SFC 的正确位置。

该仓库还包含一个小型examples/oxlint-vize示例,用于展示来自以下混合输出:

  • Oxlint 核心诊断

  • Oxlint 内置的 Vue 支持

  • 带铜绿的Vize诊断

当前限制

这仍处于alpha阶段,有几个限制需要明确指出:

  • Oxlint JS 插件目前依赖提取后的 Vue 脚本程序,因此没有 <script><script setup> 的文件尚未调用该插件。

  • 当 Oxlint 无法直接接受原始模板范围时,诊断锚仍然指向脚本程序。

  • 初始的 alpha 封装针对节点 24+;当前版本支持 Node 22 和 Node 24+。

  • Oxlint 的 JS 插件支持本身仍在不断发展,因此这里的一些粗糙边缘是上游约束,而非仅 Vize 的行为。

为什么是现在的阿尔法

我想尽早把这个整合交到大家手里,甚至在每个边缘情况都还没完善之前。

核心形状已经感觉很实用:

  • Vize带来Vue特有的绒毛智能

  • 奥克斯林特依然是顶级跑者

  • 配置表面保持较小

  • 性能模型保持原生优先

这足以让Vue用户获得真实反馈,他们希望更快的棉絮堆栈,同时又不放弃模板识别检查。

接下来会发生什么

接下来的步骤很简单:

  • 随着 Oxlint 提供更多 Vue 识别插件钩子,改进模板位置映射

  • 围绕平台原生绑定加固安装和发布流程

  • 扩展文档和示例,用于真实项目设置

  • 不断优化Oxlint格式化器中Patina帮助文本的呈现方式

这个阿尔法不是最终状态。它是Oxlint和Vize的Vue绒毛连接的第一个可用桥梁,我很期待它接下来的发展。