class RuboCop::Cop::Style::ConstantVisibility
end
public_constant :BAZ
BAZ = 43
private_constant :BAR
BAR = 42
class Foo
# good
end
BAZ = 43
BAR = 42
class Foo
# bad
@example
clear, and prevents outside actors from touching private state.
class or module. Explicitly declaring a visibility makes intent more
and module constants public, which litters the public API of the
an explicit visibility declaration. By default, Ruby makes all class-
This cop checks that constants defined in classes and modules have
def class_or_module_scope?(node)
def class_or_module_scope?(node) node.parent && %i[class module].include?(node.parent.type) end
def message(node)
def message(node) _namespace, constant_name, _value = *node format(MSG, constant_name: constant_name) end
def on_casgn(node)
def on_casgn(node) return unless class_or_module_scope?(node) return if visibility_declaration?(node) add_offense(node) end
def visibility_declaration?(node)
def visibility_declaration?(node) _namespace, constant_name, _value = *node node.parent.each_child_node(:send).any? do |child| visibility_declaration_for?(child, constant_name) end end