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