File size: 11,002 Bytes
0dbc9de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | ---
title: LSP μλ²
description: OpenCodeλ LSP μλ²μ ν΅ν©λ©λλ€.
---
OpenCodeλ Language Server Protocol(LSP) μλ²μ ν΅ν©ν΄ μ§λ¨ μ 보λ₯Ό agentμ νΌλλ°±μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
---
## κΈ°λ³Έ μ 곡 (Built-in)
OpenCodeλ λ리 μ¬μ©λλ μΈμ΄λ₯Ό μν΄ μ¬λ¬ built-in LSP μλ²λ₯Ό μ 곡ν©λλ€.
| LSP μλ² | νμ₯μ | μꡬ μ¬ν |
| ------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------- |
| astro | .astro | Astro νλ‘μ νΈμμ μλ μ€μΉ |
| bash | .sh, .bash, .zsh, .ksh | `bash-language-server` μλ μ€μΉ |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | C/C++ νλ‘μ νΈμμ μλ μ€μΉ |
| csharp | .cs | `.NET SDK` μ€μΉλ¨ |
| clojure-lsp | .clj, .cljs, .cljc, .edn | `clojure-lsp` λͺ
λ Ή μ¬μ© κ°λ₯ |
| dart | .dart | `dart` λͺ
λ Ή μ¬μ© κ°λ₯ |
| deno | .ts, .tsx, .js, .jsx, .mjs | `deno` λͺ
λ Ή μ¬μ© κ°λ₯ (`deno.json`/`deno.jsonc` μλ κ°μ§) |
| elixir-ls | .ex, .exs | `elixir` λͺ
λ Ή μ¬μ© κ°λ₯ |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | νλ‘μ νΈμ `eslint` dependency μ‘΄μ¬ |
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` μ€μΉλ¨ |
| gleam | .gleam | `gleam` λͺ
λ Ή μ¬μ© κ°λ₯ |
| gopls | .go | `go` λͺ
λ Ή μ¬μ© κ°λ₯ |
| hls | .hs, .lhs | `haskell-language-server-wrapper` λͺ
λ Ή μ¬μ© κ°λ₯ |
| jdtls | .java | `Java SDK (version 21+)` μ€μΉλ¨ |
| julials | .jl | `julia` λ° `LanguageServer.jl` μ€μΉλ¨ |
| kotlin-ls | .kt, .kts | Kotlin νλ‘μ νΈμμ μλ μ€μΉ |
| lua-ls | .lua | Lua νλ‘μ νΈμμ μλ μ€μΉ |
| nixd | .nix | `nixd` λͺ
λ Ή μ¬μ© κ°λ₯ |
| ocaml-lsp | .ml, .mli | `ocamllsp` λͺ
λ Ή μ¬μ© κ°λ₯ |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | νλ‘μ νΈμ `oxlint` dependency μ‘΄μ¬ |
| php intelephense | .php | PHP νλ‘μ νΈμμ μλ μ€μΉ |
| prisma | .prisma | `prisma` λͺ
λ Ή μ¬μ© κ°λ₯ |
| pyright | .py, .pyi | `pyright` dependency μ€μΉλ¨ |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | `ruby` λ° `gem` λͺ
λ Ή μ¬μ© κ°λ₯ |
| rust | .rs | `rust-analyzer` λͺ
λ Ή μ¬μ© κ°λ₯ |
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` μ€μΉλ¨ (macOSμμλ `xcode`) |
| svelte | .svelte | Svelte νλ‘μ νΈμμ μλ μ€μΉ |
| terraform | .tf, .tfvars | GitHub releasesμμ μλ μ€μΉ |
| tinymist | .typ, .typc | GitHub releasesμμ μλ μ€μΉ |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | νλ‘μ νΈμ `typescript` dependency μ‘΄μ¬ |
| vue | .vue | Vue νλ‘μ νΈμμ μλ μ€μΉ |
| yaml-ls | .yaml, .yml | Red Hat `yaml-language-server` μλ μ€μΉ |
| zls | .zig, .zon | `zig` λͺ
λ Ή μ¬μ© κ°λ₯ |
LSPλ κΈ°λ³Έμ μΌλ‘ λΉνμ±νλμ΄ μμ΅λλ€. νμ±ννλ©΄ μ νμ₯μ μ€ νλκ° κ°μ§λκ³ μꡬ μ¬νμ΄ μΆ©μ‘±λ λ μλ²κ° μμλ©λλ€.
:::note
`OPENCODE_DISABLE_LSP_DOWNLOAD` νκ²½ λ³μλ₯Ό `true`λ‘ μ€μ νλ©΄ LSP μλ² μλ λ€μ΄λ‘λλ₯Ό λΉνμ±νν μ μμ΅λλ€.
:::
---
## μλ λ°©μ
LSPκ° νμ±νλμ΄ μκ³ OpenCodeκ° νμΌμ μ΄λ©΄ λ€μκ³Ό κ°μ΄ λμν©λλ€.
1. νμ±νλ λͺ¨λ LSP μλ²μ λν΄ νμΌ νμ₯μλ₯Ό νμΈν©λλ€.
2. μ μ ν LSP μλ²κ° μμ§ μ€ν μ€μ΄μ§ μλ€λ©΄ μμν©λλ€.
---
## λͺ¨λ² μ¬λ‘
LSPλ μΈμ΄ μλ²μ μ§λ¨μ μ κ³΅ν΄ agentκ° λ¬Έμ λ₯Ό μ°Ύκ³ μμ νλ λ° λμμ μ€ μ μμ΅λλ€. μΌλΆ νλ‘μ νΈμμλ μ μ©νμ§λ§ νμ μμ΄μ΅μ΄ λλ κ²μ μλλλ€.
μΈμ΄ μλ²λ λκΈ°νκ° μ΄κΈλκ±°λ λ§μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκ±°λ λ²μ λλ νλ‘μ νΈμ λ°λΌ λ€λ₯΄κ² λμνκ³ agent μν¬νλ‘λ₯Ό λλ¦¬κ² λ§λ€ μ μμ΅λλ€. λ§μ νλ‘μ νΈμμλ agentκ° lint, typecheck λλ λ€λ₯Έ μ§λ¨μ© CLI λꡬλ₯Ό μ§μ μ€ννκ² νλ νΈμ΄ λ μ’μ΅λλ€. μ΄λ κ² νλ©΄ μ΄λ¬ν νΈλ μ΄λμ€ν μμ΄ μ€λ₯κ° agent 루νλ‘ λ€μ μ λ¬λ©λλ€. agentκ° λ¬΄μμ μ€νν΄μΌ νλμ§ μ μ μλλ‘ ν΄λΉ λͺ
λ Ήμ `AGENTS.md` λλ skills κ°μ instruction filesμ λ¬ΈμννμΈμ. νλ‘μ νΈκ° μΆκ° μΈμ΄ μλ² νΌλλ°±μ μ΄μ μ μ»μ λ LSPλ₯Ό νμ±ννμΈμ.
---
## ꡬμ±
OpenCode configμ `lsp` μΉμ
μμ LSP μλ²λ₯Ό νμ±ννκ³ μ¬μ©μ μ μν μ μμ΅λλ€.
λͺ¨λ λ΄μ₯ LSP μλ²λ₯Ό νμ±ννλ €λ©΄ `lsp`λ₯Ό `true`λ‘ μ€μ νμΈμ.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}
```
κ°μ²΄λ₯Ό μ¬μ©νλ©΄ λ΄μ₯ μλ²λ₯Ό νμ±νν μνλ‘ μ μ§νλ©΄μ μ€λ²λΌμ΄λλ μ¬μ©μ μ μ μλ²λ₯Ό ꡬμ±ν μ μμ΅λλ€.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
κ° LSP μλ²λ λ€μ μμ±μ μ§μν©λλ€.
| μμ± | νμ
| μ€λͺ
|
| ---------------- | -------- | --------------------------------------------- |
| `disabled` | boolean | LSP μλ²λ₯Ό λΉνμ±ννλ €λ©΄ `true`λ‘ μ€μ νμΈμ |
| `command` | string[] | LSP μλ²λ₯Ό μμνλ λͺ
λ Ήμ
λλ€ |
| `extensions` | string[] | μ΄ LSP μλ²κ° μ²λ¦¬ν νμΌ νμ₯μμ
λλ€ |
| `env` | object | μλ² μμ μ μ€μ ν νκ²½ λ³μμ
λλ€ |
| `initialization` | object | LSP μλ²λ‘ μ μ‘ν μ΄κΈ°ν μ΅μ
μ
λλ€ |
μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
---
### νκ²½ λ³μ
`env` μμ±μ μ¬μ©νλ©΄ LSP μλ² μμ μ νκ²½ λ³μλ₯Ό μ€μ ν μ μμ΅λλ€.
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### μ΄κΈ°ν μ΅μ
`initialization` μμ±μ μ¬μ©ν΄ LSP μλ²μ μ΄κΈ°ν μ΅μ
μ μ λ¬νμΈμ. μ΄ κ°μ LSP `initialize` μμ² μ€μ μ μ‘λλ μλ²λ³ μ€μ μ
λλ€.
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
μ΄κΈ°ν μ΅μ
μ LSP μλ²λ§λ€ λ€λ¦
λλ€. μ¬μ© κ°λ₯ν μ΅μ
μ ν΄λΉ LSP μλ² λ¬Έμλ₯Ό νμΈνμΈμ.
:::
---
### LSP μλ² λΉνμ±ν
`lsp`λ₯Ό μλ΅νλ©΄ λͺ¨λ LSP μλ²κ° λΉνμ±νλ©λλ€. λ€λ₯Έ configμμ νμ±νν λͺ¨λ LSP μλ²λ₯Ό λΉνμ±ννλ €λ©΄ `lsp`λ₯Ό `false`λ‘ μ€μ νμΈμ.
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
**νΉμ ** LSP μλ²λ₯Ό λΉνμ±ννλ €λ©΄ `disabled`λ₯Ό `true`λ‘ μ€μ νμΈμ.
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
## μ¬μ©μ μ μ LSP μλ²
λͺ
λ Ήκ³Ό νμΌ νμ₯μλ₯Ό μ§μ ν΄ μ¬μ©μ μ μ LSP μλ²λ₯Ό μΆκ°ν μ μμ΅λλ€.
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## μΆκ° μ 보
### PHP Intelephense
PHP Intelephenseλ λΌμ΄μ μ€ ν€λ₯Ό ν΅ν΄ ν리미μ κΈ°λ₯μ μ 곡ν©λλ€. ν
μ€νΈ νμΌμ ν€λ§ μ μ₯ν΄ λΌμ΄μ μ€ ν€λ₯Ό μ 곡ν μ μμ΅λλ€.
- macOS/Linux: `$HOME/intelephense/license.txt`
- Windows: `%USERPROFILE%/intelephense/license.txt`
νμΌμλ μΆκ° λ΄μ© μμ΄ λΌμ΄μ μ€ ν€λ§ ν¬ν¨νλ κ²μ΄ μ’μ΅λλ€.
|