Good points, the second one in particular I don't think could be fixed without a full parser. Function order changes could possibly be worked around by a formatter/linter that can reorder functions, at the risk of creating more issues. The last could be handled be passing the code through the preprocessor (the -E flag in gcc) first.
By this point it's probably gone beyond the "perfect is the enemy of good" threshold though.
By this point it's probably gone beyond the "perfect is the enemy of good" threshold though.