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