ruby-type-inference Project는 Ruby 동적 특성의 문제를 해결하고보다 신뢰할 수있는 기호 해상도 및 유형 추론을 제공하는 완전히 새로운 접근법입니다. 방법에 대한 유형 계약을 구축하기 위해 일부 실행 시간 데이터를 수집합니다.
방법이 호출 될 때마다 특정 유형의 일부 인수가 전달되고 있습니다. Type Tracker는 이러한 모든 인수 조합을 수집 한 다음 모든 인수 유형 튜플을 만족시키는 특수 계약을 구축합니다.
이 방법에는 자체 장단점이 있습니다.
이 구현은 언제든지 모든 유형 계약을 병합 할 가능성을 제공함으로써 명시된 적용 범위 문제를 해결합니다.
간단한 사용을 위해서는 Rubymine 용 Ruby Dynamic Code Insight 플러그인을 설치해야합니다. 이 플러그인은 Arg_Scanner 보석을 설치해야합니다. 설치 중에 문제가있는 경우 Arg_Scanner 설치 명령어를 참조하십시오.
그런 다음 유형 추적기 아래에서 프로그램을 실행할 수 있습니다.

또는 rubymine-type-tracker 바이너리를 통해 터미널에서 프로그램을 실행할 수 있습니다 (그러나 Rubymine에서 프로젝트를 열어야합니다). 예 : :
rubymine-type-tracker bin/rails server
rubymine-type-tracker 바이너리는 Arg_scanner 보석에 포함됩니다.
Type Tracker에서 프로그램을 실행 한 후 어떤 이점이 있는지 이해하려면 Feactions.Md를 참조하십시오.
Arg_Scanner는 루비 프로세스에 연결하고 추적하고 모든 방법 호출을 런타임에서 로그 유형별 데이터 흐름으로 가로 채기위한 기본 확장 기능이있는 보석입니다.
사용에 대한 자세한 내용은 arg_scanner 문서를 참조하십시오.
Contract Processor 서버 유형은 들어오는 유형 데이터 ( arg_scanner )의 의견을 듣고 컴팩트 한 형식으로 처리합니다.
저장된 데이터는 나중에 더 나은 코드 분석을 위해 사용될 수 있으며 다른 사용자와 공유 할 수도 있습니다.
코드 분석 클라이언트 (Rubymine/IJ+Ruby Plugin) 계약 데이터를 사용하여 코드 완료, 더 나은 해상도 등과 같은 사용자에게 기능을 제공합니다.
( TODO ) Signature Server는 사용자로부터 익명으로 계약을 수신하고 인기있는 보석에 대한 컴파일 된 계약 컬렉션을 제공합니다.
arg_scanner Gem은 유형 정보를 수집하는 데 사용됩니다. 대상 SDK에 수동으로 설치할 수 있으며 MRI Ruby가 최소 2.3을 필요로합니다.
유형 추적기를 사용할 수있는 두 가지 가능성이 있습니다 : (i) ij/rubymine 플러그인 사용 또는 (ii) 루비 코드에서 요구하는 경우.
플러그인을 실행하는 가장 쉬운 방법 (및 개발에 가장 편리한)은 IJ Ultimate Snapshot에 대한 특별한 Gradle 작업으로 실행하는 것입니다.
./gradlew ide-plugin:runIde
이 작업은 플러그인을 컴파일하고 플러그인을 "설치"하여 IJ Ultimate를 실행합니다. 이 경우 수동으로 실행할 필요가 없습니다.
기존 Rubymine 인스턴스로 시도하려면 다음을 시도해야합니다.
./gradlew ide-plugin:buildPlugin 통해 빌드하십시오File | Settings | Plugins | Install plugin from disk...ide-plugin/build/distributions 에서 플러그인을 찾아서 선택하십시오.API 변경으로 인해 플러그인은 이전 RM 인스턴스와 호환되지 않을 수 있습니다.
스크립트의 데이터를 수집하려면 계약 서버가 시작되어 실행되어야합니다. 실행하여 실행할 수 있습니다
./gradlew contract-creator:runServer --args path-to-db.mv.db path-to-db.mv.db 는 유형 계약이 저장되는 경로입니다 (H2 데이터베이스 파일).
Ruby 스크립트를 실행하여 arg-scanner Binary를 통해 처리됩니다.
계약 서버에서 수집 한 데이터를 사용하십시오.
프로젝트가 배양하기 때문에 모든 종류의 아이디어, 사용 사례, 기부금 및 질문은 매우 환영합니다. 현명한 요청에 대한 문제를 자유롭게 만들 수 있습니다.