class RuboCop::Cop::Layout::RedundantLineBreak
Checks whether certain expressions, e.g. method calls, that could fit completely on a single line, are broken up into multiple lines unnecessarily.
@example
# bad foo( a, b ) # good foo(a, b) # bad puts 'string that fits on ' \ 'a single line' # good puts 'string that fits on a single line' # bad things .select { |thing| thing.cond? } .join('-') # good things.select { |thing| thing.cond? }.join('-')
@example InspectBlocks: false (default)
# good foo(a) do |x| puts x end
@example InspectBlocks: true
# bad foo(a) do |x| puts x end # good foo(a) { |x| puts x }
Constants
- MSG
Public Instance Methods
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 56 def on_lvasgn(node) super unless end_with_percent_blank_string?(processed_source) end
Calls superclass method
RuboCop::Cop::CheckAssignment#on_lvasgn
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 60 def on_send(node) # Include "the whole expression". node = node.parent while node.parent&.send_type? || convertible_block?(node) || node.parent.is_a?(RuboCop::AST::BinaryOperatorNode) return unless offense?(node) && !part_of_ignored_node?(node) register_offense(node) end
Also aliased as: on_csend
Private Instance Methods
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 78 def check_assignment(node, _rhs) return unless offense?(node) register_offense(node) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 108 def configured_to_not_be_inspected?(node) return true if other_cop_takes_precedence?(node) return false if cop_config['InspectBlocks'] node.any_block_type? || any_descendant?(node, :any_block, &:multiline?) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 125 def convertible_block?(node) return false unless (parent = node.parent) parent.any_block_type? && node == parent.send_node && (node.parenthesized? || !node.arguments?) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 74 def end_with_percent_blank_string?(processed_source) processed_source.buffer.source.end_with?("%\n\n") end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 102 def index_access_call_chained?(node) return false unless node.send_type? && node.method?(:[]) node.children.first.send_type? && node.children.first.method?(:[]) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 91 def offense?(node) return false unless node.multiline? && suitable_as_single_line?(node) return require_backslash?(node) if node.operator_keyword? !index_access_call_chained?(node) && !configured_to_not_be_inspected?(node) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 115 def other_cop_takes_precedence?(node) single_line_block_chain_enabled? && any_descendant?(node, :any_block) do |block_node| block_node.parent.send_type? && block_node.parent.loc.dot && !block_node.multiline? end end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 84 def register_offense(node) add_offense(node) do |corrector| corrector.replace(node, to_single_line(node.source).strip) end ignore_node(node) end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 98 def require_backslash?(node) processed_source.lines[node.loc.operator.line - 1].end_with?('\\') end
Source
# File lib/rubocop/cop/layout/redundant_line_break.rb, line 121 def single_line_block_chain_enabled? @config.cop_enabled?('Layout/SingleLineBlockChain') end