class RuboCop::Cop::Style::ExactRegexpMatch
Checks for exact regexp match inside ‘Regexp` literals.
@example
# bad string =~ /\Astring\z/ string === /\Astring\z/ string.match(/\Astring\z/) string.match?(/\Astring\z/) # good string == 'string' # bad string !~ /\Astring\z/ # good string != 'string'
Constants
- MSG
- RESTRICT_ON_SEND
Public Instance Methods
Source
# File lib/rubocop/cop/style/exact_regexp_match.rb, line 40 def on_send(node) return unless (receiver = node.receiver) return unless (regexp = exact_regexp_match(node)) return unless (parsed_regexp = parse_regexp(regexp)) return unless exact_match_pattern?(parsed_regexp) prefer = "#{receiver.source} #{new_method(node)} '#{parsed_regexp[1].text}'" add_offense(node, message: format(MSG, prefer: prefer)) do |corrector| corrector.replace(node, prefer) end end
Also aliased as: on_csend
Private Instance Methods
Source
# File lib/rubocop/cop/style/exact_regexp_match.rb, line 56 def exact_match_pattern?(parsed_regexp) tokens = parsed_regexp.map(&:token) return false unless tokens[0] == :bos && tokens[1] == :literal && tokens[2] == :eos !parsed_regexp[1].quantifier end
Source
# File lib/rubocop/cop/style/exact_regexp_match.rb, line 63 def new_method(node) node.method?(:!~) ? '!=' : '==' end