class RuboCop::Cop::Style::UnneededInterpolation
This cop checks for strings that are just an interpolated expression.
@example
# bad "#{@var}" # good @var.to_s # good if @var is already a String @var
Constants
- MSG
Public Class Methods
autocorrect_incompatible_with()
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 23 def self.autocorrect_incompatible_with [Style::LineEndConcatenation] end
Public Instance Methods
on_dstr(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 27 def on_dstr(node) add_offense(node) if single_interpolation?(node) end
Private Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 65 def autocorrect(node) embedded_node = node.children.first if variable_interpolation?(embedded_node) autocorrect_variable_interpolation(embedded_node, node) elsif single_variable_interpolation?(embedded_node) autocorrect_single_variable_interpolation(embedded_node, node) else autocorrect_other(embedded_node, node) end end
autocorrect_other(embedded_node, node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 88 def autocorrect_other(embedded_node, node) loc = node.loc embedded_loc = embedded_node.loc lambda do |corrector| corrector.replace(loc.begin, '') corrector.replace(loc.end, '') corrector.replace(embedded_loc.begin, '(') corrector.replace(embedded_loc.end, ').to_s') end end
autocorrect_single_variable_interpolation(embedded_node, node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 82 def autocorrect_single_variable_interpolation(embedded_node, node) variable_loc = embedded_node.children.first.loc replacement = "#{variable_loc.expression.source}.to_s" ->(corrector) { corrector.replace(node.loc.expression, replacement) } end
autocorrect_variable_interpolation(embedded_node, node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 77 def autocorrect_variable_interpolation(embedded_node, node) replacement = "#{embedded_node.loc.expression.source}.to_s" ->(corrector) { corrector.replace(node.loc.expression, replacement) } end
embedded_in_percent_array?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 60 def embedded_in_percent_array?(node) node.parent && node.parent.array_type? && percent_literal?(node.parent) end
implicit_concatenation?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 56 def implicit_concatenation?(node) node.parent && node.parent.dstr_type? end
interpolation?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 48 def interpolation?(node) variable_interpolation?(node) || node.begin_type? end
single_child?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 44 def single_child?(node) node.children.one? end
single_interpolation?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 33 def single_interpolation?(node) single_child?(node) && interpolation?(node.children.first) && !implicit_concatenation?(node) && !embedded_in_percent_array?(node) end
single_variable_interpolation?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 40 def single_variable_interpolation?(node) single_child?(node) && variable_interpolation?(node.children.first) end
variable_interpolation?(node)
click to toggle source
# File lib/rubocop/cop/style/unneeded_interpolation.rb, line 52 def variable_interpolation?(node) node.variable? || node.reference? end