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二进制处理。
使用合同服务器收集的数据。
由于该项目只是在孵化,因此非常欢迎任何形式的想法,用例,贡献和问题。请随时为任何明智的要求创建问题。