이 페이지는 oxc_language_server의 핵심 개념과 CLI와의 차이를 설명합니다. 언어 서버와 에디터 간 통신을 더 알고 싶다면 공식 LSP/LSIF 문서가 좋은 시작점입니다. 언어 서버의 README.md에 관련 스펙 요약이 있습니다.
참고: 이 문서에서 "도구"라고 말할 때는 oxlint와 oxfmt의 핵심 로직을 추상적으로 가리킵니다.
도구를 구현하는 oxc_language_server 개념
oxc_language_server는 자체 스크립트를 언어 서버로 동작하도록 확장하는 데 쓸 수 있습니다. 서버는 파일을 직접 바꾸거나 제안을 만들지 않습니다. 그 책임은 도구에 있습니다. 대신 워크스페이스 폴더와 올바른 설정을 불러오기 위한 통신을 관리합니다. 제공된 도구와 통신하려면 ToolBuilder와 Tool 트레이트를 제공합니다.
언어 서버와 CLI의 차이
바꾸는 주체는 에디터, 서버는 변경 사항을 알린다
파일과 수정이 오가는 방식에서 작지만 중요한 점입니다. CLI 도구는 변경을 파일 시스템에 씁니다. (oxc) 언어 서버는 절대 디스크에 쓰지 않고, 에디터에 변경만 전달합니다.
워크스페이스 폴더
에디터에서 git 프로젝트를 열면 그게 워크스페이스 폴더입니다. LSP는 여러 (git) 프로젝트를 동시에 열 수 있습니다. 각 프로젝트는 자체 설정을 가질 수 있습니다(다음 절). 가장 중요한 것은 워크스페이스 URI마다 자체 "컨텍스트"가 있다는 점입니다. 워크스페이스 URI는 CLI 도구의 "현재 작업 디렉터리"와 같다고 생각하면 됩니다. 에디터가 워크스페이스 폴더를 추가·제거할 수 있다는 점도 기억하세요.
설정(폴더별)
언어 서버도(CLI 플래그처럼) 설정할 수 있으며, oxc 언어 서버는 다음 개념을 따릅니다. 각 워크스페이스 폴더마다 설정이 따로 있을 수 있습니다. 예: git 프로젝트 A는 타입 인지 린팅, 프로젝트 B는 자동 저장 시 위험한 수정.
설정 변경
사용자는 언어 서버 설정을 실행 중에 바꿀 수 있습니다. 에디터가 갱신된 설정을 보냅니다. 현재 서버는 각 도구에 이전 설정과 새 설정을 모두 보내 다양한 처리를 할 수 있게 합니다. 설정에 따라 도구는 재시작·재빌드가 필요할 수 있습니다.
감시 패턴과 감시 파일 변경
도구는 특정 파일(glob) 패턴을 에디터에 감시하도록 요청하고, 파일이 바뀌거나 만들어지거나 삭제될 때 서버에 알릴 수 있습니다. 대부분 .ox**rc.json 설정과 그 안의 참조 파일(oxlint의 extends 등)에 씁니다. 워크스페이스·도구 설정에 따라 도구를 다시 시작하거나 다시 빌드해야 할 수도 있습니다.