Class: RuboCop::Cop::Style::RedundantInterpolationUnfreeze

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector, TargetRubyVersion
Includes:
FrozenStringLiteral
Defined in:
lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb

Overview

Before Ruby 3.0, interpolated strings followed the frozen string literal magic comment which sometimes made it necessary to explicitly unfreeze them. Ruby 3.0 changed interpolated strings to always be unfrozen which makes unfreezing them redundant.

Examples:

# bad
+"#{foo} bar"

# bad
"#{foo} bar".dup

# good
"#{foo} bar"

Constant Summary collapse

MSG =
"Don't unfreeze interpolated strings as they are already unfrozen."
RESTRICT_ON_SEND =
%i[+@ dup].freeze

Constants included from FrozenStringLiteral

FrozenStringLiteral::FROZEN_STRING_LITERAL, FrozenStringLiteral::FROZEN_STRING_LITERAL_ENABLED

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods included from TargetRubyVersion

maximum_target_ruby_version, minimum_target_ruby_version, required_maximum_ruby_version, required_minimum_ruby_version, support_target_ruby_version?

Methods included from FrozenStringLiteral

frozen_string_literal_comment_exists?

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

This class inherits a constructor from RuboCop::Cop::Base

Instance Method Details

#on_send(node) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rubocop/cop/style/redundant_interpolation_unfreeze.rb', line 32

def on_send(node)
  return if node.arguments?
  return unless (receiver = node.receiver)
  return unless receiver.dstr_type?
  return if uninterpolated_string?(receiver) || uninterpolated_heredoc?(receiver)

  add_offense(node.loc.selector) do |corrector|
    corrector.remove(node.loc.selector)
    corrector.remove(node.loc.dot) unless node.unary_operation?
  end
end