LSP 서버
OpenCode는 LSP 서버와 통합됩니다.
OpenCode는 Language Server Protocol (LSP)과 통합하여 LLM이 코드베이스와 상호작용하도록 돕습니다. 진단 정보를 사용하여 LLM에 피드백을 제공합니다.
내장 지원
OpenCode에는 인기 언어를 위한 여러 내장 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 의존성 |
| fsharp | .fs, .fsi, .fsx, .fsscript | .NET SDK 설치됨 |
| gleam | .gleam | gleam 명령어 사용 가능 |
| gopls | .go | go 명령어 사용 가능 |
| hls | .hs, .lhs | haskell-language-server-wrapper 명령어 사용 가능 |
| jdtls | .java | Java SDK (버전 21+) 설치됨 |
| 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 의존성 |
| php intelephense | .php | PHP 프로젝트에 자동 설치 |
| prisma | .prisma | prisma 명령어 사용 가능 |
| pyright | .py, .pyi | pyright 의존성 설치됨 |
| 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 의존성 |
| vue | .vue | Vue 프로젝트에 자동 설치 |
| yaml-ls | .yaml, .yml | Red Hat yaml-language-server 자동 설치 |
| zls | .zig, .zon | zig 명령어 사용 가능 |
위 파일 확장자 중 하나가 감지되고 요구사항이 충족되면 LSP 서버가 자동으로 활성화됩니다.
참고:
OPENCODE_DISABLE_LSP_DOWNLOAD환경 변수를true로 설정하여 자동 LSP 서버 다운로드를 비활성화할 수 있습니다.
작동 방식
opencode가 파일을 열면:
- 파일 확장자를 활성화된 모든 LSP 서버와 대조합니다.
- 아직 실행 중이 아니면 적절한 LSP 서버를 시작합니다.
설정
opencode 설정의 lsp 섹션을 통해 LSP 서버를 사용자 정의할 수 있습니다.
{
"$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 서버 시작 시 환경 변수를 설정:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}초기화 옵션
initialization 속성을 사용하여 LSP 서버에 초기화 옵션을 전달합니다. 이는 LSP initialize 요청 중에 전송되는 서버별 설정입니다:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}참고: 초기화 옵션은 LSP 서버마다 다릅니다. 사용 가능한 옵션은 LSP 서버 문서를 확인하세요.
LSP 서버 비활성화
모든 LSP 서버를 전역적으로 비활성화하려면 lsp를 false로 설정:
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}특정 LSP 서버를 비활성화하려면 disabled를 true로 설정:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}사용자 정의 LSP 서버
명령어와 파일 확장자를 지정하여 사용자 정의 LSP 서버를 추가할 수 있습니다:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}추가 정보
PHP Intelephense
PHP Intelephense는 라이선스 키를 통해 프리미엄 기능을 제공합니다. 다음 위치의 텍스트 파일에 라이선스 키만 넣어 제공할 수 있습니다:
- macOS/Linux:
$HOME/intelephense/licence.txt - Windows:
%USERPROFILE%/intelephense/licence.txt
파일에는 라이선스 키만 포함되어야 하며 추가 내용이 없어야 합니다.