标签: reek

方法中的布尔参数.为什么不?

我正在使用reek我的代码中的最佳实践分析工具.但是最近我发现如果在方法中,我有布尔参数,比如.

def method (flag = true)
Run Code Online (Sandbox Code Playgroud)

reek给我一个警告.为什么reek告诉我这是一个警告?

ruby-on-rails reek

7
推荐指数
1
解决办法
3825
查看次数

InstanceVariableAssumption:UsersController 为实例变量“@user”假设太多

我正在关注 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)

ruby ruby-on-rails reek

3
推荐指数
1
解决办法
1615
查看次数

重构控制参数

我正在使用一种工具在代码中找到代码气味,这个代码叫做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'控制

解决这种气味的最佳方法是什么?

提前致谢,

马丁

ruby refactoring reek

2
推荐指数
1
解决办法
570
查看次数

禁用内联或按方法臭味代码气味检测器

有没有办法禁用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 ruby-on-rails reek

2
推荐指数
1
解决办法
1564
查看次数

用params重构红宝石条件

我想知道在ruby中是否有更简单的方法来处理这种情况

我的情况:

a = params[:smth].to_s == 'foo' ? 'foo2' : params[:smth].to_s
Run Code Online (Sandbox Code Playgroud)

这种情况的问题,即reek抛出使用params[:smth]2次的警告,有一种可能分配params[:smth]给变量,但也许你知道更聪明的方式?

ruby refactoring reek conditional-statements

0
推荐指数
1
解决办法
76
查看次数