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