LSP-серверы
opencode интегрируется с вашими серверами LSP.
opencode интегрируется с вашим протоколом языкового сервера (LSP), чтобы помочь LLM взаимодействовать с вашей кодовой базой. Он использует диагностику для предоставления обратной связи LLM.
Встроенные
opencode поставляется с несколькими встроенными LSP-серверами для популярных языков:
| LSP Server | Extensions | Requirements |
|---|---|---|
| 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, .edn | clojure-lsp команда доступна |
| dart | .dart | dart команда доступна |
| deno | .ts, .tsx, .js, .jsx, .mjs | deno команда доступна (автоматически обнаруживает deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | elixir команда доступна |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | eslint зависимость в проекте |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK установлен |
| gleam | .gleam | gleam команда доступна |
| gopls | .go | go команда доступна |
| hls | .hs, .lhs | haskell-language-server-wrapper команда доступна |
| jdtls | .java | Java SDK (version 21+) установлен |
| kotlin-ls | .kt, .kts | Автоматически устанавливается для проектов Kotlin |
| lua-ls | .lua | Автоматически устанавливается для проектов Lua |
| nixd | .nix | nixd команда доступна |
| ocaml-lsp | .ml, .mli | ocamllsp команда доступна |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | oxlint зависимость в проекте |
| php intelephense | .php | Автоматически устанавливается для проектов PHP |
| prisma | .prisma | prisma команда доступна |
| pyright | .py, .pyi | pyright зависимость установлена |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | ruby и gem команды доступны |
| rust | .rs | rust-analyzer команда доступна |
| sourcekit-lsp | .swift, .objc, .objcpp | swift установлен (xcode на macOS) |
| svelte | .svelte | Автоматически устанавливается для проектов Svelte |
| terraform | .tf, .tfvars | Автоматически устанавливается из релизов GitHub |
| tinymist | .typ, .typc | Автоматически устанавливается из релизов GitHub |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | typescript зависимость в проекте |
| vue | .vue | Автоматически устанавливается для проектов Vue |
| yaml-ls | .yaml, .yml | Автоматически устанавливает Red Hat yaml-language-server |
| zls | .zig, .zon | zig команда доступна |
Серверы LSP автоматически включаются при обнаружении одного из указанных выше расширений файлов и выполнении требований.
Как это работает
Когда opencode открывает файл, он:
- Проверяет расширение файла на всех включенных серверах LSP.
- Запускает соответствующий сервер LSP, если он еще не запущен.
Настройка
Вы можете настроить серверы LSP через раздел lsp в конфигурации opencode.
{ "$schema": "https://opencode.ai/config.json", "lsp": {}}Каждый LSP-сервер поддерживает следующее:
| Свойство | Тип | Описание |
|---|---|---|
disabled | boolean | Установите для этого параметра значение true, чтобы отключить сервер LSP. |
command | string[] | Команда запуска LSP-сервера |
extensions | string[] | Расширения файлов, которые должен обрабатывать этот сервер LSP |
env | object | Переменные среды, которые нужно установить при запуске сервера |
initialization | object | Параметры инициализации для отправки на сервер LSP |
Давайте посмотрим на несколько примеров.
Переменные среды
Используйте свойство env для установки переменных среды при запуске сервера LSP:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "rust": { "env": { "RUST_LOG": "debug" } } }}Параметры инициализации
Используйте свойство initialization для передачи параметров инициализации на LSP-сервер. Это настройки, специфичные для сервера, отправляемые во время запроса LSP initialize:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "initialization": { "preferences": { "importModuleSpecifierPreference": "relative" } } } }}Отключение LSP-серверов
Чтобы отключить все LSP-серверы глобально, установите для lsp значение false:
{ "$schema": "https://opencode.ai/config.json", "lsp": false}Чтобы отключить конкретный LSP-сервер, установите для disabled значение true:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "disabled": true } }}Пользовательские LSP-серверы
Вы можете добавить собственные LSP-серверы, указав команду и расширения файлов:
{ "$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
Файл должен содержать только лицензионный ключ без какого-либо дополнительного содержимого.