RuboCop과 AST: 과거, 현재, 그리고 미래

[JA] RuboCop: Modularity and AST Insights / Koichi ITO @koic

작성자
RubyKaigi
발행일
2025년 05월 27일

핵심 요약

  • 1 RuboCop은 비공식적 확장 방식을 공식 플러그인 시스템으로 전환하여 모듈성을 강화했습니다.
  • 2 Ruby LSP와의 통합을 통해 코드 분석 및 포맷팅 성능을 개선하고 파서 재사용을 목표로 합니다.
  • 3 RuboCop의 내부 파서가 Parser Gem에서 Prism으로 전환되어 Ruby 3.4+ 버전 지원 및 유지보수성을 향상했습니다.

도입

본 발표는 Ruby 개발 필수 도구 RuboCop의 최신 발전 동향을 소개합니다. RuboCop은 공식 플러그인 시스템 도입, Ruby LSP(Language Server Protocol) 통합, 그리고 내부 파서의 `Parser Gem`에서 `Prism`으로의 전환을 통해 모듈성, 성능, 유지보수성을 강화하고 있습니다. 이는 Ruby 개발 환경 개선을 목표로 합니다.

RuboCop은 RuboCop 1.7부터 기존 비공식 확장 방식에서 공식 플러그인 시스템으로 전환했습니다. LintRoller 중간 계층을 활용하여 플러그인 개발을 표준화하고, 비효율적인 코드 복사 문제를 해결했습니다. 이로써 확장성과 커스텀 Cop 관리가 용이해졌습니다.

Ruby LSP와의 통합도 중요합니다. Rails devcontainers에서 Ruby LSP가 기본 활성화되면서, RuboCop은 Ruby LSP Addon 기능을 활용, 자체 LSP 런타임을 재사용하도록 어댑터를 구현했습니다. 이는 코드 파싱 결과 재사용을 통한 성능 최적화와 중복 작업 감소에 기여하며, 통합 개발 경험 제공 가능성을 열었습니다.

마지막으로, RuboCop의 AST(Abstract Syntax Tree) 파서 변화가 핵심입니다. Parser Gem의 유지보수 문제와 Ruby 3.4+ 문법 미지원으로 RuboCop은 Prism으로의 전환을 추진했습니다. RuboCop 1.62부터 Prism을 옵셔널 백엔드로, 1.75부터는 Ruby 3.4+에서 기본 파서로 사용합니다. PrismParser Gem 인터페이스를 에뮬레이트하여 호환성을 유지하며, 최신 Ruby 버전 지원과 Prism의 활발한 개발 이점을 통해 RuboCop의 안정성과 성능을 향상시킵니다. 발표자는 미래에 AST 대신 CST(Concrete Syntax Tree) 사용 가능성 및 AI 기반 코드 어시스트를 통한 전환 자동화 가능성 등 파서 변화가 RuboCop 생태계에 미칠 영향에 대한 고민을 강조합니다.

결론

RuboCop은 공식 플러그인 시스템, Ruby LSP 통합, `Prism` 파서 전환을 통해 지속 발전하고 있습니다. 이러한 변화는 확장성, 개발 환경 통합성, 최신 Ruby 버전 지원을 강화하며, 특히 `Prism`으로의 전환은 효율적인 코드 검사 기반을 마련했습니다. RuboCop은 Ruby LSP 생태계와 협력하여 더욱 강력하고 사용자 친화적인 도구로 진화하며, 인터페이스 기반 설계를 통해 재사용성과 유지보수성을 극대화할 것입니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!