Sha256: 90874058e7b1d95bda5ee786130cc4ef446b8f17d689fcd32d84118180b3c16a
Contents?: true
Size: 1.68 KB
Versions: 21
Compression:
Stored size: 1.68 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Lint # This cop 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" class InterpolationCheck < Base extend AutoCorrector MSG = 'Interpolation in single quoted string detected. '\ 'Use double quoted strings if you need interpolation.' 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 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 def heredoc?(node) node.loc.is_a?(Parser::Source::Map::Heredoc) || (node.parent && heredoc?(node.parent)) end end end end end
Version data entries
21 entries across 21 versions & 4 rubygems