class RuboCop::Cop::Style::MutableConstant

This cop checks whether some constant value isn't a mutable literal (e.g. array or hash).

@example

# bad
CONST = [1, 2, 3]

# good
CONST = [1, 2, 3].freeze

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/style/mutable_constant.rb, line 30
def autocorrect(node)
  expr = node.source_range
  ->(corrector) { corrector.replace(expr, "#{expr.source}.freeze") }
end
on_casgn(node) click to toggle source
# File lib/rubocop/cop/style/mutable_constant.rb, line 20
def on_casgn(node)
  _scope, _const_name, value = *node
  on_assignment(value)
end
on_or_asgn(node) click to toggle source
# File lib/rubocop/cop/style/mutable_constant.rb, line 25
def on_or_asgn(node)
  lhs, value = *node
  on_assignment(value) if lhs && lhs.type == :casgn
end

Private Instance Methods

on_assignment(value) click to toggle source
# File lib/rubocop/cop/style/mutable_constant.rb, line 37
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