lib/rubocop/cop/style/redundant_exception.rb in rbhint-0.85.1.rc2 vs lib/rubocop/cop/style/redundant_exception.rb in rbhint-0.87.1.rc1

- old
+ new

@@ -14,46 +14,50 @@ # # Bad # raise RuntimeError.new('message') # # # Good # raise 'message' - class RedundantException < Cop + 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.' + # Switch `raise RuntimeError, 'message'` to `raise 'message'`, and + # `raise RuntimeError.new('message')` to `raise 'message'`. def on_send(node) - exploded?(node) { return add_offense(node, message: MSG_1) } - compact?(node) { add_offense(node, message: MSG_2) } + fix_exploded(node) || fix_compact(node) end - # Switch `raise RuntimeError, 'message'` to `raise 'message'`, and - # `raise RuntimeError.new('message')` to `raise 'message'`. - def autocorrect(node) # rubocop:disable Metrics/MethodLength + def fix_exploded(node) exploded?(node) do |command, message| - return lambda do |corrector| + 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| - lambda do |corrector| + 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? :RuntimeError) $_) + (send nil? ${:raise :fail} (const {nil? cbase} :RuntimeError) $_) PATTERN def_node_matcher :compact?, <<~PATTERN - (send nil? {:raise :fail} $(send (const nil? :RuntimeError) :new $_)) + (send nil? {:raise :fail} $(send (const {nil? cbase} :RuntimeError) :new $_)) PATTERN end end end end