---
title: Serveurs LSP
description: 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.

:::note
Vous pouvez désactiver les téléchargements automatiques du serveur LSP en définissant la variable d'environnement `OPENCODE_DISABLE_LSP_DOWNLOAD` sur `true`.
:::

---

## Comment ça marche

Lorsque LSP est activé et qu'opencode ouvre un fichier, il :

1. Vérifie l'extension du fichier par rapport à tous les serveurs LSP activés.
2. 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`.

```json title="opencode.json"
{
  "$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.

```json title="opencode.json"
{
  "$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 :

```json title="opencode.json" {5-7}
{
  "$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` :

```json title="opencode.json" {5-9}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
        }
      }
    }
  }
}
```

:::note
Les options d'initialisation varient selon le serveur LSP. Consultez la documentation de votre serveur LSP pour connaître les options disponibles.
:::

---

### 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` :

```json title="opencode.json" {3}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": false
}
```

Pour désactiver un serveur LSP **spécifique**, définissez `disabled` sur `true` :

```json title="opencode.json" {5}
{
  "$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 :

```json title="opencode.json" {4-7}
{
  "$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.
