class RuboCop::Cop::Style::RedundantFreeze

CONST = 1
# good
CONST = 1.freeze
# bad
@example
string literals when ‘# frozen-string-literal: true` is used.
NOTE: From Ruby 3.0, this cop allows explicit freezing of interpolated
NOTE: Regexp and Range literals are frozen objects since Ruby 3.0.
This cop check for uses of `Object#freeze` on immutable objects.

def immutable_literal?(node)

def immutable_literal?(node)
  node = strip_parenthesis(node)
  return true if node.immutable_literal?
  return true if frozen_string_literal?(node)
  target_ruby_version >= 3.0 && (node.regexp_type? || node.range_type?)
end

def on_send(node)

def on_send(node)
  return unless node.receiver &&
                (immutable_literal?(node.receiver) ||
                 operation_produces_immutable_object?(node.receiver))
  add_offense(node) do |corrector|
    corrector.remove(node.loc.dot)
    corrector.remove(node.loc.selector)
  end
end

def strip_parenthesis(node)

def strip_parenthesis(node)
  if node.begin_type? && node.children.first
    node.children.first
  else
    node
  end
end