Sha256: 000db663850afb81b16edf30cb78272e85d0510cb10f37d08b2a2dc3ed6de07f
Contents?: true
Size: 1.97 KB
Versions: 4
Compression:
Stored size: 1.97 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Style # This cop checks for RuntimeError as the argument of raise/fail. # # It checks for code like this: # # @example # # Bad # raise RuntimeError, 'message' # # # Bad # raise RuntimeError.new('message') # # # Good # raise 'message' class RedundantException < Base extend AutoCorrector MSG_1 = 'Redundant `RuntimeError` argument can be removed.' MSG_2 = 'Redundant `RuntimeError.new` call can be replaced with ' \ 'just the message.' RAISE_METHODS = %i[raise fail].freeze # Switch `raise RuntimeError, 'message'` to `raise 'message'`, and # `raise RuntimeError.new('message')` to `raise 'message'`. def on_send(node) return unless RAISE_METHODS.include?(node.method_name) fix_exploded(node) || fix_compact(node) end def fix_exploded(node) exploded?(node) do |command, message| add_offense(node, message: MSG_1) do |corrector| if node.parenthesized? corrector.replace(node, "#{command}(#{message.source})") else corrector.replace(node, "#{command} #{message.source}") end end end end def fix_compact(node) compact?(node) do |new_call, message| add_offense(node, message: MSG_2) do |corrector| corrector.replace(new_call, message.source) end end end def_node_matcher :exploded?, <<~PATTERN (send nil? ${:raise :fail} (const {nil? cbase} :RuntimeError) $_) PATTERN def_node_matcher :compact?, <<~PATTERN (send nil? {:raise :fail} $(send (const {nil? cbase} :RuntimeError) :new $_)) PATTERN end end end end
Version data entries
4 entries across 4 versions & 2 rubygems