Skip to content

На этой странице — основные идеи oxc_language_server и отличия от CLI. Подробнее о связке LSP и редактора см. официальную документацию LSP/LSIF. В README.md языкового сервера кратко перечислены релевантные спецификации.

Примечание. Далее под «инструментами» имеется в виду общая логика oxlint и oxfmt.

Роль oxc_language_server

oxc_language_server можно встроить в свой сценарий, чтобы он работал как language server. Сам сервер не правит файлы и не создаёт правки — это делает инструмент. Сервер управляет корнями воркспейса и всей коммуникацией для загрузки нужной конфигурации. Для связи с инструментами используются трейты ToolBuilder и Tool.

Отличия от CLI

Редактор меняет файл, сервер только сообщает об изменениях

CLI записывает изменения на диск. Языковой сервер Oxc никогда не должен писать в файловую систему — только сообщать редактору о правках.

Workspace folders

При открытии git-проекта в редакторе это один корень воркспейса. В LSP можно открыть несколько проектов. У каждого может быть своя конфигурация (см. ниже), но главное — свой контекст и URI воркспейса. Его можно считать аналогом текущего каталога для CLI. Редактор может добавлять и удалять корни воркспейса.

Конфигурация (по папкам)

Как и у CLI через флаги, языковой сервер настраивается: на каждый корень воркспейса — своя конфигурация. Например: проект A — type-aware линтинг, проект B — опасные автофиксы при сохранении.

Смена конфигурации

Пользователь может менять настройки LSP на лету — редактор пришлёт обновлённую конфигурацию. Сейчас сервер передаёт каждому инструменту старую и новую конфигурацию, чтобы тот мог перезапуститься или пересобраться.

Шаблоны наблюдения и изменение файлов

Инструмент может попросить редактор следить по glob и уведомлять сервер о создании/изменении/удалении файлов. Часто это нужно для .oxlintrc.json и связанных файлов (например extends в конфиге oxlint). В зависимости от настроек воркспейса и инструмента может потребоваться очередной перезапуск или пересборка.