Why is this an issue?

Most of the time a block of code is empty when a piece of code is really missing. So such empty block must be either filled or removed.

Noncompliant code example

def compute(a, b)
  sum = a + b
  if  sum > 0 # Noncompliant; empty on purpose or missing piece of code?
  end
  puts "Result: #{sum}"
end

Compliant solution

def compute(a, b)
  sum = a + b
  if  sum > 0
    puts "Positive result"
  end
  puts "Result: #{sum}"
end

Exceptions

When a block contains a comment, this block is not considered to be empty.

while and unless loops are also exception to the rule.

while @order.process_next; end # Compliant