在Ruby Projects中找到未使用的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 --write-todo將生成一個補充配置文件,允許所有當前檢測到的未符合要求的定義,這些定義將在隨後的leftovers運行中讀取,而無需警告其中提到的任何項目。
提交此文件,以便您/您的團隊可以逐漸解決這些項目,同時剩菜剩飯提醒您到任何新使用的項目。
# 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未使用,但不是為此名稱的所有定義執行此操作,而不是添加註釋,而是將名稱添加到“配置文件”中的“ keep: list:list”中。
# leftovers:test_only別名leftovers:for_test , leftovers:for_tests , leftovers:test , leftovers:tests , leftovers:testing
要標記非測試dir的定義,因為僅由測試故意使用,請使用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 to the leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes '這將考慮到兩者都將user_attributes和admin_attributes稱為。
該配置是從您的項目root中的.leftovers.yml讀取的。它的存在是可選的,所有這些設置都是可選的。
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:有關詳細信息,請參見完整的配置文檔。有關示例,請參見內置的配置文件或本倉庫自己的配置。
剩菜剩餘將報告您定義的方法/常數,這些方法/常數在您的代碼之外(也許是寶石)未使用的
將這些名稱添加到keep: .leftovers.yml中的列表# leftovers:allow my_method_name
剩餘的沒有執行您的代碼,因此不知道要send的呼叫中的變量(例如send(variable_method_name) )。 (它知道靜態呼叫(例如send(:my_method_name) ),因此使用發送到繞過方法隱私為“正常”)
將方法/模式添加到dynamic: skip: true在.leftovers.yml中的列表,或添加帶有可能性列表的內聯註釋# leftovers:call my_method_1, my_method_2 。
剩菜僅按名稱進行比較,因此,即使只有一個定義,具有相同名稱的多個定義也會計算為使用。
HAML,SLIM和ERB線路和列號將是錯誤的,因為在檢查之前必須預先編譯文件。
基於用with_options方法複製的值的值和定義不會被剩菜剩下捕獲。
檢查回購後,運行bin/setup以安裝依賴關係。然後,運行rake spec以運行測試。
要將此GEM安裝到本地計算機上,請運行bundle exec rake install 。
歡迎在https://github.com/robotdana/leftovers上的GitHub上的錯誤報告和拉動請求。
我特別鼓勵對默認配置的問題和改進,無論是擴展現有配置/*。 YML還是添加新的寶石。該文件應命名為[rubygems name].yml及其結構與項目配置相同
根據MIT許可證的條款,該寶石可作為開源。