Skip to content

本页介绍 oxc_language_server 的主要概念以及它与 CLI 的区别。 如果你想了解更多关于语言服务器和编辑器之间通信的信息,官方的 LSP/LSIF 文档 是一个很好的起点。 语言服务器的 README.md 对相关规范进行了快速概述。

注意:在本文档中我们将大量谈论“工具”,这是 oxlintoxfmt 核心逻辑的抽象概念。

oxc_language_server 实现工具的概念

oxc_language_server 可用于升级你自己的脚本,使其具备作为语言服务器工作的能力。 服务器本身不会更改你的文件或创建建议。这是工具的责任。 相反,它管理工作区文件夹以及加载正确配置的所有通信。 为了与提供的工具通信,服务器提供了一个 ToolBuilderTool trait

语言服务器与 CLI 之间的区别

编辑器更改文件,服务器通信更改

关于文件通信及其修复的一个小而重要的部分。 CLI 工具将更改写入文件系统。 (oxc) 语言服务器绝不应该写入它,相反,它只是将它的更改通信给编辑器。

工作区文件夹

你知道当你在编辑器中打开一个 git 项目时是什么情况吗?那就是一个工作区文件夹。LSP 具有同时打开多个 (git) 项目的概念。 每个项目都可以有自己的配置(见下一部分),但最重要的部分是带有工作区 URI 的自有“上下文”。 你可以将工作区 URI 视为与 CLI 工具的“当前工作目录”相同。 请记住,工作区文件夹可以由编辑器添加/删除。

配置(带有文件夹)

语言服务器可以(像 CLI 标志一样)进行配置,oxc 语言服务器遵循以下概念: 每个工作区文件夹都可以有自己的配置。例如:git 项目 A 使用类型感知 linting,git 项目 B 在自动保存时使用危险修复。

更改配置

惊喜!用户可以随时更改语言服务器配置。编辑器会将更新的配置发送给我们。 目前,服务器会将旧配置和新配置发送给每个工具,以便它可以处理各种事情。 根据配置,工具可以重启/重建自身。

监视模式 & 更改被监视的文件

你的工具可以告诉编辑器监视特定文件(glob)模式,并在文件被更改/创建/删除时通知服务器。 这主要用于 .ox**rc.json 配置以及其中引用的文件(例如来自 oxlintextends)。 根据工作区和工具的配置,工具可能需要再次重启/重建自身。