class RuboCop::Cop::Lint::UselessConstantScoping


end
PUBLIC_CONST = 42 # If private scope is not intended.
class Foo
# good
end
private_constant :PRIVATE_CONST
PRIVATE_CONST = 42
class Foo
# good
end
PRIVATE_CONST = 42
private
class Foo
# bad
@example
Or a public constant may be intended.
It does not support autocorrection due to behavior change and multiple ways to fix it.
its appearance.
‘private_constant`. Even if `private` access modifier is used, it is public scope despite
Checks for useless constant scoping. Private constants must be defined using

def after_private_modifier?(left_siblings)

def after_private_modifier?(left_siblings)
  access_modifier_candidates = left_siblings.compact.select do |left_sibling|
    left_sibling.respond_to?(:send_type?) && left_sibling.send_type?
  end
  access_modifier_candidates.any? do |candidate|
    candidate.command?(:private) && candidate.arguments.none?
  end
end

def on_casgn(node)

def on_casgn(node)
  return unless after_private_modifier?(node.left_siblings)
  return if private_constantize?(node.right_siblings, node.name)
  add_offense(node)
end

def private_constantize?(right_siblings, const_value)

def private_constantize?(right_siblings, const_value)
  private_constant_arguments = right_siblings.map { |node| private_constants(node) }
  private_constant_values = private_constant_arguments.flatten.filter_map do |constant|
    constant.value.to_sym if constant.respond_to?(:value)
  end
  private_constant_values.include?(const_value)
end