Ch12. LSP 코드 인텔리전스
29+ 언어 LSP 통합, 커스텀 LSP 서버, 서버 아키텍처
OpenCode는 29개 이상의 LSP 서버를 내장하고 있어, 파일 확장자 기반으로 자동 실행되며 LLM에 진단 정보를 제공합니다.
지원 언어
별도 설치 없이 OpenCode가 자동으로 LSP 서버를 다운로드합니다.
Astro, Kotlin, Lua, PHP, SVG, Vue, YAML, Terraform, Typst
해당 언어 툴체인이 시스템에 설치되어 있어야 합니다.
| 언어 | LSP 서버 |
|---|---|
| TypeScript/JavaScript | 내장 |
| ESLint | 내장 |
| Deno | deno lsp |
| Svelte | svelte-language-server |
| Rust | rust-analyzer |
| C/C++ | clangd |
| Go | gopls |
| Python | pyright |
| Java | jdtls (Java SDK 21+ 필요) |
| Scala | metals |
| Clojure | clojure-lsp |
| Ruby | solargraph |
| Elixir | elixir-ls |
| Haskell | hls |
| OCaml | ocamllsp |
| F# | fsautocomplete |
| C# | OmniSharp |
| Swift | sourcekit-lsp |
| Dart | dart analyze |
| Gleam | gleam lsp |
| Nix | nil |
| Bash | bash-language-server |
| Zig | zls |
| Julia | LanguageServer.jl (v1.2.7+) |
LSP 설정
기본 설정
{
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
},
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}커스텀 LSP 서버
표준 목록에 없는 LSP 서버를 등록할 수 있습니다.
{
"lsp": {
"custom-lang": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}LSP 비활성화
// 전체 비활성화
{ "lsp": false }
// 특정 서버만 비활성화
{
"lsp": {
"typescript": { "disabled": true }
}
}구문 강조 확장 (v1.3.1+)
v1.3.1에서 다음 언어의 구문 강조(Syntax Highlighting)가 추가되었습니다:
| 언어 | 파일 확장자 |
|---|---|
| Kotlin | .kt, .kts |
| HCL | .hcl, .tf |
| Lua | .lua |
| TOML | .toml |
기존 LSP 지원과 별개로, TUI와 diff 뷰에서 해당 언어의 코드 가독성이 향상됩니다.
힙 스냅샷 (v1.3.2+)
v1.3.2에서 힙 스냅샷(Heap Snapshot) 기능이 추가되었습니다. 메모리 사용량 디버깅과 성능 프로파일링에 활용할 수 있습니다. 장시간 실행되는 에이전트 세션에서 메모리 누수를 진단하는 데 유용합니다.
실험적 LSP 도구
LLM이 LSP 서버에 직접 쿼리할 수 있는 실험적 도구입니다.
OPENCODE_EXPERIMENTAL_LSP_TOOL=true opencode활성화하면 에이전트가 심볼 검색, 정의 이동, 참조 찾기 등을 직접 수행할 수 있습니다.
서버 아키텍처
OpenCode는 클라이언트/서버 아키텍처를 사용합니다.
| 명령어 | 설명 |
|---|---|
opencode serve | 헤드리스 서버 시작 (API 접근) |
opencode web | 웹 인터페이스 포함 서버 시작 |
opencode attach [url] | 원격 서버에 TUI 클라이언트 연결 |
원격 운영 활용
# 서버 머신에서
OPENCODE_SERVER_PASSWORD=secret opencode serve
# 로컬에서 연결
opencode attach http://server:3000이를 통해 GPU 서버에서 실행하고 로컬에서 접근하는 구성이 가능합니다.
고급 팁
- LSP 자동 설치 방지:
OPENCODE_DISABLE_LSP_DOWNLOAD=true로 네트워크 없는 환경 대응 - 프로젝트별 LSP 설정:
opencode.json에서 프로젝트에 맞는 LSP 초기화 옵션 지정 - 진단 정보 활용: LSP 진단이 LLM에 자동 전달되어 타입 오류 수정 정확도 향상
- 서버 분리 운영:
opencode serve로 리소스가 풍부한 서버에서 실행
참고 문서
- LSP 통합: https://opencode.ai/docs/lsp/
- 서버 모드: https://opencode.ai/docs/cli
- 네트워크/프록시: https://opencode.ai/docs/network