Rubyプロジェクトで、未使用のmethods 、 Classes 、 CONSTANTS 、 @instance_variables 、 @@class_variables 、 $global_variables見つけます。
実行されないコードは、維持する必要のないコードです
残り物は、静的分析を使用して、これらのコードビットを見つけます。
一部の宝石は、多くのレールのサポートを含め、どのようにあなたのために方法を呼び出すかを認識しています。
この行をアプリケーションのGemfileに追加します。
gem 'leftovers' , require : falseそして実行してください:
$ bundle
または、自分でインストールします:
$ gem install leftovers
プロジェクトのルートでコマンドラインでleftoversを実行します。これにより、プロジェクトの呼び出し/参照と定義を収集すると、これが進行します。次に、呼び出されない定義されたメソッド(またはクラスなど)を出力します。
$ 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
圧倒的な数の結果がある場合は、 --write-todoを使用してみてください
leftoversを実行すると、メソッド、定数、および可変定義のリストが使用されていないと考えられます。今何?
彼らは彼らの電話を削除するとき、意図せずに残されました:
それらは動的に呼ばれます:
# leftovers:call my_unused_methodで呼び出しをマークします。または# leftovers:keepで定義をマークしますそれらは、テストによってのみ使用されるように意図的に定義されています。
# leftovers:test_onlyを追加しますそれらは、残り物でチェックされるべきではないファイルからのものです。
exclude_paths: leftovers.ymlファイルにパスを追加します。プロジェクトに最初に残り物を追加したときに対処するには多すぎる場合は、 leftovers --write-todo 、
残り物leftovers実行するleftovers --write-todo現在検出されていないすべての定義を可能にする補足構成ファイルを生成します。
このファイルをコミットして、あなた/あなたのチームがこれらのアイテムを徐々に扱うことができますが、残り物がまだ新しく使用されていないアイテムを警告します。
# leftovers:keepエイリアスleftovers:keeps 、 leftovers:skip 、 leftovers:skips 、 leftovers:skipped 、 leftovers:allow 、残り、 leftovers:allows 、 leftovers:allowed 、コメント# leftovers:keep
class MyClass
def my_method # leftovers:keep
true
end
endこれにより、 MyClassが使用されていないと報告されますが、この名前のすべての定義に対してこれを行うのではなく、my_methodはコメントを追加する代わりに、 keep: configurationファイルのリストに名前を追加します。
# leftovers:test_onlyエイリアスleftovers:for_test 、 leftovers:for_tests 、 leftovers:test 、 leftovers:tests 、 leftovers:testing
テストでのみ使用されるように、テスト以外の監督からの定義をマークするには、 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これによりmy_methodテストのみで呼ばれていても、使用されると考えるでしょう。
この名前のすべての定義に対してこれを行うには、コメントを追加する代わりに、 test_only: configurationファイルのリストに名前を追加します。
# leftovers:callエイリアスleftovers:calls 、 leftovers:call
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' )これは、両方が呼ばれたことを検討puts 、 warnでしょう
# leftovers:dynamic:*コメント内のすべてをもう一度列挙せずにリテラルハッシュ値とアレイ値を動的に呼ぶことをマークするには、 leftovers:dynamic:アレイまたはハッシュの始まりと同じ行で使用します
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) }次の構成がname: value leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes 'これは、両方のuser_attributesとadmin_attributes呼び出されたと考えるでしょう。
構成は、プロジェクトルートの.leftovers.ymlから読み取られます。その存在はオプションであり、これらすべての設定はオプションです。
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:詳細については、完全な構成ドキュメントを参照してください。組み込みの構成ファイルまたはこのリポジトリの独自の構成については、例を参照してください。
残り物は、あなたが定義する方法/定数を、あなたのコードの外部(おそらく宝石によって)外部で使用されていないものとして報告します
これらの名前をkeep: list in the .leftovers.ymlまたは# leftovers:allow my_method_nameを使用してインラインコメントを追加します
残りはコードを実行しないため、 sendする呼び出しの変数(eg send(variable_method_name) )に気付いていません。 (静的コール( send(:my_method_name) )を認識しているため、送信を使用することは「ファイン」です)
dynamic: skip: true in the .leftovers.ymlでリスト:または可能性のリストにインラインコメントを追加します# leftovers:call my_method_1, my_method_2 。
残りは名前のみで比較されるため、同じ名前の複数の定義は、たとえ1つだけであっても使用されているとカウントされます。
Haml、Slim&ERBのライン、および列番号は、チェックする前にファイルを事前コンパイルする必要があるため、間違っています。
Rails with_optionsメソッドによってコピーされた値に基づく動的コールと定義は、残り物によってキャプチャされません。
リポジトリをチェックアウトした後、 bin/setupを実行して依存関係をインストールします。次に、 rake specを実行してテストを実行します。
この宝石をローカルマシンにインストールするには、 bundle exec rake install実行します。
バグレポートとプルリクエストは、https://github.com/robotdana/leftoversのGithubで大歓迎です。
既存の構成/*。YMLの拡張であろうと新しい宝石の追加など、デフォルトの構成の問題と改善を特に奨励します。ファイルには[rubygems name].ymlとその構造という名前の名前が付けられている必要があります。
宝石は、MITライセンスの条件の下でオープンソースとして利用できます。