ruby-type-inference項目是一種全新的方法,可以解決紅寶石動態性質的問題,並提供更可靠的符號分辨率和類型推理。它收集了一些運行時間數據以構建方法的類型合同。
每次調用方法時,都會傳遞一些特定類型的論點。 Type Tracker收集所有此類參數組合,然後建立一個特殊合同,滿足所有遇到的參數類型元組。
該方法有自己的利弊:
該實施方法通過提供隨時合併任何類型合同的可能性來解決陳述的覆蓋範圍問題。
為了簡單用法,您需要安裝Ruby動態代碼洞察插件,以備Rubymine。然後,此插件將需要安裝ARG_SCANNER GEM。如果您在安裝時遇到問題,請參見ARG_SCANNER安裝指令。
之後,您將有可能在類型Tracker下運行您的程序:

或者,您可以通過rubymine-type-tracker二進制在終端運行程序(但您必須在Rubymine中保持項目開放)。例如:
rubymine-type-tracker bin/rails server
rubymine-type-tracker二進制包含在arg_scanner寶石中。
請參閱功能。 md,以了解在Type Tracker下運行程序後將獲得什麼好處。
ARG_SCANNER是一個具有本機擴展名的GEM,可以連接到Ruby過程,並跟踪並攔截所有方法調用以在運行時記錄類型數據流。
有關使用的詳細信息,請參見arg_scanner文檔。
類型的合同處理器服務器會聆聽傳入類型數據(來自arg_scanner ),並將其處理為緊湊的格式。
存儲的數據以後可用於更好的代碼分析,也可以與其他用戶共享。
代碼分析客戶端(Rubymine/IJ+Ruby插件)使用合同數據為用戶提供功能,例如代碼完成,更好的分辨率等。
( TODO )Signature Server從用戶匿名收到合同,並為受歡迎的寶石提供了合同的收集。
arg_scanner GEM用於收集類型信息。它可以手動安裝到目標SDK上,並且需要MRI Ruby至少2.3。
使用類型跟踪器有兩種可能性: (i)使用IJ/Rubymine插件或(ii)從Ruby Code中需要它。
運行該插件的最簡單方法(以及最方便的開發方法)是使用特殊的Gradle任務來運行IJ Ultimate快照:
./gradlew ide-plugin:runIde
該任務將編譯插件,在其中使用“已安裝”插件運行IJ Ultimate。在這種情況下,無需手動運行任何內容。
如果您想使用現有紅寶石實例嘗試一下,則應:
./gradlew ide-plugin:buildPluginFile | 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二進制處理。
使用合同服務器收集的數據。
由於該項目只是在孵化,因此非常歡迎任何形式的想法,用例,貢獻和問題。請隨時為任何明智的要求創建問題。