我正在使用reek我的代码中的最佳实践分析工具.但是最近我发现如果在方法中,我有布尔参数,比如.
def method (flag = true)
Run Code Online (Sandbox Code Playgroud)
reek给我一个警告.为什么reek告诉我这是一个警告?
我正在关注 Michael Hartl 教程 Rails 课程。在第 7 章,我在 UsersController 上运行 Reek 并收到以下警告:
app/controllers/users_controller.rb - 1 条警告:
1 :InstanceVariableAssumption:UsersController 对实例变量“@user”[ https://github.com/troessner/reek/blob/master/docs/Instance-Variable-假设太多假设.md]
这是我的代码:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new user_params
if @user.save
flash[:success] = t "welcome_to_app"
redirect_to @user
else
render "new"
end
end
def show
@user = User.find_by id: params[:id]
return if @user
flash[:danger] = t "not_exist_user"
redirect_to root_path
end
private
def user_params
params.require(:user).permit :name, :email, :password,
:password_confirmation
end …Run Code Online (Sandbox Code Playgroud) 我正在使用一种工具在代码中找到代码气味,这个代码叫做reek,我遇到一个名为Control Parameter的问题
def place_ship(ship, start_position, orientation)
@row = start_position[:row]
@column = start_position[:column]
ship.length.times do
if orientation == :vertical
vertical_place_ship(row,column,ship)
else
horizontal_place_ship(row,column,ship)
end
end
end
def vertical_place_ship(row,column,ship)
self.grid[row][column].ship = ship
self.grid[row][column].status = :occupied
@row += 1
end
def horizontal_place_ship(row,column,ship)
self.grid[row][column].ship = ship
self.grid[row][column].status = :occupied
@column += 1
end
Run Code Online (Sandbox Code Playgroud)
警告的内容:[55]:ControlParameter:Board#place_ship由参数'orientation'控制
解决这种气味的最佳方法是什么?
提前致谢,
马丁
有没有办法禁用reek每个方法、每行或每个块的 gem 警告?
rubocop例如我们有什么
# suppress warning Use snake_case for method names
def fooBar(baz) # rubocop:disable Naming/MethodName
baz
end
Run Code Online (Sandbox Code Playgroud)
这个例子将抑制 rubocop 的警告,我正在寻找类似的reek工具。
def foo(bar) # reek:disable TooManyStatements
baz = bar + bar
# other line
# more line
# that produce reek warning
baz
end
Run Code Online (Sandbox Code Playgroud)
在文档中我发现它只能通过配置文件进行配置,但这不是我想要的
我想知道在ruby中是否有更简单的方法来处理这种情况
我的情况:
a = params[:smth].to_s == 'foo' ? 'foo2' : params[:smth].to_s
Run Code Online (Sandbox Code Playgroud)
这种情况的问题,即reek抛出使用params[:smth]2次的警告,有一种可能分配params[:smth]给变量,但也许你知道更聪明的方式?