I found this inconsistency of span between `ast::StmtSemi` and `ast::StmtMac` when working on this bug. One has the span excludes the trailing semi, the other not. In fact, including all the whitespaces of `format!() ;` in its span make the note message accurately point to the semi :D On the other hand, for a normal statement like `x + 1   ;`, there's no way to place the note message precisely on the offending semi.

The fix, of course, is ugly. Another way is to include the trailing semi for both `StmtSemi` and `StmtMac`, which requires some more digging.