pgindent versus struct members and typedefs
Nathan Bossart <nathandbossart@gmail.com>
From: Nathan Bossart <nathandbossart@gmail.com>
To: Chao Li <li.evan.chao@gmail.com>
Cc: Rahila Syed <rahilasyed90@gmail.com>, Robert Haas <robertmhaas@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-12-02T22:00:51Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pgindent: Fix spacing after != when member name matches typedef.
- a3e6beba60ec 19 (unreleased) landed
-
Exclude fmgrprotos.h from pgindent processing.
- c4133ec169df 14.0 cited
On Mon, Dec 01, 2025 at 05:04:23PM -0600, Nathan Bossart wrote: > On Tue, Dec 02, 2025 at 05:35:34AM +0800, Chao Li wrote: >> ``` >> + else if (entry->type == DSMR_ENTRY_TYPE_DSH && >> + entry->dsh.dsa_handle !=DSA_HANDLE_INVALID) >> ``` >> >> Missing a white space after !=. > > I agree, but for some reason, pgindent insists on removing that space. I'm > leaving that for another thread. So, this seems to have something to do with the struct member having the same name as a typedef. If I rename the member, pgindent adds the space as expected. Interestingly, changing the != to a == also fixes the spacing. There are a couple of other examples in the code: src/backend/storage/ipc/dsm_registry.c: entry->dsh.dsa_handle !=DSA_HANDLE_INVALID) src/backend/replication/logical/logicalfuncs.c: ctx->options.output_type !=OUTPUT_PLUGIN_TEXTUAL_OUTPUT) src/bin/pg_basebackup/pg_basebackup.c: if (state.manifest_file !=NULL) src/bin/pg_basebackup/pg_basebackup.c: state->manifest_file !=NULL) src/bin/pg_basebackup/pg_basebackup.c: else if (state->manifest_file !=NULL) I used the following command to find these: grep -E "!=[A-Za-z]" ./* -rI AFAICT this is a special case of the note added to pgindent's README by commit c4133ec: pgindent will mangle both declaration and definition of a C function whose name matches a typedef. Currently the best workaround is to choose non-conflicting names. I tried to fix pgindent for a few, but the code is basically impenetrable. I didn't find any fixes upstream [0], either. As noted above, we could also fix it by avoiding the naming conflicts. However, I can't imagine that's worth the churn, and I've already spent way too much time on this, so IMHO the best thing to do here is nothing. [0] https://github.com/freebsd/freebsd-src/tree/main/usr.bin/indent -- nathan