이 글은 2024년 상반기에 이루어진 Ruby LSP의 주요 개선 사항, 특히 코드 네비게이션 기능 향상에 대해 상세히 설명합니다. Ruby LSP의 인덱서가 발전함에 따라 에디터에서 제공되는 호버, 정의 이동, 자동 완성, 시그니처 도움말 등 핵심 네비게이션 기능들이 대폭 강화되었습니다. 이러한 개선들은 Ruby 개발자가 코드를 더 효율적으로 탐색하고 이해하며 작성하는 데 크게 기여합니다.
Ruby LSP는 개발 생산성을 높이는 핵심 네비게이션 기능인 호버(Hover), 정의 이동(Go-to-Definition), 자동 완성(Completion), 시그니처 도움말(Signature Help)을 다양한 영역에서 개선했습니다.
우선, 싱글톤 메소드에 대한 모든 코드 네비게이션 기능이 크게 향상되었습니다. 또한, 로컬 변수에 대한 자동 완성 지원이 추가되어 변수의 스코프 및 사용을 더 쉽게 파악할 수 있게 되었습니다.
가장 주목할 만한 개선은 상속 및 믹스인(Inheritance and Mixins) 지원 강화입니다. Ruby LSP의 인덱서가 프로그램의 상속 계층을 추정할 수 있게 되면서, 슈퍼클래스와 믹스인(prepend
, include
, extend
)을 통해 정의된 메소드, 변수, 상수를 탐색할 수 있게 되었습니다. 그 결과, 상속된 싱글톤 메소드, super
키워드에 대한 호버 및 정의 이동, 상속된 메소드 및 인스턴스/클래스 인스턴스 변수에 대한 포괄적인 네비게이션 기능이 지원됩니다. 다만, autoload
나 런타임 믹스인 등 Ruby의 동적인 특성으로 인한 일부 제한 사항은 여전히 존재합니다.
Ruby 코어 클래스, 모듈, 메소드(예: String
, Enumerable
)에 대한 네비게이션 지원도 추가되었습니다. 호버 시 문서가 표시되고, 정의 이동 시 RBS 선언으로 이동하며, 자동 완성 및 시그니처 도움말이 제공됩니다. 현재 리터럴 값에 대한 지원은 제한적이지만, 향후 타입 추론기 개발을 통해 개선될 예정입니다.
Ruby on Rails 개발자를 위한 Rails 애드온 역시 코드 네비게이션 기능이 크게 강화되었습니다. ActiveRecord 모델 콜백 및 연관 관계를 통해 모델 정의 간 이동이 가능해졌습니다. 컨트롤러, 라우트 정의, 뷰 파일 간의 네비게이션도 개선되었습니다. 특히, 라우트 헬퍼에 대한 정의 이동과 액션 메소드 상단의 CodeLens를 통해 라우트 및 뷰로의 이동이 편리해졌습니다. 더불어, .erb
파일 내의 Ruby 코드에 대한 모든 코드 네비게이션 기능이 지원되어 Rails 뷰 개발 경험이 크게 향상되었습니다.
이러한 안정적인 기능 개선과 더불어, Ruby LSP 팀은 실험적인 기능 개발도 활발히 진행 중입니다. 상속 계층 요청(Ancestors Hierarchy Request)은 클래스/모듈의 상속 관계를 시각화하고 탐색하는 기능으로, LSP 프로토콜 적용의 모호성으로 인해 실험 단계에 있습니다. 추정 타입(Guessed Types) 기능은 변수 이름을 기반으로 타입을 추정하여 자동 완성 등을 개선하려는 시도로, 기본 비활성화되어 있으며 이름 기반 추론의 한계가 있습니다.
결론적으로, 2024년 상반기의 Ruby LSP는 코드 네비게이션 기능을 중심으로 상당한 발전을 이루었습니다. 싱글톤 메소드, 상속, 코어 라이브러리 지원 강화부터 Rails 애드온 및 ERB 파일 지원에 이르기까지, 이러한 개선 사항들은 Ruby 개발자가 코드를 더 효율적으로 탐색하고 이해하며 작성하는 데 큰 도움을 줍니다. Ruby LSP는 Shopify의 Ruby Developer Experience 팀이 주도하지만, 오픈 소스 프로젝트로서 커뮤니티와 함께 발전하며 새로운 LSP 기능을 도입하고 창의적인 접근 방식을 계속 모색할 것입니다. 새로운 기능들을 적극 활용해 보시고 GitHub 이슈나 Slack 채널을 통해 피드백을 공유해 주시면 감사하겠습니다.