LSP Sunucuları
OpenCode, LSP sunucularınızla bütünleşir.
OpenCode, tanılamayı agent için geri bildirim olarak kullanmak üzere Language Server Protocol (LSP) sunucularıyla bütünleşebilir.
Yerleşik
OpenCode, popüler diller için çeşitli yerleşik LSP sunucularıyla birlikte gelir:
| LSP Sunucu | Uzantılar | Gereksinimler |
|---|---|---|
| astro | .astro | Astro projeleri için otomatik kurulumlar |
| bash | .sh, .bash, .zsh, .ksh | bash-language-server’ı otomatik olarak yükler |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | C/C++ projeleri için otomatik kurulumlar |
| csharp | .cs | .NET SDK kurulu |
| clojure-lsp | .clj, .cljs, .cljc, .edn | clojure-lsp komutu mevcut |
| dart | .dart | dart komutu mevcut |
| deno | .ts, .tsx, .js, .jsx, .mjs | deno komutu mevcut (deno.json/deno.jsonc otomatik olarak algılanır) |
| elixir-ls | .ex, .exs | elixir komutu mevcut |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Projede eslint bağımlılığı |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK kurulu |
| gleam | .gleam | gleam komutu mevcut |
| gopls | .go | go komutu mevcut |
| hls | .hs, .lhs | haskell-language-server-wrapper komutu mevcut |
| jdtls | .java | Java SDK (version 21+) kurulu |
| julials | .jl | julia ve LanguageServer.jl kurulu |
| kotlin-ls | .kt, .kts | Kotlin projeleri için otomatik kurulumlar |
| lua-ls | .lua | Lua projeleri için otomatik kurulumlar |
| nixd | .nix | nixd komutu mevcut |
| ocaml-lsp | .ml, .mli | ocamllsp komutu mevcut |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Projede oxlint bağımlılığı |
| php intelephense | .php | PHP projeleri için otomatik yüklemeler |
| prisma | .prisma | prisma komutu mevcut |
| pyright | .py, .pyi | pyright bağımlılığı kurulu |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | ruby ve gem komutları mevcut |
| rust | .rs | rust-analyzer komutu mevcut |
| sourcekit-lsp | .swift, .objc, .objcpp | swift kurulu (macOS’ta xcode) |
| svelte | .svelte | Svelte projeleri için otomatik kurulumlar |
| terraform | .tf, .tfvars | GitHub sürümlerinden otomatik yüklemeler |
| tinymist | .typ, .typc | GitHub sürümlerinden otomatik yüklemeler |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Projede typescript bağımlılığı |
| vue | .vue | Vue projeleri için otomatik yüklemeler |
| yaml-ls | .yaml, .yml | Red Hat yaml-language-server’ı otomatik olarak yükler |
| zls | .zig, .zon | zig komutu mevcut |
LSP varsayılan olarak devre dışıdır. Etkinleştirildiğinde, yukarıdaki dosya uzantılarından biri tespit edilir ve gereksinimler karşılanırsa sunucular başlatılır.
Nasıl Çalışır?
LSP etkinleştirildiğinde ve opencode bir dosyayı açtığında:
- Dosya uzantısını tüm etkin LSP sunucularına göre kontrol eder.
- Henüz çalışmıyorsa uygun LSP sunucusunu başlatır.
En İyi Uygulamalar
LSP, dil sunucularından tanılama sağlayarak agent’ın sorunları bulup düzeltmesine yardımcı olabilir. Bu bazı projelerde yararlıdır, ancak her zaman net bir kazanç değildir.
Dil sunucuları senkronizasyonu kaybedebilir, önemli miktarda bellek kullanabilir, sürüme veya projeye göre değişebilir ve agent iş akışlarını yavaşlatabilir. Birçok projede agent’ın lint, typecheck veya diğer tanılama CLI araçlarını doğrudan çalıştırması daha iyidir; böylece hatalar bu ödünleşimler olmadan agent döngüsüne geri beslenir. Agent’ın ne çalıştıracağını bilmesi için bu komutları AGENTS.md veya skills gibi talimat dosyalarında belgeleyin. Projeniz ek dil sunucusu geri bildiriminden yararlanıyorsa LSP’yi etkinleştirin.
Yapılandırma
LSP sunucularını, opencode yapılandırmanızdaki lsp bölümü aracılığıyla etkinleştirebilir ve özelleştirebilirsiniz.
Tüm yerleşik LSP sunucularını etkinleştirmek için lsp değerini true olarak ayarlayın.
{ "$schema": "https://opencode.ai/config.json", "lsp": true}Yerleşik sunucuları etkin tutarken geçersiz kılmaları veya özel sunucuları yapılandırmak için bir nesne kullanın.
{ "$schema": "https://opencode.ai/config.json", "lsp": {}}Her LSP sunucusu aşağıdakileri destekler:
| Özellik | Tip | Açıklama |
|---|---|---|
disabled | boolean | LSP sunucusunu devre dışı bırakmak için bunu true olarak ayarlayın |
command | string[] | LSP sunucusunu başlatma komutu |
extensions | string[] | Bu LSP sunucusunun işlemesi gereken dosya uzantıları |
env | object | Sunucuyu başlatırken ayarlanacak ortam değişkenleri |
initialization | object | LSP sunucusuna gönderilecek başlatma seçenekleri |
Bazı örneklere bakalım.
Ortam değişkenleri
LSP sunucusunu başlatırken ortam değişkenlerini ayarlamak için env özelliğini kullanın:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "rust": { "env": { "RUST_LOG": "debug" } } }}Başlatma seçenekleri
Başlatma seçeneklerini LSP sunucusuna iletmek için initialization özelliğini kullanın. Bunlar LSP initialize isteği sırasında gönderilen sunucuya özel ayarlardır:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "initialization": { "preferences": { "importModuleSpecifierPreference": "relative" } } } }}LSP sunucularını devre dışı bırakma
lsp atlanırsa tüm LSP sunucuları devre dışı kalır. Başka bir yapılandırma etkinleştirdikten sonra tüm LSP sunucularını devre dışı bırakmak için lsp değerini false olarak ayarlayın:
{ "$schema": "https://opencode.ai/config.json", "lsp": false}Belirli bir LSP sunucusunu devre dışı bırakmak için disabled’yi true olarak ayarlayın:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "disabled": true } }}Özel LSP sunucuları
Komutu ve dosya uzantılarını belirterek özel LSP sunucuları ekleyebilirsiniz:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "custom-lsp": { "command": ["custom-lsp-server", "--stdio"], "extensions": [".custom"] } }}Ek Bilgiler
PHP Intelephense
PHP Intelephense, bir lisans anahtarı aracılığıyla premium özellikler sunar. Anahtarı (yalnızca) şu adresteki bir metin dosyasına yerleştirerek bir lisans anahtarı sağlayabilirsiniz:
- macOS/Linux’ta:
$HOME/intelephense/license.txt - Windows’ta:
%USERPROFILE%/intelephense/license.txt
Dosya, ek içerik olmadan yalnızca lisans anahtarını içermelidir.