Configuration du serveur LSP OpenCode
OpenCode s'intègre profondément au Language Server Protocol (LSP), en utilisant des serveurs LSP pour fournir aux LLM des retours en temps réel tels que des diagnostics de code et des indications d'erreur, aidant l'IA à comprendre et à manipuler votre base de code plus précisément.
En termes simples, un serveur LSP est un composant qui donne à OpenCode la capacité de « lire le code », semblable aux extensions de VS Code qui fournissent la complétion de code et des indications d'erreur. Lorsqu'une erreur de syntaxe ou une incompatibilité de type apparaît dans un fichier, le serveur LSP renvoie ces informations de diagnostic au LLM, lui permettant d'effectuer des modifications plus précises.
Comment ça marche
L'intégration LSP d'OpenCode est entièrement automatique et ne nécessite aucune intervention manuelle. Lorsqu'OpenCode ouvre un fichier, il exécute le processus suivant dans l'ordre :
打开文件 │ ▼ 读取文件扩展名(如 .ts、.py、.go) │ ▼ 与所有已启用的 LSP 服务器进行匹配 │ ├── 匹配成功且服务器已运行 → 直接使用 │ └── 匹配成功但服务器未运行 → 自动启动对应 LSP 服务器
L'ensemble du processus s'exécute silencieusement en arrière-plan. Une fois le serveur LSP démarré, il fournit en continu des informations de diagnostic pour la session en cours.
Serveurs LSP intégrés
OpenCode dispose d'une prise en charge intégrée des serveurs LSP pour les langages courants,Lorsque l'extension de fichier correspondante est détectée et que les exigences pertinentes sont satisfaites, le serveur LSP est activé automatiquement, et dans la plupart des cas, aucune configuration n'est nécessaire.
| Serveur LSP | Extensions de fichier prises en charge | Conditions d'activation |
|---|---|---|
astro |
.astro |
Installé automatiquement pour les projets Astro |
bash |
.sh, .bash, .zsh, .ksh |
Installe automatiquement bash-language-server |
clangd |
.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ |
Installé automatiquement pour les projets C/C++ |
csharp |
.cs |
Nécessite que le SDK .NET soit installé |
clojure-lsp |
.clj, .cljs, .cljc, .edn |
Nécessiteclojure-lspque la commande soit disponible |
dart |
.dart |
Nécessitedartque la commande soit disponible |
deno |
.ts, .tsx, .js, .jsx, .mjs |
Nécessitedenoque la commande soit disponible, et le projet doit contenirdeno.jsonoudeno.jsonc(détecté automatiquement) |
elixir-ls |
.ex, .exs |
Nécessiteelixirque la commande soit disponible |
eslint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue |
Le projet doit avoireslintdépendance installée |
fsharp |
.fs, .fsi, .fsx, .fsscript |
Nécessite que le SDK .NET soit installé |
gleam |
.gleam |
Nécessitegleamque la commande soit disponible |
gopls |
.go |
Nécessitegoque la commande soit disponible |
hls |
.hs, .lhs |
Nécessitehaskell-language-server-wrapperque la commande soit disponible |
jdtls |
.java |
Nécessite que le SDK Java (version 21 ou supérieure) soit installé |
julials |
.jl |
nécessite une installationjuliaetLanguageServer.jlPaquet |
kotlin-ls |
.kt, .kts |
Installé automatiquement pour les projets Kotlin |
lua-ls |
.lua |
Installé automatiquement pour les projets Lua |
nixd |
.nix |
Nécessitenixdque la commande soit disponible |
ocaml-lsp |
.ml, .mli |
Nécessiteocamllspque la commande soit disponible |
oxlint |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte |
Le projet doit avoiroxlintdépendance installée |
php intelephense |
.php |
Installé automatiquement pour les projets PHP |
prisma |
.prisma |
Nécessiteprismaque la commande soit disponible |
pyright |
.py, .pyi |
nécessitepyrightdépendance à installer |
ruby-lsp |
.rb, .rake, .gemspec, .ru |
Nécessiterubyetgemque la commande soit disponible |
rust |
.rs |
Nécessiterust-analyzerque la commande soit disponible |
sourcekit-lsp |
.swift, .objc, .objcpp |
Nécessite que Swift soit installé (installé via Xcode sur macOS) |
svelte |
.svelte |
Installé automatiquement pour les projets Svelte |
terraform |
.tf, .tfvars |
Installé automatiquement depuis GitHub Releases |
tinymist |
.typ, .typc |
Installé automatiquement depuis GitHub Releases |
typescript |
.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts |
Le projet doit avoirtypescriptdépendance installée |
vue |
.vue |
Installé automatiquement pour les projets Vue |
yaml-ls |
.yaml, .yml |
Installe automatiquement Red Hat yaml-language-server |
zls |
.zig, .zon |
Nécessitezigque la commande soit disponible |
Si vous ne souhaitez pas qu’OpenCode télécharge automatiquement les serveurs LSP, vous pouvez définir la variable d’environnementOPENCODE_DISABLE_LSP_DOWNLOADàtruepour désactiver le comportement de téléchargement automatique. Consultez les notes à la fin de cet article pour plus de détails.
Configuration des serveurs LSP
La configuration liée à LSP est écrite dans leopencode.jsondelspchamp. Dans la plupart des cas, aucune configuration n'est nécessaire et LSP sera activé automatiquement ; mais lorsqu'un comportement personnalisé est nécessaire, chaque serveur LSP prend en charge les éléments de configuration suivants :
| Propriété | Type | Description |
|---|---|---|
disabled |
boolean |
Défini àtruepour désactiver ce serveur LSP |
command |
string[] |
Commande pour démarrer le serveur LSP (sous forme de tableau ; le premier élément est le nom de l'exécutable, les autres sont des arguments) |
extensions |
string[] |
Liste des extensions de fichier gérées par ce serveur LSP |
env |
object |
Variables d'environnement injectées lors du démarrage du serveur ; les clés sont les noms des variables, les valeurs sont les valeurs des variables |
initialization |
object |
Pendant le LSPinitializephase de handshake, options d'initialisation envoyées au serveur ; le contenu varie selon le serveur |
1. Définition des variables d'environnement (env)
Utilisez laenvpropriété pour injecter des variables d'environnement au démarrage du serveur LSP. Couramment utilisée pour activer la journalisation de débogage ou spécifier les chemins requis par l'environnement d'exécution :
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug" // Active la journalisation au niveau debug pour rust-analyzer afin de faciliter le dépannage du LSP
}
}
}
}
2. Définition des options d'initialisation (initialization)
initializationUtilisées pour transmettre une configuration spécifique au serveur LSP. Ces options sont envoyées une seule fois pendant le handshake LSP (initializerequest) phase et affectent tout comportement ultérieur du serveur :
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
// Indique au LSP TypeScript de préférer les imports par chemin relatif (par ex., ./utils)
// au lieu de chemins absolus (par ex., /src/utils) ou d'alias de chemin configurés dans tsconfig.json
}
}
}
}
}
Les options d'initialisation varient selon le serveur LSP. Par exemple,typescriptles options pourgoplssont complètement différentes ; consultez la documentation officielle du serveur LSP correspondant avant utilisation pour éviter de transmettre une configuration invalide.
Désactivation des serveurs LSP
1. Désactivation de tous les serveurs LSP
Si vous n'avez pas besoin du tout de la fonctionnalité LSP, vous pouvez définirlspentièrement àfalse, désactivant tous les serveurs LSP en même temps :
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": false // Désactive globalement tous les serveurs LSP ; adapté aux environnements qui n'ont pas besoin de diagnostics de code ou qui ont un réseau/des ressources limités
}
2. Désactivation d'un serveur LSP spécifique
Si vous souhaitez désactiver un seul serveur LSP tout en conservant les autres, définissez-le individuellement pour ce serveurdisabled: true:
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true // Désactive uniquement le LSP TypeScript ; les serveurs LSP des autres langages ne sont pas affectés
}
}
}
Ajout de serveurs LSP personnalisés
Si le langage que vous utilisez ne figure pas dans la liste de prise en charge intégrée, vous pouvez spécifiercommandetextensionspour ajouter manuellement n'importe quel serveur LSP, à condition que le serveur respecte le protocole LSP standard et prenne en charge--stdiomode (communication via l'entrée/sortie standard) :
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": { // Nom de clé personnalisé ; peut être nommé arbitrairement, utilisé pour identifier le serveur dans la configuration
"command": ["custom-lsp-server", "--stdio"], // Commande de démarrage : le premier élément est le nom de l'exécutable,
// les éléments restants sont les arguments de démarrage qui lui sont passés
// --stdio indique une communication avec OpenCode via l'entrée/sortie standard
"extensions": [".custom"] // Spécifie quelles extensions de fichier ce serveur LSP gère
}
}
}
Vous pouvez également configurer des variables d'environnement et des options d'initialisation pour un serveur LSP personnalisé, exactement comme pour les serveurs intégrés :
Exemple
"$schema": "https://opencode.ai/config.json",
"lsp": {
"my-lang-server": {
"command": ["my-lang-server", "--stdio", "--log-level", "warn"],
"extensions": [".mylang", ".ml2"], // Prend en charge la liaison de plusieurs extensions de fichier en même temps
"env": {
"MY_LSP_HOME": "/usr/local/my-lang" // Injecte les variables d'environnement requises pour le processus du serveur
},
"initialization": {
"formatOnSave": true // Transmet les options d'initialisation définies dans la documentation du serveur
}
}
}
}
Notes supplémentaires
Licence PHP Intelephense
PHP Intelephense propose une version gratuite et une version premium payante. La version premium est déverrouillée via une clé de licence et inclut des fonctionnalités améliorées telles que le tri des imports, le pliage du code, la visualisation de la hiérarchie des appels, etc. Si vous avez acheté une licence, écrivez simplement la clé dans un fichier texte au chemin suivant pour l'activer automatiquement, sans configuration supplémentaire :
| Système d'exploitation | Chemin du fichier de licence |
|---|---|
| macOS / Linux | $HOME/intelephense/license.txt |
| Windows | %USERPROFILE%/intelephense/license.txt |
Le fichier de licence doit contenir uniquement la clé de licence elle-même. N'ajoutez aucun autre contenu (y compris des espaces ou des sauts de ligne supplémentaires), sinon l'activation peut échouer.
Désactiver le téléchargement automatique
Par défaut, OpenCode télécharge automatiquement le serveur LSP requis depuis le réseau lorsqu'il détecte une extension de fichier correspondante. Si vous êtes dans un environnement à réseau restreint, ou si vous préférez gérer les outils LSP entièrement manuellement, vous pouvez désactiver les téléchargements automatiques en définissant la variable d'environnement suivante :
# Linux / macOS:临时禁用(仅当前终端会话有效) export OPENCODE_DISABLE_LSP_DOWNLOAD=true # Linux / macOS:永久禁用(写入 shell 配置文件) echo 'export OPENCODE_DISABLE_LSP_DOWNLOAD=true' >> ~/.bashrc source ~/.bashrc # Windows(PowerShell:仅当前会话) $env:OPENCODE_DISABLE_LSP_DOWNLOAD = "true"
Une fois désactivé, OpenCode ne téléchargera plus automatiquement aucun serveur LSP, mais les outils LSP déjà préinstallés sur le système peuvent toujours être détectés et utilisés normalement.
Autres extensions