Serveurs LSP
OpenCode s'intègre à vos serveurs LSP.
OpenCode peut s’intégrer aux serveurs Language Server Protocol (LSP) pour utiliser les diagnostics comme retour pour l’agent.
Serveurs intégrés
OpenCode est livré avec plusieurs serveurs LSP intégrés pour les langages populaires :
| Serveur LSP | Extensions | Prérequis |
|---|---|---|
| astro | .astro | Installation automatique pour les projets Astro |
| bash | .sh, .bash, .zsh, .ksh | Installe automatiquement le serveur bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installation automatique pour les projets C/C++ |
| csharp | .cs | .NET SDK installé |
| clojure-lsp | .clj, .cljs, .cljc, .edn | Commande clojure-lsp disponible |
| dart | .dart | Commande dart disponible |
| deno | .ts, .tsx, .js, .jsx, .mjs | Commande deno disponible (détection automatique deno.json/deno.jsonc) |
| elixir-ls | .ex, .ex | Commande elixir disponible |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Dépendance eslint dans le projet |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK installé |
| gleam | .gleam | Commande gleam disponible |
| gopls | .go | Commande go disponible |
| hls | .hs, .lhs | Commande haskell-language-server-wrapper disponible |
| jdtls | .java | Java SDK (version 21+) installé |
| julials | .jl | julia et LanguageServer.jl installés |
| kotlin-ls | .kt, .kts | Installation automatique pour les projets Kotlin |
| lua-ls | .lua | Installation automatique pour les projets Lua |
| nixd | .nix | Commande nixd disponible |
| ocaml-lsp | .ml, .mli | Commande ocamllsp disponible |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Dépendance oxlint dans le projet |
| php intelephense | .php | Installation automatique pour les projets PHP |
| prisma | .prisma | Commande prisma disponible |
| pyright | .py, .pyi | Dépendance pyright installée |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Commandes ruby et gem disponibles |
| rust | .rs | Commande rust-analyzer disponible |
| sourcekit-lsp | .swift, .objc, .objcpp | swift installé (xcode sur macOS) |
| svelte | .svelte | Installation automatique pour les projets Svelte |
| terraform | .tf, .tfvars | Installation automatique à partir des versions GitHub |
| tinymist | .typ, .typc | Installation automatique à partir des versions GitHub |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Dépendance typescript dans le projet |
| vue | .vue | Installation automatique pour les projets Vue |
| yaml-ls | .yaml, .yml | Installe automatiquement le serveur yaml-language-server de Red Hat |
| zls | .zig, .zon | Commande zig disponible |
LSP est désactivé par défaut. Lorsqu’il est activé, les serveurs démarrent lorsqu’une des extensions de fichier ci-dessus est détectée et que les exigences sont remplies.
Comment ça marche
Lorsque LSP est activé et qu’opencode ouvre un fichier, il :
- Vérifie l’extension du fichier par rapport à tous les serveurs LSP activés.
- Démarre le serveur LSP approprié s’il n’est pas déjà en cours d’exécution.
Bonnes pratiques
LSP peut aider l’agent à trouver et corriger des problèmes en fournissant les diagnostics des serveurs de langage. C’est utile dans certains projets, mais ce n’est pas toujours un gain net.
Les serveurs de langage peuvent se désynchroniser, consommer beaucoup de mémoire, varier selon la version ou le projet, et ralentir les flux de travail de l’agent. Dans de nombreux projets, il est préférable de faire exécuter directement par l’agent le lint, le typecheck ou d’autres outils CLI de diagnostic, afin que les erreurs reviennent dans la boucle de l’agent sans ces compromis. Documentez ces commandes dans des fichiers d’instructions comme AGENTS.md ou des skills afin que l’agent sache quoi exécuter. Activez LSP lorsque votre projet bénéficie d’un retour supplémentaire des serveurs de langage.
Configuration
Vous pouvez activer et personnaliser les serveurs LSP via la section lsp de votre configuration opencode.
Pour activer tous les serveurs LSP intégrés, définissez lsp sur true.
{ "$schema": "https://opencode.ai/config.json", "lsp": true}Utilisez un objet pour conserver les serveurs intégrés activés tout en configurant des remplacements ou des serveurs personnalisés.
{ "$schema": "https://opencode.ai/config.json", "lsp": {}}Chaque serveur LSP prend en charge les éléments suivants :
| Propriété | Type | Description |
|---|---|---|
disabled | booléen | Définissez ceci sur true pour désactiver le serveur LSP |
command | chaîne[] | La commande pour démarrer le serveur LSP |
extensions | chaîne[] | Extensions de fichiers que ce serveur LSP doit gérer |
env | objet | Variables d’environnement à définir lors du démarrage du serveur |
initialization | objet | Options d’initialisation à envoyer au serveur LSP |
Regardons quelques exemples.
Variables d’environnement
Utilisez la propriété env pour définir les variables d’environnement lors du démarrage du serveur LSP :
{ "$schema": "https://opencode.ai/config.json", "lsp": { "rust": { "env": { "RUST_LOG": "debug" } } }}Options d’initialisation
Utilisez la propriété initialization pour transmettre les options d’initialisation au serveur LSP. Il s’agit de paramètres spécifiques au serveur envoyés lors de la requête LSP initialize :
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "initialization": { "preferences": { "importModuleSpecifierPreference": "relative" } } } }}Désactivation des serveurs LSP
Si lsp est omis, tous les serveurs LSP sont désactivés. Pour désactiver tous les serveurs LSP après qu’une autre configuration les a activés, définissez lsp sur false :
{ "$schema": "https://opencode.ai/config.json", "lsp": false}Pour désactiver un serveur LSP spécifique, définissez disabled sur true :
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "disabled": true } }}Serveurs LSP personnalisés
Vous pouvez ajouter des serveurs LSP personnalisés en spécifiant les extensions de commande et de fichier :
{ "$schema": "https://opencode.ai/config.json", "lsp": { "custom-lsp": { "command": ["custom-lsp-server", "--stdio"], "extensions": [".custom"] } }}Informations supplémentaires
PHP Intelephense
PHP Intelephense offre des fonctionnalités premium via une clé de licence. Vous pouvez fournir une clé de licence en plaçant (uniquement) la clé dans un fichier texte à l’adresse :
- macOS/Linux :
$HOME/intelephense/license.txt - Windows :
%USERPROFILE%/intelephense/license.txt
Le fichier doit contenir uniquement la clé de licence sans contenu supplémentaire.