Rubocop总是报告错误:
app/controllers/account_controller.rb:5:3:C:赋值分支索引的条件大小太高.[30.95/24]
if params[:role] @users = @search.result.where(:role => params[:role]) elsif params[:q] && params[:q][:s].include?('count') @users = @search.result.order(params[:q][:s]) else @users = @search.result end
怎么解决?谁有好主意?
的ABC尺寸[1] [2]是
通过计算一段代码的赋值,分支和条件的数量来计算.原始C++ Report文章中的计数规则专门针对C,C++和Java语言.
之前的链接详细说明了A,B和C的重要性.ABC大小是一个标量大小,让人联想到三角关系:
|ABC| = sqrt((A*A)+(B*B)+(C*C))
实际上,关于错误的快速谷歌显示第一个索引页面是呈现该消息的方法的Rubocop文档.
您的回购或分析工具将在触发警告时定义阈值金额.
您的代码计算为
(1+1+1)^2 + (1+1+1+1+1+1+1+1+1+1+1+1+1)^2 + (1+1+1+1)^2 => 194
这是一个'盲目'的计算,用我已经组成的值1
.但是,您可以看到错误表示现在可能作为ABC和阈值的数字:
[30.95/24]
所以警察门槛24
和你的ABC size
IS 30.95
.这告诉我们rubocop引擎为A,B和C分配不同的数字.同样,不同种类或赋值(或B或C)也可以具有不同的值.EG"正常"作业x = y
的得分可能低于链接作业x = y = z = r
.
此时,您可能对如何减小ABC大小有一个相当清楚的想法.如果不:
一种简单的方法,它采取用于您的条件elsif
并将其放在辅助方法中.
因为你正在分配一个@
变量,并且主要是从一个变量调用,所以你的代码不使用内存封装.因此,您可以移动它们if
并将elsif
操作阻止到它们自己load_search_users_by_role
和load_search_users_by_order
方法中.