class RuboCop::Cop::Freee::ScopeReturnValue

scope内でselfを返していないかチェックするcop. selfを返すとwhere句がすべて外れ、全ユーザーのデータが 見えてしまう恐れがある.

autocorrectは実装しない.

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 19
def on_send(node)
  return unless scope_node?(node)

  scope_call(node) do |args|
    n = args.find(&:lambda_or_proc?)
    return unless n

    add_offense(node, :expression, MSG) unless check_scope_node(n)
  end
end

Private Instance Methods

caller_node?(node) click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 40
def caller_node?(node)
  node.parent.send_type?
end
check_scope_node(node) click to toggle source

末端のNodeかつtypeがselfなものがあればアウト

# File lib/rubocop/cop/scope_return_value.rb, line 45
def check_scope_node(node)
  res = true
  node.each_descendant do |n|
    res = false if self_of_end?(n) && !caller_node?(n)
  end
  res
end
scope_node?(node) click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 32
def scope_node?(node)
  node.send_type? && node.method_name == :scope
end
self_of_end?(node) click to toggle source
# File lib/rubocop/cop/scope_return_value.rb, line 36
def self_of_end?(node)
  node.self_type? && node.descendants.size.zero?
end