在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许可证的条款,该宝石可作为开源。