Найдите неиспользованные methods , Classes , CONSTANTS , @instance_variables , @@class_variables и $global_variables в ваших проектах Ruby.
Код, который никогда не выполняется, - это код, который вам не нужно поддерживать
Остатки будут использовать статический анализ, чтобы найти эти биты кода для вас.
Он знает, как некоторые драгоценные камни вызывают для вас методы, включая поддержку большей части рельсов.
Добавьте эту строку в 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 не используется, но не My_method для того, чтобы сделать это для всех определений этого имени, вместо добавления комментария добавьте имя в список keep: «Список: в файле конфигурации».
# 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: список в файле конфигурации.
# 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: Список» # leftovers:allow my_method_name .leftovers.yml
Остатки не выполняют ваш код, поэтому не знают, например, переменные EG в вызовах для 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 Line и номера столбцов будут неправильными, так как файлы должны быть предварительно скомпилированы перед проверкой.
Динамические вызовы и определения, основанные на значениях, копируемых Rails with_options , не отражены остатками.
После проверки репо, запустите bin/setup для установки зависимостей. Затем запустите rake spec , чтобы запустить тесты.
Чтобы установить этот драгоценный камень на локальную машину, запустите bundle exec rake install .
Отчеты об ошибках и запросы на тягу приветствуются на GitHub по адресу https://github.com/robotdana/leftovers.
Я особенно поощряю проблемы и улучшения в конфигурации по умолчанию, будь то расширение существующей конфигурации/*. YML или добавление новых драгоценных камней. Файл должен быть назван [rubygems name].yml , и его структура идентична конфигурации проекта
Драгоценный камень доступен в качестве открытого исходного кода в соответствии с условиями лицензии MIT.