컨텐츠로 건너뛰기

LSP 서버

LSP 서버

OpenCode는 Language Server Protocol (LSP) 서버와 통합하여 에이전트에 대한 피드백으로 진단을 사용할 수 있습니다.


기본 제공

OpenCode에는 인기 있는 언어에 대한 여러 기본 제공 LSP 서버가 포함되어 있습니다:

LSP 서버확장자요건
astro.astroAstro 프로젝트용 자동 설치
bash.sh, .bash, .zsh, .kshbash-language-server 자동 설치
clangd.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++C/C++ 프로젝트용 자동 설치
csharp.cs, .csx.NET SDK 설치됨
clojure-lsp.clj, .cljs, .cljc, .ednclojure-lsp 명령 사용 가능
dart.dartdart 명령 사용 가능
deno.ts, .tsx, .js, .jsx, .mjsdeno 명령 사용 가능 (deno.json/deno.jsonc 자동 감지)
elixir-ls.ex, .exselixir 명령 사용 가능
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue프로젝트에 eslint 종속성
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK 설치됨
gleam.gleamgleam 명령 사용 가능
gopls.gogo 명령 사용 가능
hls.hs, .lhshaskell-language-server-wrapper 명령 사용 가능
jdtls.javaJava SDK (version 21+) 설치됨
julials.jljuliaLanguageServer.jl 설치됨
kotlin-ls.kt, .ktsKotlin 프로젝트용 자동 설치
lua-ls.luaLua 프로젝트용 자동 설치
nixd.nixnixd 명령 사용 가능
ocaml-lsp.ml, .mliocamllsp 명령 사용 가능
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte프로젝트에 oxlint 종속성
php intelephense.phpPHP 프로젝트용 자동 설치
prisma.prismaprisma 명령 사용 가능
pyright.py, .pyipyright 종속성 설치됨
razor.razor, .cshtml.NET SDK 및 VS Code C# 확장 설치됨
ruby-lsp (rubocop).rb, .rake, .gemspec, .rurubygem 명령 사용 가능
rust.rsrust-analyzer 명령 사용 가능
sourcekit-lsp.swift, .objc, .objcppswift 설치됨 (macOS의 경우 xcode)
svelte.svelteSvelte 프로젝트용 자동 설치
terraform.tf, .tfvarsGitHub 릴리스에서 자동 설치
tinymist.typ, .typcGitHub 릴리스에서 자동 설치
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts프로젝트에 typescript 종속성
vue.vueVue 프로젝트용 자동 설치
yaml-ls.yaml, .ymlRed Hat yaml-language-server 자동 설치
zls.zig, .zonzig 명령 사용 가능

LSP는 기본적으로 비활성화되어 있습니다. 활성화되면 서버가 위의 파일 확장자 중 하나가 감지되고 요건이 충족되면 시작됩니다.


작동 방식

LSP가 활성화되고 opencode가 파일을 열면:

  1. 파일 확장자를 모든 활성화된 LSP 서버와 대조
  2. 아직 실행 중이 아니면 적절한 LSP 서버 시작

모범 사례

LSP는 언어 서버의 진단을 제공하여 에이전트가 문제를 찾고 수정하는 데 도움이 될 수 있습니다. 이는 일부 프로젝트에서 유용하지만 항상 순전한 이점은 아닙니다.

언어 서버가 동기화되지 않을 수 있고, 상당한 메모리를 사용하며, 버전이나 프로젝트에 따라 다르고, 에이전트 워크플로우를 늦출 수 있습니다. 많은 프로젝트에서 에이전트가 lint, typecheck 또는 기타 진단 CLI 도구를 직접 실행하는 것이 더 좋습니다. 이렇게 하면 이러한 균형 문제 없이 에이전트 루프에 오류가 피드백됩니다. 에이전트가 실행할 명령을 알 수 있도록 AGENTS.md 또는 skills와 같은 지침 파일에 해당 명령을 문서화하세요. 프로젝트가 추가 언어 서버 피드백의 이점을 누릴 때 LSP를 활성화하세요.


구성

opencode 구성의 lsp 섹션을 통해 LSP 서버를 활성화하고 사용자 정의할 수 있습니다.

모든 기본 제공 LSP 서버를 활성화하려면 lsptrue로 설정합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": true
}

기본 제공을 활성화 상태로 유지하면서 재정의 또는 커스텀 서버 구성을 구성하려면 객체를 사용합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {}
}

구성된 각 LSP 서버 항목은 다음을 지원합니다:

서버 항목은 서버만 비활성화하는 경우가 아니면 command가 필요합니다.

속성타입설명
disabledbooleanLSP 서버를 비활성화하려면 true로 설정
commandstring[]LSP 서버를 시작하는 명령
extensionsstring[]이 LSP 서버가 처리해야 하는 파일 확장자
envobject서버 시작 시 설정할 환경 변수
initializationobjectLSP 서버에 보낼 초기화 옵션

환경 변수

env 속성을 사용하여 LSP 서버 시작 시 환경 변수를 설정합니다:

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "rust": {
      "command": ["rust-analyzer"],
      "env": {
        "RUST_LOG": "debug"
      }
    }
  }
}

초기화 옵션

initialization 속성을 사용하여 LSP 서버에 초기화 옵션을 전달합니다. 이들은 LSP initialize 요청 중 서버에 전송되는 서버별 설정입니다:

{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "custom-lsp": {
      "command": ["custom-lsp-server", "--stdio"],
      "extensions": [".custom"],
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
        }
      }
    }
  }
}

LSP 서버 비활성화

lsp가 생략되면 모든 LSP 서버가 비활성화됩니다. 다른 구성이 활성화한 후 모든 LSP 서버를 비활성화하려면 lspfalse로 설정합니다:

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

특정 LSP 서버를 비활성화하려면 disabledtrue로 설정합니다:

{
  "$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/license.txt
  • Windows: %USERPROFILE%/intelephense/license.txt

파일에는 추가 콘텐츠 없이 라이선스 키만 포함되어야 합니다.