Sha256: 00c41a71c879d7a62ecc78bf9087126d8a068dd7c6634829d33554d8b636ff12
Contents?: true
Size: 1.51 KB
Versions: 24
Compression:
Stored size: 1.51 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Lint # This cop checks for interpolation 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) parent = node.parent return if parent && (parent.dstr_type? || parent.regexp_type?) return unless /(?<!\\)#\{.*\}/.match?(node.source) return if heredoc?(node) add_offense(node) do |corrector| autocorrect(corrector, node) end 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
24 entries across 24 versions & 3 rubygems