Skip to content

이 페이지는 oxc_language_server의 주요 개념과 명령줄 인터페이스(CLI)와의 차이점을 설명합니다.
언어 서버와 에디터 간의 통신 방식을 더 깊게 알고 싶다면, 공식 LSP/LSIF 문서가 좋은 시작점입니다.
언어 서버의 README.md는 관련 사양에 대한 빠른 개요를 제공합니다.

주의: 이 문서에서는 oxlintoxfmt의 핵심 로직에 대한 추상적 개념인 "도구"(tools)에 대해 자주 언급합니다.

도구를 구현하는 oxc_language_server의 개념

oxc_language_server는 자체 스크립트에 언어 서버 기능을 추가할 수 있도록 사용할 수 있습니다.
서버 자체는 파일을 변경하거나 제안을 생성하지 않습니다. 이는 도구의 책임입니다.
대신 서버는 워크스페이스 폴더를 관리하고 적절한 구성 정보를 불러오기 위한 모든 통신을 처리합니다.
제공된 도구와 통신하기 위해, 서버는 ToolBuilderTool 트레잇을 제공합니다.

언어 서버와 CLI 간의 차이

에디터가 파일을 변경하고, 서버는 변경 사항을 전달한다

파일과 그 수정 내용 간의 통신에 관한 작은 그러나 중요한 점입니다.
명령줄 도구(CLI Tools)는 변경 사항을 파일 시스템에 직접 쓰지만, (oxc) 언어 서버는 절대 파일 시스템에 쓰면 안 됩니다. 대신 변경 사항을 에디터에게 전달해야 합니다.

워크스페이스 폴더

에디터에서 깃 프로젝트를 열었을 때를 생각해 보세요. 이것이 바로 워크스페이스 폴더입니다.
LSP는 동시에 여러 개의 (깃) 프로젝트를 열 수 있는 개념을 가지고 있습니다.
각 프로젝트는 자체 구성(설정)을 가질 수 있으며(다음 부분 참조), 가장 중요한 것은 각각 고유한 "컨텍스트"와 워크스페이스 URI를 가지는 것입니다.
워크스페이스 URI는 명령줄 도구의 "현재 작업 디렉터리"와 비슷하게 생각할 수 있습니다.
워크스페이스 폴더는 에디터에 의해 추가되거나 제거될 수 있음을 기억하세요.

구성(폴더 포함)

언어 서버는 명령줄 플래그처럼 구성할 수 있으며, oxc 언어 서버는 다음과 같은 개념을 따릅니다:
각 워크스페이스 폴더는 자체 구성(설정)을 가질 수 있습니다. 예를 들어, 깃 프로젝트 A는 타입 인식 린트를 사용하고, 깃 프로젝트 B는 자동 저장 시 위험한 수정을 사용합니다.

구성 변경

놀랍죠! 사용자는 실시간으로 언어 서버 구성(설정)을 변경할 수 있습니다. 에디터는 업데이트된 구성(설정)을 우리에게 전달합니다.
현재 서버는 각 도구에게 이전 구성(설정)과 새 구성(설정)을 모두 전달하므로, 도구는 다양한 상황을 처리할 수 있습니다.
구성(설정)에 따라 도구는 다시 시작하거나 재빌드할 수 있습니다.

감시 패턴 및 감시 대상 파일 변경

도구는 특정 파일(글로브 패턴)을 감시하도록 에디터에 요청하고, 파일이 변경/생성/삭제되었을 때 서버에 알릴 수 있습니다.
이것은 주로 .ox**rc.json 구성 파일과 그 안에 참조된 파일들(예: oxlintextends)에 사용됩니다.
워크스페이스와 도구의 구성(설정)에 따라 도구는 다시 시작하거나 재빌드되어야 할 수도 있습니다.