이 페이지는 oxc_language_server의 주요 개념과 명령줄 인터페이스(CLI)와의 차이점을 설명합니다.
언어 서버와 에디터 간의 통신 방식을 더 깊게 알고 싶다면, 공식 LSP/LSIF 문서가 좋은 시작점입니다.
언어 서버의 README.md는 관련 사양에 대한 빠른 개요를 제공합니다.
주의: 이 문서에서는
oxlint와oxfmt의 핵심 로직에 대한 추상적 개념인 "도구"(tools)에 대해 자주 언급합니다.
도구를 구현하는 oxc_language_server의 개념
oxc_language_server는 자체 스크립트에 언어 서버 기능을 추가할 수 있도록 사용할 수 있습니다.
서버 자체는 파일을 변경하거나 제안을 생성하지 않습니다. 이는 도구의 책임입니다.
대신 서버는 워크스페이스 폴더를 관리하고 적절한 구성 정보를 불러오기 위한 모든 통신을 처리합니다.
제공된 도구와 통신하기 위해, 서버는 ToolBuilder 및 Tool 트레잇을 제공합니다.
언어 서버와 CLI 간의 차이
에디터가 파일을 변경하고, 서버는 변경 사항을 전달한다
파일과 그 수정 내용 간의 통신에 관한 작은 그러나 중요한 점입니다.
명령줄 도구(CLI Tools)는 변경 사항을 파일 시스템에 직접 쓰지만, (oxc) 언어 서버는 절대 파일 시스템에 쓰면 안 됩니다. 대신 변경 사항을 에디터에게 전달해야 합니다.
워크스페이스 폴더
에디터에서 깃 프로젝트를 열었을 때를 생각해 보세요. 이것이 바로 워크스페이스 폴더입니다.
LSP는 동시에 여러 개의 (깃) 프로젝트를 열 수 있는 개념을 가지고 있습니다.
각 프로젝트는 자체 구성(설정)을 가질 수 있으며(다음 부분 참조), 가장 중요한 것은 각각 고유한 "컨텍스트"와 워크스페이스 URI를 가지는 것입니다.
워크스페이스 URI는 명령줄 도구의 "현재 작업 디렉터리"와 비슷하게 생각할 수 있습니다.
워크스페이스 폴더는 에디터에 의해 추가되거나 제거될 수 있음을 기억하세요.
구성(폴더 포함)
언어 서버는 명령줄 플래그처럼 구성할 수 있으며, oxc 언어 서버는 다음과 같은 개념을 따릅니다:
각 워크스페이스 폴더는 자체 구성(설정)을 가질 수 있습니다. 예를 들어, 깃 프로젝트 A는 타입 인식 린트를 사용하고, 깃 프로젝트 B는 자동 저장 시 위험한 수정을 사용합니다.
구성 변경
놀랍죠! 사용자는 실시간으로 언어 서버 구성(설정)을 변경할 수 있습니다. 에디터는 업데이트된 구성(설정)을 우리에게 전달합니다.
현재 서버는 각 도구에게 이전 구성(설정)과 새 구성(설정)을 모두 전달하므로, 도구는 다양한 상황을 처리할 수 있습니다.
구성(설정)에 따라 도구는 다시 시작하거나 재빌드할 수 있습니다.
감시 패턴 및 감시 대상 파일 변경
도구는 특정 파일(글로브 패턴)을 감시하도록 에디터에 요청하고, 파일이 변경/생성/삭제되었을 때 서버에 알릴 수 있습니다.
이것은 주로 .ox**rc.json 구성 파일과 그 안에 참조된 파일들(예: oxlint의 extends)에 사용됩니다.
워크스페이스와 도구의 구성(설정)에 따라 도구는 다시 시작하거나 재빌드되어야 할 수도 있습니다.
