Проект ruby-type-inference -это совершенно новый подход для решения проблем динамической природы Ruby и обеспечения более надежного разрешения символов и типа. Он собирает некоторые данные времени выполнения для создания контрактов типа для методов.
Каждый раз, когда называется метод, к нему передаются некоторые аргументы конкретных типов. Type Tracker собирает все такие комбинации аргументов, а затем строит специальный контракт, который удовлетворяет всем столкновению кортежей типа аргумента.
Подход имеет свои плюсы и минусы:
В этой реализации решают задачу о заявленной проблеме, предоставляя возможность объединить любые контракты в любое время.
Для простого использования необходимо установить плагин Ruby Dynamic Code Insight для Rubymine. Затем этот плагин потребует установки драгоценного камня arg_scanner. См. Инструкция по установке arg_scanner, если у вас есть проблемы при установке.
После этого у вас будет возможность запустить свои программы под трекером типа:

Или вы можете запустить свои программы в терминале с помощью двоичного rubymine-type-tracker (но вы должны оставить свой проект в Rubymine). Например:
rubymine-type-tracker bin/rails server
rubymine-type-tracker включен в драгоценный камень arg_scanner.
См. Fecuss.md для понимания того, какие преимущества вы получите после запуска вашей программы под трекером типа.
ARG_SCANNER -это драгоценный камень с нативным расширением для прикрепления к рубиновым процессам и прослеживания и перехвата всех вызовов методов к потоку типового потока в среде выполнения.
См. Документацию arg_scanner для получения подробной информации об использовании.
Тип контрактного процессора Сервер прослушивается для данных входящего типа (от arg_scanner ) и обрабатывает его в компактный формат.
Хранилированные данные могут быть использованы позже для лучшего анализа кода, а также могут быть переданы другим пользователям.
Анализ кода Клиенты (плагин Rubymine/IJ+Ruby) используют данные контракта, чтобы предоставить функции для пользователей, таких как завершение кода, лучшее разрешение и т. Д.
( TODO ) Signature Server получает контракты анонимно от пользователей и предоставляет скомпилированные коллекции контрактов для популярных драгоценных камней.
GEM arg_scanner используется для сбора информации о типе. Он может быть установлен вручную в целевой SDK и требует MRI Ruby не менее 2,3.
Есть две возможности для использования Type Tracker: (i) Использование плагина IJ/Rubymine или (ii), требуя его от Ruby Code.
Самый простой способ запустить плагин (и самый удобный для его разработки) - это запустить его со специальной задачей Gradle против IJ Ultimate Snapshot:
./gradlew ide-plugin:runIde
Задача будет скомпилировать плагин, запустить IJ Ultimate с плагином «установлен». В этом случае нет необходимости в том, чтобы запускать что -либо вручную.
Если вы хотите попробовать это с существующим экземпляром Rubymine, вы должны:
./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 .
Используйте данные, собранные сервером контракта.
Любые идеи, варианты использования, вклады и вопросы очень приветствуются, поскольку проект просто инкубирует. Пожалуйста, не стесняйтесь создавать проблемы для любого разумного запроса.