Finden Sie in Ihren Ruby -Projekten unbenutzte methods , Classes , CONSTANTS , @instance_variables , @@class_variables und $global_variables .
Code, der niemals ausgeführt wird, ist Code, den Sie nicht warten müssen
Reste werden statische Analysen verwenden, um diese Code -Teile für Sie zu finden.
Es ist bekannt, wie einige Edelsteine Methoden für Sie anrufen, einschließlich der Unterstützung für einen Großteil von Schienen.
Fügen Sie diese Zeile der GemFile Ihrer Anwendung hinzu:
gem 'leftovers' , require : falseUnd dann ausführen:
$ bundle
Oder installieren Sie es selbst als:
$ gem install leftovers
Führen Sie leftovers in Ihrer Befehlszeile in der Wurzel Ihres Projekts aus. Dadurch wird der Fortschritt ausgegeben, da es die Anrufe/Referenzen und Definitionen in Ihrem Projekt sammelt. Anschließend werden definierte Methoden (oder Klassen usw.) ausgegeben, die nicht aufgerufen werden.
$ leftovers
checked 25 files, collected 2473 calls, 262 definitions
Only directly called in tests:
lib/hello_world.rb:10:6 tested_unused_method def tested_unused_method
lib/hello_world.rb:18:6 another_tested_unused_method def another_tested_unused_method
Not directly called at all:
lib/hello_world.rb:6:6 generated_method= attr_accessor :generated_method
lib/hello_world.rb:6:6 generated_method attr_accessor :generated_method
how to resolve: https://github.com/robotdana/leftovers/tree/main/Readme.md#how-to-resolve
Wenn es eine überwältigende Anzahl von Ergebnissen gibt, versuchen Sie es zu verwenden --write-todo zu verwenden
Wenn Sie leftovers ausführen, erhalten Sie eine Liste mit methodischen, konstanten und variablen Definitionen, die sie für nicht genutzt halten. Was nun?
Sie waren ungewollt verlassen, als sie ihre Anrufe entfernen:
Sie werden dynamisch genannt:
# leftovers:call my_unused_method ; oder# leftovers:keepSie sind absichtlich definiert, um nur durch Tests verwendet zu werden:
# leftovers:test_onlySie sind aus einer Datei, die von Resten nicht überprüft werden sollte:
exclude_paths: Liste in der Datei .leftovers.yml Wenn es zu viele gibt, um Ihr Projekt zum ersten Mal hinzuzufügen, versuchen Sie leftovers --write-todo ,
Ausführende leftovers --write-todo generiert eine ergänzende Konfigurationsdatei, die alle derzeit erkannten unanständigen Definitionen ermöglicht, die auf nachfolgenden Läufen von leftovers gelesen werden, ohne die darin genannten Elemente aufmerksam zu machen.
Beiten Sie diese Datei, damit Sie/Ihr Team diese Elemente nach und nach ansprechen können und gleichzeitig die Reste auf neu nicht verwendete Elemente aufmerksam machen können.
# leftovers:keep Aliases leftovers:keeps , leftovers:skip , leftovers:skips , leftovers:skipped , leftovers:allow , leftovers:allows , leftovers:allowed # leftovers:keep Methodendefinition als nicht unbenutzt zu markieren, fügen Sie den Kommentar hinzu.
class MyClass
def my_method # leftovers:keep
true
end
end Dies würde melden, dass MyClass nicht genutzt wird, aber nicht my_method, um dies für alle Definitionen dieses Namens zu tun, anstatt einen Kommentar hinzuzufügen, fügen Sie den Namen in die keep: List in der Konfigurationsdatei hinzu.
# leftovers:test_only Aliase leftovers:for_test , leftovers:for_tests , leftovers:test , leftovers:tests , leftovers:testing
Um eine Definition aus einem Nicht-Test-Dire zu markieren, wie absichtlich nur durch Tests verwendet, verwenden Sie leftovers:test_only
# app/my_class.rb
class MyClass
def my_method # leftovers:test_only
true
end
end # spec/my_class_spec.rb
describe MyClass do
it { expect ( subject . my_method ) . to be true }
end Dies würde my_method als verwendet betrachten, obwohl es nur durch Tests aufgerufen wird.
Um dies für alle Definitionen dieses Namens zu tun, fügen Sie den Namen test_only: Liste in der Konfigurationsdatei hinzu, anstatt einen Kommentar hinzuzufügen.
# leftovers:call Aliase leftovers:calls zum Angeben eines Anrufs, bei dem keine wörtlichen Werte verwendet werden, verwenden Sie leftovers:call mit dem aufgelisteten Methodamen
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' ) Dies würde puts in Betracht ziehen und warn , dass beide gerufen wurden
# leftovers:dynamic:* Um einen dynamischen Aufruf für buchstäbliche Hash- und Array -Werte zu markieren, ohne alles im Kommentar erneut aufzählen, verwenden Sie leftovers:dynamic: Auf derselben Zeile wie der Beginn des Arrays oder des Hashs
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) } mit der folgenden Konfiguration entspricht dem name: value für die leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes ' Dies würde in Betracht ziehen, user_attributes und admin_attributes als beides aufgerufen worden zu sein.
Die Konfiguration wird von .leftovers.yml in Ihrem Projektwurzel gelesen. Seine Präsenz ist optional und alle diese Einstellungen sind optional.
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:Weitere Informationen finden Sie in der vollständigen Konfigurationsdokumentation. Beispiele finden Sie in der integrierten Konfigurationsdateien oder der eigenen Konfiguration dieses Repos.
Reste melden Methoden/Konstanten, die Sie definieren und außerhalb Ihres Codes (möglicherweise nach Edelsteinen) als nicht verwendet bezeichnet werden
Fügen Sie diese Namen in die keep: List in the .leftovers.yml hinzu oder fügen Sie einen Inline -Kommentar mit # leftovers:allow my_method_name
Reste führen Ihren Code nicht aus, weshalb die EG -Variablen in send (z. B. send(variable_method_name) ) nicht bekannt sind. (Es ist sich der statischen Anrufe bewusst (z. B. send(:my_method_name) ), daher ist die Verwendung der Privatsphäre von Send an die Bypass -Methode "fein"))
Fügen Sie die Methode/das Muster der dynamic: Liste mit skip: true in der .leftovers.yml , oder fügen Sie einen Inline -Kommentar mit der Liste der Möglichkeiten hinzu # leftovers:call my_method_1, my_method_2 .
Die Reste vergleicht nur mit dem Namen, sodass mehrere Definitionen mit demselben Namen als verwendet werden, auch wenn nur einer ist.
Haml, Slim & Erb Line und Spaltennummern sind falsch, da die Dateien vor der Überprüfung vorkompiliert werden müssen.
Dynamische Anrufe und Definitionen basierend auf Werten, die von Rails with_options -Methode kopiert werden, werden von Resten nicht erfasst.
Führen Sie bin/setup nach dem Auschecken des Repo aus, um Abhängigkeiten zu installieren. Führen Sie dann rake spec aus, um die Tests auszuführen.
Um dieses Juwel auf Ihrem lokalen Computer zu installieren, führen Sie bundle exec rake install aus.
Fehlerberichte und Pull -Anfragen sind auf Github unter https://github.com/robotdana/leftovers willkommen.
Ich ermutige insbesondere Probleme und Verbesserungen der Standardkonfiguration, unabhängig davon, ob Sie die vorhandene Konfiguration/*. YML erweitern oder neue Edelsteine hinzufügen. Die Datei sollte genannt werden [rubygems name].yml und ihre Struktur ist identisch mit der Projektkonfiguration
Das Edelstein ist unter den Bedingungen der MIT -Lizenz als Open Source erhältlich.