本页介绍了 oxc_language_server 的核心概念,以及其与 CLI 的主要区别。
如果你想深入了解语言服务器与编辑器之间的通信机制,官方的 LSP/LSIF 文档 是一个绝佳起点。
语言服务器的 README.md 提供了相关规范的快速概览。
注意:在本文中,我们将频繁提到“工具”这一概念,它是一个抽象概念,代表
oxlint和oxfmt的核心逻辑。
oxc_language_server 中工具的实现原理
oxc_language_server 可用于将你的脚本升级为具备语言服务器能力的工具。
该服务器本身不会修改文件或生成建议。这些职责由“工具”承担。
相反,它负责管理工作区文件夹,以及加载正确配置所需的所有通信。
为了与提供的工具进行交互,服务器提供了一个 ToolBuilder 与 Tool trait。
语言服务器与 CLI 的区别
编辑器修改文件,服务器仅传递变更信息
关于文件通信与修复的一个小但关键点:
CLI 工具会直接将修改写入文件系统。
而(oxc)语言服务器绝不能直接修改文件系统,它只应将变更信息通知给编辑器。
工作区文件夹
当你在编辑器中打开一个 Git 项目时,这个项目就是一个工作区文件夹。
LSP 支持同时打开多个(Git)项目。
每个项目可以拥有自己的配置(参见下一部分),但最重要的是各自独立的“上下文”——包含一个工作区 URI。
你可以将工作区 URI 理解为等同于命令行工具中的“当前工作目录”。
请记住,工作区文件夹可能被编辑器动态添加或移除。
配置(带文件夹)
语言服务器可以像 CLI 标志一样进行配置。oxc 语言服务器遵循如下理念:
每个工作区文件夹可以拥有自己的配置。例如:
- 项目 A 启用类型感知的检查(type-aware linting)
- 项目 B 在自动保存时启用危险修复(dangerous fixes)
配置的动态更改
惊喜!用户可以实时更改语言服务器的配置。编辑器会将更新后的配置发送给我们。
目前,服务器会将旧配置和新配置都发送给每个工具,以便其处理各种情况。
根据配置的变化,工具可能会自行重启或重建。
监听模式与被监听文件的变更
你的工具可以通知编辑器去监听特定的文件(通配符)模式,并在文件被修改、创建或删除时通知服务器。
这通常用于 .ox**rc.json 配置文件及其内部引用的文件(例如 oxlint 的 extends 配置)。
根据工作区和工具的配置,工具可能需要再次重启或重建。
