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