---
url: /docs/contribute/language_server.md
---

本页介绍 `oxc_language_server` 的主要概念以及它与 CLI 的区别。
如果你想了解更多关于语言服务器和编辑器之间通信的信息，官方的 [LSP/LSIF 文档](https://microsoft.github.io/language-server-protocol/) 是一个很好的起点。
语言服务器的 [`README.md`](https://github.com/oxc-project/oxc/blob/main/crates/oxc_language_server/README.md) 对相关规范进行了快速概述。

注意：在本文档中我们将大量谈论“工具”，这是 `oxlint` 和 `oxfmt` 核心逻辑的抽象概念。

## `oxc_language_server` 实现工具的概念

`oxc_language_server` 可用于升级你自己的脚本，使其具备作为语言服务器工作的能力。
服务器本身不会更改你的文件或创建建议。这是工具的责任。
相反，它管理工作区文件夹以及加载正确配置的所有通信。
为了与提供的工具通信，服务器提供了一个 [`ToolBuilder` 和 `Tool` trait](https://github.com/oxc-project/oxc/blob/main/crates/oxc_language_server/src/tool.rs)。

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

### 编辑器更改文件，服务器通信更改

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

### 工作区文件夹

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

### 配置（带有文件夹）

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

### 更改配置

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

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

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