El proyecto ruby-type-inference es un enfoque completamente nuevo para abordar los problemas de la naturaleza dinámica de Ruby y proporcionar una resolución de símbolos más confiable y una inferencia de tipo. Recopila algunos datos de tiempo de ejecución para crear contratos de tipo para los métodos.
Cada vez que se llama a un método, se le pasan algunos argumentos de tipos particulares. Type Tracker recopila todas esas combinaciones de argumentos y luego construye un contrato especial que satisface todas las tuplas de tipo de argumento encontrado.
El enfoque tiene sus propios pros y contras:
Esta implementación aborda el problema de cobertura establecido al proporcionar la posibilidad de fusionar cualquier tipo de contrato en cualquier momento.
Para un uso simple, debe instalar el complemento de información de código dinámico Ruby para RubyMine. Luego, este complemento requerirá que se instale la gema Arg_Scanner. Consulte la instrucción de instalación de Arg_Scanner si tiene problemas mientras la instalación.
Después de eso, tendrá la posibilidad de ejecutar sus programas en Tracker de tipo:

O puede ejecutar sus programas en terminal a través del binario de rubymine-type-tracker (pero debe mantener su proyecto abierto en RubyMine). P.ej:
rubymine-type-tracker bin/rails server
El binario rubymine-type-tracker se incluye en la gema arg_scanner.
Consulte características.md para comprender qué beneficios tendrá después de ejecutar su programa en Tracker de tipo.
Arg_scanner es una gema con una extensión nativa para adjuntar a los procesos de Ruby y rastrear e interceptar todas las llamadas de método para registrar el flujo de datos de tipo en tiempo de ejecución.
Consulte la documentación arg_scanner para obtener detalles sobre el uso.
El servidor Tipo Contract Processor escucha los datos de tipo entrante (de arg_scanner ) y lo procesa a un formato compacto.
Los datos almacenados se pueden usar más adelante para un mejor análisis de código y también se pueden compartir con otros usuarios.
Los clientes de análisis de código (un complemento RubyMine/IJ+Ruby) usan los datos del contrato para proporcionar características para los usuarios, como la finalización del código, una mejor resolución, etc.
( TODO ) Signature Server recibe contratos de forma anónima de los usuarios y proporciona colecciones de contratos compilados para gemas populares.
La gema arg_scanner se usa para recopilar información de tipo. Se puede instalar manualmente al SDK objetivo y requiere MRI Ruby al menos 2.3.
Hay dos posibilidades para usar el rastreador de tipos: (i) usando el complemento IJ/RubyMine o (ii) que lo requiere del código Ruby.
La forma más fácil de ejecutar el complemento (y la más conveniente para su desarrollo) es ejecutarlo con una tarea de graduación especial contra IJ Ultimate Snapshot:
./gradlew ide-plugin:runIde
La tarea compilará el complemento, ejecutará IJ Ultimate con el complemento "Instalado" en él. No hay necesidad de ejecutar nada manualmente en ese caso.
Si desea probarlo con la instancia de RubyMine existente, debe:
./gradlew ide-plugin:buildPluginFile | Settings | Plugins | Install plugin from disk...ide-plugin/build/distributions y seleccione.Tenga en cuenta que, debido a los cambios de API, el complemento puede ser incompatible con instancias RM anteriores.
Para recopilar los datos para el script necesita un servidor de contrato para estar en funcionamiento; podría ejecutarse corriendo
./gradlew contract-creator:runServer --args path-to-db.mv.db donde path-to-db.mv.db es ruta donde se almacenarán los contratos de tipo (archivo de base de datos H2).
Ejecute el script de Ruby para ser procesado a través de arg-scanner Binary.
Use los datos recopilados por el servidor de contratos.
Cualquier tipo de ideas, casos de uso, contribuciones y preguntas es muy bienvenida ya que el proyecto solo está incubando. No dude en crear problemas para cualquier solicitud sensata.