Sha256: b5de656c6d844a9d0657bc68015aa5792cf8fa6b762f153539d41afdde6e7ce3
Contents?: true
Size: 1.61 KB
Versions: 9
Compression:
Stored size: 1.61 KB
Contents
# frozen_string_literal: true module RuboCop module Cop module Style # Checks for lambdas and procs that always return nil, # which can be replaced with an empty lambda or proc instead. # # @example # # bad # -> { nil } # # lambda do # next nil # end # # proc { nil } # # Proc.new do # break nil # end # # # good # -> {} # # lambda do # end # # -> (x) { nil if x } # # proc {} # # Proc.new { nil if x } # class NilLambda < Base extend AutoCorrector include RangeHelp MSG = 'Use an empty %<type>s instead of always returning nil.' # @!method nil_return?(node) def_node_matcher :nil_return?, <<~PATTERN { ({return next break} nil) (nil) } PATTERN def on_block(node) return unless node.lambda? || node.proc? return unless nil_return?(node.body) message = format(MSG, type: node.lambda? ? 'lambda' : 'proc') add_offense(node, message: message) do |corrector| autocorrect(corrector, node) end end private def autocorrect(corrector, node) range = if node.single_line? range_with_surrounding_space(node.body.loc.expression) else range_by_whole_lines(node.body.loc.expression, include_final_newline: true) end corrector.remove(range) end end end end end
Version data entries
9 entries across 9 versions & 2 rubygems