class RuboCop::Cop::Style::MutableConstant
CONST = [1, 2, 3].freeze
# good
CONST = [1, 2, 3]
# bad
@example
mutable literal (e.g. array or hash).
This cop checks whether some constant value isn’t a
def autocorrect(node)
def autocorrect(node) expr = node.source_range lambda do |corrector| if node.array_type? && node.loc.begin.nil? && node.loc.end.nil? corrector.insert_before(expr, '[') corrector.insert_after(expr, '].freeze') else corrector.insert_after(expr, '.freeze') end end end
def on_assignment(value)
def on_assignment(value) return unless value return unless value.mutable_literal? return if FROZEN_STRING_LITERAL_TYPES.include?(value.type) && frozen_string_literals_enabled?(processed_source) add_offense(value, :expression) end
def on_casgn(node)
def on_casgn(node) _scope, _const_name, value = *node on_assignment(value) end
def on_or_asgn(node)
def on_or_asgn(node) lhs, value = *node on_assignment(value) if lhs && lhs.type == :casgn end