Перейти к содержимому

LSP-серверы

opencode интегрируется с вашими серверами LSP.

opencode может интегрироваться с серверами Language Server Protocol (LSP), чтобы использовать диагностику как обратную связь для агента.


Встроенные

opencode поставляется с несколькими встроенными LSP-серверами для популярных языков:

LSP ServerExtensionsRequirements
astro.astroАвтоматически устанавливается для проектов Astro
bash.sh, .bash, .zsh, .kshАвтоматически устанавливает bash-language-server
clangd.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++Автоматически устанавливается для проектов C/C++
csharp.cs.NET SDK установлен
clojure-lsp.clj, .cljs, .cljc, .ednclojure-lsp команда доступна
dart.dartdart команда доступна
deno.ts, .tsx, .js, .jsx, .mjsdeno команда доступна (автоматически обнаруживает deno.json/deno.jsonc)
elixir-ls.ex, .exselixir команда доступна
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueeslint зависимость в проекте
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK установлен
gleam.gleamgleam команда доступна
gopls.gogo команда доступна
hls.hs, .lhshaskell-language-server-wrapper команда доступна
jdtls.javaJava SDK (version 21+) установлен
kotlin-ls.kt, .ktsАвтоматически устанавливается для проектов Kotlin
lua-ls.luaАвтоматически устанавливается для проектов Lua
nixd.nixnixd команда доступна
ocaml-lsp.ml, .mliocamllsp команда доступна
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteoxlint зависимость в проекте
php intelephense.phpАвтоматически устанавливается для проектов PHP
prisma.prismaprisma команда доступна
pyright.py, .pyipyright зависимость установлена
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruruby и gem команды доступны
rust.rsrust-analyzer команда доступна
sourcekit-lsp.swift, .objc, .objcppswift установлен (xcode на macOS)
svelte.svelteАвтоматически устанавливается для проектов Svelte
terraform.tf, .tfvarsАвтоматически устанавливается из релизов GitHub
tinymist.typ, .typcАвтоматически устанавливается из релизов GitHub
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctstypescript зависимость в проекте
vue.vueАвтоматически устанавливается для проектов Vue
yaml-ls.yaml, .ymlАвтоматически устанавливает Red Hat yaml-language-server
zls.zig, .zonzig команда доступна

LSP отключен по умолчанию. Когда он включен, серверы запускаются при обнаружении одного из указанных выше расширений файлов и выполнении требований.


Как это работает

Когда LSP включен и opencode открывает файл, он:

  1. Проверяет расширение файла на всех включенных серверах LSP.
  2. Запускает соответствующий сервер LSP, если он еще не запущен.

Рекомендации

LSP может помочь агенту находить и исправлять проблемы, предоставляя диагностику от языковых серверов. Это полезно в некоторых проектах, но не всегда является однозначным преимуществом.

Языковые серверы могут рассинхронизироваться, потреблять много памяти, отличаться по поведению между версиями или проектами и замедлять рабочие процессы агента. Во многих проектах лучше, чтобы агент напрямую запускал lint, typecheck или другие диагностические CLI-инструменты; так ошибки возвращаются в цикл агента без этих компромиссов. Задокументируйте эти команды в файлах инструкций, например AGENTS.md или skills, чтобы агент знал, что запускать. Включайте LSP, когда проект получает пользу от дополнительной обратной связи языкового сервера.


Настройка

Вы можете включить и настроить серверы LSP через раздел lsp в конфигурации opencode.

Чтобы включить все встроенные LSP-серверы, установите lsp в true.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}

Используйте объект, чтобы оставить встроенные серверы включенными и при этом настроить переопределения или пользовательские серверы.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}

Каждый LSP-сервер поддерживает следующее:

СвойствоТипОписание
disabledbooleanУстановите для этого параметра значение true, чтобы отключить сервер LSP.
commandstring[]Команда запуска LSP-сервера
extensionsstring[]Расширения файлов, которые должен обрабатывать этот сервер LSP
envobjectПеременные среды, которые нужно установить при запуске сервера
initializationobjectПараметры инициализации для отправки на сервер LSP

Давайте посмотрим на несколько примеров.


Переменные среды

Используйте свойство env для установки переменных среды при запуске сервера LSP:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}

Параметры инициализации

Используйте свойство initialization для передачи параметров инициализации на LSP-сервер. Это настройки, специфичные для сервера, отправляемые во время запроса LSP initialize:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}

Отключение LSP-серверов

Если lsp не указан, все LSP-серверы отключены. Чтобы отключить все LSP-серверы после того, как другая конфигурация их включила, установите для lsp значение false:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}

Чтобы отключить конкретный LSP-сервер, установите для disabled значение true:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}

Пользовательские LSP-серверы

Вы можете добавить собственные LSP-серверы, указав команду и расширения файлов:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}

Дополнительная информация

PHP Intelephense

PHP Intelephense предлагает дополнительные функции через лицензионный ключ. Вы можете предоставить лицензионный ключ, поместив (только) ключ в текстовый файл по адресу:

  • В macOS/Linux: $HOME/intelephense/license.txt
  • В Windows: %USERPROFILE%/intelephense/license.txt

Файл должен содержать только лицензионный ключ без какого-либо дополнительного содержимого.