Temukan methods yang tidak digunakan, Classes , CONSTANTS , @instance_variables , @@class_variables , dan $global_variables dalam proyek Ruby Anda.
Kode yang tidak pernah dieksekusi adalah kode yang tidak perlu Anda pertahankan
Leftovers akan menggunakan analisis statis untuk menemukan bit kode ini untuk Anda.
Ini sadar bagaimana beberapa metode panggilan permata untuk Anda, termasuk dukungan untuk sebagian besar rel.
Tambahkan baris ini ke gemfile aplikasi Anda:
gem 'leftovers' , require : falseDan kemudian mengeksekusi:
$ bundle
Atau instal sendiri sebagai:
$ gem install leftovers
Jalankan leftovers di baris perintah Anda di akar proyek Anda. Ini akan menghasilkan kemajuan karena mengumpulkan panggilan/referensi dan definisi dalam proyek Anda. Maka itu akan menghasilkan metode yang ditentukan (atau kelas dll) yang tidak dipanggil.
$ 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
Jika ada banyak hasil, coba gunakan --write-todo
Saat menjalankan leftovers , Anda akan diberikan daftar metode, konstan, dan definisi variabel yang menurutnya tidak digunakan. Sekarang apa?
Mereka tidak disengaja ditinggalkan ketika menghapus panggilan mereka:
Mereka disebut secara dinamis:
# leftovers:call my_unused_method ; atau# leftovers:keepMereka didefinisikan dengan sengaja hanya digunakan oleh tes:
# leftovers:test_onlyMereka berasal dari file yang tidak boleh diperiksa oleh sisa:
exclude_paths: Daftar di file .leftovers.yml Jika ada terlalu banyak untuk ditangani saat pertama kali menambahkan sisa makanan ke proyek Anda, cobalah menjalankan leftovers --write-todo ,
Menjalankan leftovers --write-todo akan menghasilkan file konfigurasi tambahan yang memungkinkan semua definisi yang tidak terdeteksi yang saat ini tidak dideteksi, yang akan dibaca pada menjalankan leftovers selanjutnya tanpa memperingatkan salah satu item yang disebutkan di dalamnya.
Komitlah file ini sehingga Anda/tim Anda dapat secara bertahap membahas item -item ini sambil tetap memiliki sisa makanan yang memberi tahu Anda tentang item yang tidak terpakai.
# leftovers:keep Alias leftovers:keeps , leftovers:skip , leftovers:skips , leftovers:skipped leftovers:allow leftovers:allows , leftovers:allowed untuk menandai definisi metode sebagai tidak digunakan, tambahkan komentar # leftovers:keep di baris yang sama dengan definisi tersebut
class MyClass
def my_method # leftovers:keep
true
end
end Ini akan melaporkan MyClass tidak digunakan, tetapi bukan my_method untuk melakukan ini untuk semua definisi nama ini, alih -alih menambahkan komentar, tambahkan nama ke keep: daftar di file konfigurasi.
# leftovers:test_only Alias leftovers:for_test , leftovers:for_tests , leftovers:test , leftovers:tests , leftovers:testing
Untuk menandai definisi dari Dir non-tes, karena sengaja hanya digunakan oleh tes, gunakan 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 Ini akan menganggap my_method digunakan, meskipun hanya dipanggil oleh tes.
Untuk melakukan ini untuk semua definisi nama ini, alih -alih menambahkan komentar, tambahkan nama ke test_only: daftar di file konfigurasi.
# leftovers:call Alias leftovers:calls untuk menandai panggilan yang tidak menggunakan nilai literal, Gunakan leftovers:call dengan nama metode yang terdaftar
method = [ :puts , :warn ] . sample # leftovers:call puts, warn
send ( method , 'text' ) Ini akan mempertimbangkan puts dan warn keduanya telah dipanggil
# leftovers:dynamic:* Untuk menandai panggilan dinamis untuk nilai hash dan array literal tanpa menyebutkan semua yang ada dalam komentar lagi, gunakan leftovers:dynamic: pada baris yang sama dengan awal array atau hash
[ # leftovers:dynamic:call_attributes
:user ,
:admin
] . map { | method | send ( " #{ method } _attributes" ) } Dengan konfigurasi berikut yang cocok dengan name: value ke leftovers:dynamic:process_name
dynamic :
name : call_attributes
arguments : ' * '
add_suffix : ' _attributes ' Ini akan mempertimbangkan user_attributes dan admin_attributes untuk keduanya telah dipanggil.
Konfigurasi dibaca dari .leftovers.yml di root proyek Anda. Kehadirannya opsional dan semua pengaturan ini opsional.
include_paths:exclude_paths:test_paths:requires:precompile:gems:keep:test_only:dynamic:Lihat dokumentasi konfigurasi lengkap untuk detailnya. Lihat file konfigurasi bawaan atau konfigurasi repo ini sendiri untuk contoh.
Leftovers akan melaporkan metode/konstanta yang Anda tentukan yang disebut di luar kode Anda (mungkin dengan permata) sebagai tidak digunakan
Tambahkan nama -nama ini ke daftar keep: di .leftovers.yml atau tambahkan komentar inline dengan # leftovers:allow my_method_name
Leftovers tidak menjalankan kode Anda sehingga tidak mengetahui variabel misalnya dalam panggilan untuk send (misalnya send(variable_method_name) ). (Ini sadar akan panggilan statis ( send(:my_method_name) .
Tambahkan Metode/Pola ke dynamic: Daftar dengan skip: true di .leftovers.yml , atau tambahkan komentar sebaris dengan daftar kemungkinan # leftovers:call my_method_1, my_method_2 .
Leftovers membandingkan dengan nama saja, jadi beberapa definisi dengan nama yang sama akan dihitung seperti yang digunakan bahkan jika hanya satu.
Haml, Slim & Erb line dan nomor kolom akan salah karena file harus dikompilasi sebelum memeriksa.
Panggilan Dinamis & Definisi berdasarkan nilai yang disalin oleh Rails with_options tidak ditangkap oleh sisa makanan.
Setelah memeriksa repo, jalankan bin/setup untuk menginstal dependensi. Kemudian, jalankan rake spec untuk menjalankan tes.
Untuk menginstal permata ini ke mesin lokal Anda, jalankan bundle exec rake install .
Laporan bug dan permintaan tarik dipersilakan di GitHub di https://github.com/robotdana/leftovers.
Saya terutama mendorong masalah dan peningkatan pada konfigurasi default, apakah memperluas konfigurasi/*yang ada atau menambahkan permata baru. File harus dinamai [rubygems name].yml dan strukturnya identik dengan konfigurasi proyek
Permata tersedia sebagai open source di bawah ketentuan lisensi MIT.