O projeto ruby-type-inference é uma abordagem completamente nova para enfrentar os problemas da natureza dinâmica do rubi e fornecer uma resolução de símbolos mais confiável e tipo de inferência. Ele coleta alguns dados de tempo de execução para criar contratos de tipo para os métodos.
Toda vez que um método está sendo chamado, alguns argumentos de tipos específicos estão sendo transmitidos a ele. O rastreador de tipo coleta todas essas combinações de argumentos e depois cria um contrato especial que satisfaz todos os tuplos do tipo argumento.
A abordagem tem seus próprios prós e contras:
Esta implementação aborda o problema de cobertura declarado, fornecendo a possibilidade de mesclar quaisquer contratos de tipo a qualquer momento.
Para uso simples, você precisa instalar o plug -in Ruby Dynamic Code Insight para Rubimina. Em seguida, este plug -in exigirá que a gema arg_scanner seja instalada. Consulte a instrução de instalação do Arg_Scanner se tiver problemas durante a instalação.
Depois disso, você terá a possibilidade de executar seus programas em Type Tracker:

Ou você pode executar seus programas no Terminal através do binário rubymine-type-tracker (mas você precisa manter seu projeto aberto em Rubimina). Por exemplo:
rubymine-type-tracker bin/rails server
O binário rubymine-type-tracker está incluído na gema arg_scanner.
Consulte o Recursos.md para entender quais benefícios você terá depois de executar seu programa no Type Rastreador.
Arg_scanner é uma jóia com uma extensão nativa para anexar aos processos de rubi e rastrear e interceptar todas as chamadas de método para fluir de dados de tipo de log no tempo de execução.
Consulte a documentação arg_scanner para obter detalhes sobre o uso.
O servidor de processadores de contrato de tipo ouve os dados do tipo de entrada (do arg_scanner ) e o processa para um formato compacto.
Os dados armazenados podem ser usados posteriormente para melhor análise de código e também podem ser compartilhados com outros usuários.
Clientes de análise de código (um plug -in Rubimina/IJ+Ruby) Use os dados do contrato para fornecer recursos para os usuários como conclusão de código, melhor resolução etc.
( TODO ) O Signature Server recebe contratos anonimamente dos usuários e fornece uma coleção de contratos compilada para gemas populares.
A GEM arg_scanner é usada para coletar informações do tipo. Ele pode ser instalado manualmente no SDK de destino e requer RUM Ruby pelo menos 2,3.
Existem duas possibilidades para usar o rastreador de tipo: (i) usando o plug -in ij/rubimina ou (ii) exigindo -o do código Ruby.
A maneira mais fácil de executar o plug -in (e a mais conveniente para o seu desenvolvimento) é executá -lo com uma tarefa especial Gradle contra o IJ Ultimate Snapshot:
./gradlew ide-plugin:runIde
A tarefa compilará o plug -in, executará o iJ Ultimate com o plug -in "instalado". Não há necessidade de executar nada manualmente nesse caso.
Se você quiser experimentá -lo com a instância de Rubimina existente, você deve:
./gradlew ide-plugin:buildPluginFile | Settings | Plugins | Install plugin from disk...ide-plugin/build/distributions e selecione.Observe que, devido às alterações da API, o plug -in pode ser incompatível com instâncias RM mais antigas.
Para coletar os dados do script, precisa de um servidor de contrato em funcionamento; pode ser executado correndo
./gradlew contract-creator:runServer --args path-to-db.mv.db Onde path-to-db.mv.db é o caminho em que os contratos de tipo serão armazenados (arquivo de banco de dados H2).
Execute o script Ruby a ser processado via arg-scanner Binary.
Use os dados coletados pelo servidor de contrato.
Qualquer tipo de idéias, casos de uso, contribuições e perguntas são muito bem -vindas, pois o projeto está apenas incubando. Sinta -se à vontade para criar problemas para qualquer solicitação sensata.