class RuboCop::Cop::Style::EmptyLineBetweenDefs
This cop checks whether method definitions are separated by empty lines.
Constants
- MSG
Public Instance Methods
check_defs(nodes)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 23 def check_defs(nodes) return if blank_lines_between?(*nodes) return if nodes.all?(&:single_line?) && cop_config['AllowAdjacentOneLineDefs'] add_offense(nodes.last, :keyword) end
on_begin(node)
click to toggle source
We operate on `begin` nodes, instead of using `OnMethodDef`, so that we can walk over pairs of consecutive nodes and efficiently access a node's predecessor; prev_node ends up doing a linear scan over siblings, so we don't want to call it on each def.
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 16 def on_begin(node) node.children.each_cons(2) do |prev, n| nodes = [prev, n] check_defs(nodes) if nodes.all?(&method(:def_node?)) end end
Private Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 62 def autocorrect(node) prev_def = prev_node(node) end_pos = prev_def.loc.end.end_pos source_buffer = prev_def.loc.end.source_buffer newline_pos = source_buffer.source.index("\n", end_pos) newline = Parser::Source::Range.new(source_buffer, newline_pos, newline_pos + 1) ->(corrector) { corrector.insert_after(newline, "\n") } end
blank_lines_between?(first_def_node, second_def_node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 38 def blank_lines_between?(first_def_node, second_def_node) lines_between_defs(first_def_node, second_def_node).any?(&:blank?) end
def_end(node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 58 def def_end(node) node.loc.end.line end
def_node?(node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 33 def def_node?(node) return unless node node.def_type? || node.defs_type? end
def_start(node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 54 def def_start(node) node.loc.keyword.line end
lines_between_defs(first_def_node, second_def_node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 48 def lines_between_defs(first_def_node, second_def_node) line_range = def_end(first_def_node)..(def_start(second_def_node) - 2) processed_source.lines[line_range] end
prev_node(node)
click to toggle source
# File lib/rubocop/cop/style/empty_line_between_defs.rb, line 42 def prev_node(node) return nil unless node.sibling_index > 0 node.parent.children[node.sibling_index - 1] end