마이크로소프트, 파이썬 타입 분석 위한 TSP 공개
원제 Type Server Protocol
134 포인트댓글 91
Key Point
Pylance 등 파이썬 개발 도구가 타입 분석을 외부 서버와 통신하는 방식을 표준화하므로, 타입 체커·언어 서버 개발자가 정확한 구현을 할 수 있다.
핵심 요약
- 마이크로소프트가 파이썬 타입 분석 데이터를 요청하는 JSON-RPC 프로토콜인 Type Server Protocol(TSP)을 공개했다.
- TSP는 타입 서버가 워크스페이스의 타입 분석 상태를 유지하고 프로토콜 버전, 스냅샷, 파이썬 검색 경로, import 해석, 타입 쿼리(computed/declared/expected) 등의 요청에 답한다.
- 프로토콜은 LSP의 Position, Range 등 데이터 형태와 규칙을 따르며 URI는 LSP와 동일하게 문자열로 표현한다.
- 0.1.0부터 0.4.1까지 진화했으며, 0.x 라인에서는 마이너 버전 변경이 breaking일 수 있고 패치 버전은 하위 호환된다.
- 클라이언트가 타입 서버를 시작하고 stdio 또는 Node IPC 등의 전송 방식으로 JSON-RPC 연결을 통해 통신한다.
- 클라이언트는 먼저 typeServer/getSupportedProtocolVersion으로 호환성을 확인한 뒤 typeServer/getSnapshot으로 스냅샷을 얻고, 타입 쿼리를 보낸다.
- 다중 연결 모드는 선택적 성능 기능으로, 클라이언트가 메인 연결은 유지하면서 추가 채널을 통해 읽기 전용 TSP 요청을 보낼 수 있다.
- 다중 연결은 LSP initialize 요청/응답에서 capabilities.experimental.typeServerMultiConnection을 통해 협상하며, 양쪽이 지원하고 공통 전송 방식이 있을 때 활성화된다.
- 클라이언트는 typeServer/connection 요청으로 ipc 엔드포인트를 통해 추가 채널을 열고 닫는다.
- 메인 연결은 모든 상태 변경 트래픽(LSP 초기화, workspace/document 동기화, snapshot 알림, connection 제어)을 소유하며, 추가 연결은 읽기 전용 TSP 요청만 허용된다.
- 스냅샷은 타입 서버의 분석 상태를 나타내는 음이 아닌 정수이며, 파일 변경·설정 변경·캐시 재설정 등 분석 결과를 무효화하는 이벤트 시 증가한다.
- 타입 결과는 kind, id, flags 필드를 포함한 JSON 직렬화 객체이며 BuiltIn, Declared, Function, Class, Union, Module, TypeVar, Overloaded, Synthesized, TypeReference 등 10가지 타입을 지원한다.
- 프로토콜은 getSupportedProtocolVersion, getSnapshot, snapshotChanged, connection, getPythonSearchPaths, resolveImport, getComputedType, getDeclaredType, getExpectedType 9개 메시지를 정의한다.