class RuboCop::Cop::Lint::InterpolationCheck
Checks for interpolation in a single quoted string.
@safety
This cop is generally safe, but is marked as unsafe because it is possible to actually intentionally have text inside `#{...}` in a single quoted string.
@example
# bad foo = 'something with #{interpolation} inside'
@example
# good foo = "something with #{interpolation} inside"
Constants
- MSG
Public Instance Methods
on_str(node)
click to toggle source
# File lib/rubocop/cop/lint/interpolation_check.rb, line 30 def on_str(node) return if node.parent&.regexp_type? return unless /(?<!\\)#\{.*\}/.match?(node.source) return if heredoc?(node) return unless node.loc.begin && node.loc.end add_offense(node) { |corrector| autocorrect(corrector, node) } end
Private Instance Methods
autocorrect(corrector, node)
click to toggle source
# File lib/rubocop/cop/lint/interpolation_check.rb, line 41 def autocorrect(corrector, node) starting_token, ending_token = if node.source.include?('"') ['%{', '}'] else ['"', '"'] end corrector.replace(node.loc.begin, starting_token) corrector.replace(node.loc.end, ending_token) end
heredoc?(node)
click to toggle source
# File lib/rubocop/cop/lint/interpolation_check.rb, line 52 def heredoc?(node) node.loc.is_a?(Parser::Source::Map::Heredoc) || (node.parent && heredoc?(node.parent)) end