TypeProf는 Ruby 코드를 분석하여 타입 정보를 추론하고, 이를 기반으로 에디터 상에서 다양한 지원 기능을 제공합니다. 데모를 통해 VS Code 환경에서 TypeProf가 어떻게 작동하는지 시연되었습니다. 메서드 정의 위에 추론된 타입 정보가 표시되며, 호출 원본을 추적하여 파라미터의 타입을 지능적으로 추론하는 모습이 인상적이었습니다. 예를 들어, nil
가능성이 있는 코드 파라미터가 조건부 로직을 통해 String
으로 확정되면 해당 정보가 정확하게 반영됩니다. 또한, 정의로 이동, 이름 변경, 타입 오류 표시, 메서드 이름 자동 완성 등의 기능이 시연되어 개발 편의성을 보여주었습니다.
최근 TypeProf의 주요 개선 사항으로는 Ruby 문법 지원 범위 확대와 Ruby WASM 환경에서의 실행 가능성이 있습니다. 특히, 실용성 향상을 위한 두 가지 큰 기능이 추가되었습니다. 첫째, ‘진단 심각도(Diagnostic Severity)’ 설정 기능입니다. TypeProf는 현재 오탐(false positive)이 많아 사용자가 오류, 경고, 정보, 힌트, 또는 비표시 등 원하는 수준으로 진단 메시지의 심각도를 조절할 수 있게 되었습니다. 이는 기존 프로젝트에 TypeProf를 도입할 때 발생할 수 있는 과도한 오류 메시지로 인한 피로도를 줄여주는 역할을 합니다. 둘째, ‘분석 단위(Analysis Units)’ 개념의 도입입니다. 대규모 프로젝트에서 전체 코드를 단일 단위로 분석할 때 발생하는 성능 문제를 해결하기 위해, 디렉토리 단위로 분석을 분할할 수 있게 되었습니다. 이 경우, 각 분석 단위 간의 인터페이스에는 RBS(Ruby Signature) 파일을 통해 명시적인 타입 선언이 필요하지만, 이는 대규모 애플리케이션의 모듈 간 경계를 명확히 하고 성능을 최적화하는 데 기여합니다.
발표에서는 TypeProf 개발 중 겪었던 어려운 버그 사례로 Ruby의 복잡한 상수 탐색 로직과 관련된 문제를 상세히 설명했습니다. Ruby의 상수 탐색은 현재 컨텍스트, 모듈, 슈퍼클래스 등을 재귀적으로 탐색하며, 특정 상황(예: 중첩된 모듈 내에서 자신과 동일한 이름의 모듈을 include
하는 경우)에서는 분석기가 무한 루프에 빠지는 문제가 발생했습니다. 이 문제는 RBS Inline에서도 유사하게 발생했던 것으로, 결국 상속을 통한 상수 탐색을 포기하고, 복잡한 경우에는 사용자가 명시적인 전체 경로(full path)를 사용하여 상수를 참조하도록 하는 방향으로 해결되었습니다. 이는 Ruby의 언어적 특성과 타입 분석기의 한계를 동시에 보여주는 중요한 사례입니다.