class Gitlab::Styles::Rubocop::Cop::LineBreakAfterGuardClauses

Ensures a line break after guard clauses.

@example

# bad
return unless condition
do_stuff

# good
return unless condition

do_stuff

# bad
raise if condition
do_stuff

# good
raise if condition

do_stuff

Multiple guard clauses are allowed without
line break.

# good
return unless condition_a
return unless condition_b

do_stuff

Guard clauses in case statement are allowed without
line break.

# good
case model
  when condition_a
    return true unless condition_b
  when
    ...
end

Guard clauses before end are allowed without
line break.

# good
if condition_a
  do_something
else
  do_something_else
  return unless condition
end

do_something_more

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 75
def autocorrect(node)
  lambda do |corrector|
    corrector.insert_after(node.loc.expression, "\n")
  end
end
on_if(node) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 67
def on_if(node)
  return unless node.single_line?
  return unless guard_clause?(node)
  return if next_line(node).blank? || clause_last_line?(next_line(node)) || guard_clause?(next_sibling(node))

  add_offense(node)
end

Private Instance Methods

clause_last_line?(line) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 97
def clause_last_line?(line)
  line =~ /^\s*(?:end|elsif|else|when|rescue|ensure)/
end
guard_clause?(node) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 83
def guard_clause?(node)
  return false unless node.if_type?

  guard_clause_node?(node.if_branch)
end
next_line(node) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 93
def next_line(node)
  processed_source[node.loc.line]
end
next_sibling(node) click to toggle source
# File lib/gitlab/styles/rubocop/cop/line_break_after_guard_clauses.rb, line 89
def next_sibling(node)
  node.parent.children[node.sibling_index + 1]
end