class Gitlab::Styles::Rubocop::Cop::LineBreakAroundConditionalBlock
Ensures a line break around conditional blocks.
@example
# bad do_something if condition do_extra_stuff end do_something_more # good do_something if condition do_extra_stuff end do_something_more # bad do_something unless condition do_extra_stuff end do_something_more # good def a_method if condition do_something end end # good on_block do if condition do_something end end
Constants
- MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 62 def autocorrect(node) lambda do |corrector| line = range_by_whole_lines(node.source_range) corrector.insert_before(line, "\n") unless previous_line_valid?(node) corrector.insert_after(line, "\n") unless last_line_valid?(node) end end
on_if(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 52 def on_if(node) # This cop causes errors in haml files, so let's skip those return if in_haml?(node) return if node.single_line? return unless node.if? || node.unless? add_offense(node) unless previous_line_valid?(node) add_offense(node) unless last_line_valid?(node) end
Private Instance Methods
assignment_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 109 def assignment_line?(line) line =~ /^\s*.*=/ end
begin_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 104 def begin_line?(line) # an assignment followed by a begin or ust a begin line =~ /^\s*(@?(\w|\|+|=|\[|\]|\s)+begin|begin)/ end
block_start?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 117 def block_start?(line) line.match(/ (do|{)( \|.*?\|)?\s?(#.+)?\z/) end
end_clause_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 100 def end_clause_line?(line) line =~ /^\s*(#|rescue|else|elsif|when)/ end
end_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 121 def end_line?(line) line =~ /^\s*(end|})/ end
in_haml?(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 125 def in_haml?(node) node.location.expression.source_buffer.name.end_with?('.haml.rb') end
last_line(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 92 def last_line(node) processed_source[node.loc.last_line] end
last_line_valid?(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 82 def last_line_valid?(node) last_line(node).empty? || end_line?(last_line(node)) || end_clause_line?(last_line(node)) end
previous_line(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 88 def previous_line(node) processed_source[node.loc.line - 2] end
previous_line_valid?(node)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 73 def previous_line_valid?(node) previous_line(node).empty? || start_clause_line?(previous_line(node)) || block_start?(previous_line(node)) || begin_line?(previous_line(node)) || assignment_line?(previous_line(node)) || rescue_line?(previous_line(node)) end
rescue_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 113 def rescue_line?(line) line =~ /^\s*rescue/ end
start_clause_line?(line)
click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_around_conditional_block.rb, line 96 def start_clause_line?(line) line =~ /^\s*(def|=end|#|module|class|if|unless|else|elsif|ensure|when)/ end