Skip to content

本文介绍 oxc_language_server 的核心概念以及与 CLI 的差异。 若希望了解编辑器与 LS 通讯机制,请参阅官方 LSP/LSIF 文档,以及 crates 里 README.md 中与规范相关的简述。

下文中的「工具」泛指 oxlintoxfmt 的核心逻辑抽象。

oxc_language_server 如何把工具接上 LSP

oxc_language_server 可协助你把自建脚本晋升为 Language Server; 服务器本身不写盘、也不自动生成修复建议——这些是各工具的职责。

它主要负责:管理工作区文件夹、加载正确配置并完成与编辑器的整套通信; 与工具本体之间通过 ToolBuilder/Tool trait 对接。

与 CLI 的差异

编辑器改文件;服务器只做通信

CLI 会直接写入文件; (oxc) Language Server 绝不应写入磁盘,而是通过 LSP 把变更告知编辑器。

工作区文件夹

在编辑器打开 Git 仓库时,即对应一个 workspace folder; LSP 亦支持一次性打开多个 Git 仓库,其间每个均可拥有独享配置。 每个文件夹都有专属的 workspace URI,可类比 CLI 的「当前工作目录」。 编辑器可随时增添或移除文件夹。

配置(按文件夹拆分)

CLI 可用的 flag,Language Server 侧同样可读配置; 原则是:每个 workspace folder 拥有自己的配置, 例如仓库 A 开 type-aware,仓库 B 在保存时使用危险自动修复。

热更新配置

用户可在运行时改写 Language Server 配置,编辑器会把新配置推给服务端。 我们会把新旧配置发给各工具实例,由其自行决定是否要重启/重建内部状态。

监听模式与被监听文件变动

工具可声明希望编辑器监听的 Glob;文件增删改时通知服务器, 常用于 .ox**rc.json 及其中 extends 等外链。 视工作区设定与工具实现,可能需要再次重启或重建实例。