class RuboCop::Cop::Layout::SingleLineBlockChain
Checks if method calls are chained onto single line blocks. It considers that a line break before the dot improves the readability of the code.
@example
# bad example.select { |item| item.cond? }.join('-') # good example.select { |item| item.cond? } .join('-') # good (not a concern for this cop) example.select do |item| item.cond? end.join('-')
Constants
- MSG
Public Class Methods
Source
# File lib/rubocop/cop/layout/single_line_block_chain.rb, line 28 def self.autocorrect_incompatible_with [Style::MapToHash] end
Public Instance Methods
Source
# File lib/rubocop/cop/layout/single_line_block_chain.rb, line 32 def on_send(node) range = offending_range(node) add_offense(range) { |corrector| corrector.insert_before(range, "\n") } if range end
Also aliased as: on_csend
Private Instance Methods
Source
# File lib/rubocop/cop/layout/single_line_block_chain.rb, line 56 def call_method_after_block?(node, dot_range, closing_block_delimiter_line_num) return false if dot_range.line > closing_block_delimiter_line_num dot_range.column < selector_range(node).column end
Source
# File lib/rubocop/cop/layout/single_line_block_chain.rb, line 40 def offending_range(node) receiver = node.receiver return unless receiver&.any_block_type? receiver_location = receiver.loc closing_block_delimiter_line_num = receiver_location.end.line return if receiver_location.begin.line < closing_block_delimiter_line_num node_location = node.loc dot_range = node_location.dot return unless dot_range return unless call_method_after_block?(node, dot_range, closing_block_delimiter_line_num) range_between(dot_range.begin_pos, selector_range(node).end_pos) end
Source
# File lib/rubocop/cop/layout/single_line_block_chain.rb, line 62 def selector_range(node) # l.(1) has no selector, so we use the opening parenthesis instead node.loc.selector || node.loc.begin end