На этой странице — основные идеи 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). В зависимости от настроек воркспейса и инструмента может потребоваться очередной перезапуск или пересборка.