It's always annoyed me that pgindent insists on adjusting vertical
whitespace around #else and related commands. This has, for example,
rendered src/include/storage/barrier.h nigh illegible: you get things
like
/** lwsync orders loads with respect to each other, and similarly with stores.* But a load can be performed before a
subsequentstore, so sync must be used* for a full memory barrier.*/
#define pg_memory_barrier() __asm__ __volatile__ ("sync" : : : "memory")
#define pg_read_barrier() __asm__ __volatile__ ("lwsync" : : : "memory")
#define pg_write_barrier() __asm__ __volatile__ ("lwsync" : : : "memory")
#elif defined(__alpha) || defined(__alpha__) /* Alpha */
which makes it look like this block of code has something to do with
Alpha.
By chance, I noticed today that this misbehavior comes from a discretely
identifiable spot, to wit lines 289-290 in src/tools/pgindent/pgindent:
# Remove blank line(s) before #else, #elif, and #endif$source =~ s!\n\n+(\#else|\#elif|\#endif)!\n$1!g;
This seems pretty broken to me: why exactly is whitespace there such a
bad idea? Not only that, but the next action is concerned with undoing
some of the damage this rule causes:
# Add blank line before #endif if it is the last line in the file$source =~ s!\n(#endif.*)\n\z!\n\n$1\n!;
I assert that we should simply remove both of these bits of code, as
just about every committer on the project is smarter about when to use
vertical whitespace than this program is.
Thoughts?
regards, tom lane