Give GitHub Copilot CLI real code intelligence with language servers
개요
GitHub Copilot CLI에 Language Server Protocol(LSP) 서버를 설치 및 구성하여, 기존의 텍스트 검색 방식에서 벗어나 코드에 대한 실제적인 지능을 제공하는 새로운 기능이 소개되었습니다.
주요 내용
* 기존 코드 이해 방식의 한계: GitHub Copilot CLI가 LSP 서버 없이 코드 정보를 파악할 때, JAR 파일 추출, .class 파일 grep, 바이트코드에서 API 시그니처 추출 등과 같은 휴리스틱(heuristic) 방식을 사용합니다. 이는 제네릭(generics), 오버로드(overloads), 전이적 타입(transitive types)을 놓치거나 컴파일된 바이트코드를 전혀 이해하지 못하는 한계를 가집니다.
* LSP 서버의 작동 방식: LSP 서버는 textDocument/definition 요청 시 정확한 소스 위치, 완전하게 해석된 타입, 시그니처를 반환하여 구조적인 코드 이해를 가능하게 합니다.
* LSP Setup Skill의 워크플로우:
1. 언어 선택: 사용자로부터 LSP 지원이 필요한 언어를 선택받습니다.
2. 운영 체제 감지: uname -s 등을 통해 대상 운영 체제를 파악합니다.
3. LSP 서버 조회: 14개 언어에 대한 설치 명령, 바이너리 이름, 구성 스니펫이 포함된 references/lsp-servers.md 파일을 참조하여 해당 언어에 맞는 LSP 서버 정보를 찾습니다.
4. 구성 범위 설정: 구성 파일 위치를 사용자 레벨(~/.copilot/lsp-config.json) 또는 리포지토리 레벨(lsp.json 또는 .github/lsp.json)로 지정합니다. 리포지토리 레벨 설정이 우선 적용됩니다.
5. 설치: 감지된 운영 체제에 맞는 LSP 서버 설치 명령(npm install, brew install, rustup component add 등)을 실행합니다.
6. 구성: 지정된 구성 파일에 lspServers 객체 형태로 LSP 서버 정보를 작성하거나 병합합니다. command, args, fileExtensions 등이 포함되며, 기존 설정은 보존됩니다.
7. 검증: which <binary> 또는 where.exe로 서버 접근성을 확인하고, 구성 파일이 유효한 JSON 형식인지 검증합니다.
* 지원 언어 및 수동 구성: 현재 14개 언어에 대한 사전 정의된 LSP 서버가 포함되어 있으며, 지원되지 않는 언어의 경우 적절한 서버를 검색하고 수동 구성 과정을 안내합니다.
* 설정 후 변화: LSP 서버 구성 후, Copilot CLI는 의존성을 포함한 코드의 타입을 해결하고, 타사 라이브러리의 정의로 이동하며, 심볼의 모든 참조를 찾고, 함수/클래스/타입에 대한 호버 문서를 읽을 수 있게 됩니다. 이는 에이전트의 도구 호출 시간을 줄이고 첫 번째 결과의 정확성을 높입니다.
* 시작 방법: ZIP 파일을 다운로드하여 ~/.copilot/skills/에 압축 해제한 후 Copilot CLI를 재시작하고, "set up LSP for Java"와 같은 명령으로 언어 서버를 설정합니다. 설정 후 Copilot CLI를 다시 시작하고 /lsp 명령으로 상태를 확인하며, 의존성의 심볼에 대해 정의로 이동을 시도하여 작동을 검증할 수 있습니다.
시사점
GitHub Copilot CLI에 LSP를 통합함으로써, 개발자는 IDE와 유사한 수준의 코드 이해를 터미널 환경에서도 얻을 수 있어 복잡한 코드 베이스에 대한 작업 효율성과 결과의 신뢰성을 크게 향상시킬 수 있습니다.
댓글
GitHub Discussions