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

LSP-серверы

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

opencode интегрируется с вашим протоколом языкового сервера (LSP), чтобы помочь LLM взаимодействовать с вашей кодовой базой. Он использует диагностику для предоставления обратной связи LLM.


Встроенные

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 автоматически включаются при обнаружении одного из указанных выше расширений файлов и выполнении требований.


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

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

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

Настройка

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

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 значение 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

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