本页介绍 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 工具的“当前工作目录”相同。 请记住,工作区文件夹可以由编辑器添加/删除。
配置(带有文件夹)
语言服务器可以(像 CLI 标志一样)进行配置,oxc 语言服务器遵循以下概念: 每个工作区文件夹都可以有自己的配置。例如:git 项目 A 使用类型感知 linting,git 项目 B 在自动保存时使用危险修复。
更改配置
惊喜!用户可以随时更改语言服务器配置。编辑器会将更新的配置发送给我们。 目前,服务器会将旧配置和新配置发送给每个工具,以便它可以处理各种事情。 根据配置,工具可以重启/重建自身。
监视模式 & 更改被监视的文件
你的工具可以告诉编辑器监视特定文件(glob)模式,并在文件被更改/创建/删除时通知服务器。 这主要用于 .ox**rc.json 配置以及其中引用的文件(例如来自 oxlint 的 extends)。 根据工作区和工具的配置,工具可能需要再次重启/重建自身。
