Empty code block is very common in classes (like the ones that extend \Exception), functions (to pass empty callable if no null is allowed), catch blocks (if some expressions should be caught/supressed but not handled) etc.
I do belive that PSR-12 should be very clear about this as the usage is very common.
My proposal is: add a blank line before the closing bracket if and only if a new line is before the opening bracket and there is no content inside the block (code nor comment), i.e.:
class A extends B
{
}
try {
// try body
} catch (FirstThrowableType $e) {}
but what to with if/else like this one:
if () {
} else {}
or try/catch:
try {
} finally {
// finally body
}
or do/while like:
do {
} while();
extend my proposal condition "a new line is before the opening bracket, there is no content inside the block and the closing bracket is the last part of that expression (except semicolon)"
What do you think?