ruby-type-inference ist ein völlig neuer Ansatz, um die Probleme der Ruby-dynamischen Natur zu lösen und zuverlässigere Symbolauflösung und Typinferenz zu liefern. Es sammelt einige Laufzeitdaten, um Typverträge für die Methoden zu erstellen.
Jedes Mal, wenn eine Methode aufgerufen wird, werden einige Argumente bestimmter Typen an sie übergeben. Typ Tracker sammelt alle derartigen Argument -Kombinationen und erstellt dann einen speziellen Vertrag, der alle auftretenden Argumententyp -Tupel erfüllt.
Der Ansatz hat seine eigenen Vor- und Nachteile:
Diese Implementierung befasst sich mit dem angegebenen Deckungsproblem, indem es die Möglichkeit bietet, alle Typverträge jederzeit zusammenzuführen.
Für die einfache Verwendung müssen Sie das Ruby Dynamic Code Insight -Plugin für Rubymine installieren. Anschließend erfordert dieses Plugin, dass das Arg_Scanner -Edelstein installiert werden muss. Siehe Arg_Scanner -Installationsanweisung, wenn Sie während der Installation Probleme haben.
Danach haben Sie die Möglichkeit, Ihre Programme unter Type Tracker auszuführen:

Oder Sie können Ihre Programme im Terminal über den rubymine-type-tracker ausführen (Sie müssen Ihr Projekt jedoch in Rubymine geöffnet halten). Z.B:
rubymine-type-tracker bin/rails server
Die rubymine-type-tracker ist in das Juwel von Arg_Scanner aufgenommen.
Siehe Features.md, um zu verstehen, welche Vorteile Sie nach dem Ausführen Ihres Programms unter Type Tracker haben werden.
ARG_SCANNER ist ein Juwel mit einer nativen Erweiterung, die an Ruby-Prozesse angehängt und alle Methodenaufrufe zum Protokoll-Typ des Datenflusss in der Laufzeit nachverfolgen und abfangen.
Weitere Informationen zur Nutzung finden Sie unter arg_scanner -Dokumentation.
Der Typ Contract Processor Server hört auf eingehende Typdaten (von arg_scanner ) und verarbeitet sie in ein kompaktes Format.
Die gespeicherten Daten können später für eine bessere Codeanalyse verwendet werden und können auch mit anderen Benutzern gemeinsam genutzt werden.
Code -Analyse -Clients (ein Rubymine/IJ+Ruby -Plugin) Verwenden Sie die Vertragsdaten, um Funktionen für Benutzer wie Code -Abschluss, bessere Auflösung usw. bereitzustellen.
( TODO ) Signature Server empfängt Verträge anonym von den Benutzern und bietet eine kompilierte Vertragskollektionen für beliebte Edelsteine.
Das Juwel arg_scanner wird zum Sammeln von Typinformationen verwendet. Es kann manuell am Ziel -SDK installiert werden und benötigt mindestens 2,3 MRT Ruby.
Es gibt zwei Möglichkeiten für die Verwendung des Typs Tracker: (i) mit IJ/Rubymine -Plugin oder (ii), die ihn vom Ruby -Code benötigen.
Der einfachste Weg, das Plugin (und das bequemste für seine Entwicklung) zu betreiben, besteht darin, es mit einer speziellen Gradle -Aufgabe gegen IJ Ultimate Snapshot auszuführen:
./gradlew ide-plugin:runIde
Die Aufgabe wird das Plugin kompilieren und IJ Ultimate mit dem darin "installierten" Plugin ausführen. In diesem Fall ist es nicht erforderlich, etwas manuell auszuführen.
Wenn Sie es mit vorhandener Rubymine -Instanz versuchen möchten, sollten Sie:
./gradlew ide-plugin:buildPluginFile | Settings | Plugins | Install plugin from disk...ide-plugin/build/distributions und wählen Sie.Beachten Sie, dass das Plugin aufgrund von API -Änderungen möglicherweise mit älteren RM -Instanzen nicht kompatibel ist.
Um die Daten für das Skript zu sammeln, benötigt ein Vertragsserver, um in Betrieb zu stehen. Es könnte durch Laufen ausgeführt werden
./gradlew contract-creator:runServer --args path-to-db.mv.db wobei path-to-db.mv.db Pfad ist, wo Typverträge gespeichert werden (H2-Datenbankdatei).
Führen Sie das Ruby-Skript aus, um über arg-scanner -Binärdatei verarbeitet zu werden.
Verwenden Sie die vom Contract Server gesammelten Daten.
Alle Art von Ideen, Anwendungsfällen, Beiträgen und Fragen sind sehr willkommen, da das Projekt nur inkubiert. Bitte zögern Sie nicht, Probleme für eine vernünftige Anfrage zu erstellen.