public inbox for [email protected]
help / color / mirror / Atom feedFrom: Nathan Bossart <[email protected]>
Subject: [PATCH v1 1/2] pgindent: Fix spacing after != when member name matches typedef.
Date: Tue, 5 May 2026 16:03:13 -0500
When a struct member name matches a registered typedef, pgindent
removes the space after "!=" (and some other operators):
entry->dsh.dsa_handle !=DSA_HANDLE_INVALID
In lexi.c, when an identifier matches the typedef list, the code
sets last_u_d = true before jumping to found_typename. This flag
tells the lexer that the next operator should be treated as unary,
which is correct for type names (e.g., "Datum *x" needs * to be
unary, not multiplication).
However, found_typename has a guard that recognizes when a typedef
name appears after "." or "->": in that case, the name is a struct
member, not a type, so it's returned as a plain identifier. The
problem is that last_u_d has already been set to true and is never
corrected. This causes the next operator (e.g., "!=") to be
misclassified as unary, which suppresses the space after it.
To fix, only set last_u_d when the token won't be caught by the
guard, i.e., when it will actually be treated as a type name.
This also explains why "==" was not affected: the "==" case always
returns binary_op regardless of last_u_d, while "!=" checks
last_u_d to decide.
---
src/tools/pg_bsd_indent/lexi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/tools/pg_bsd_indent/lexi.c b/src/tools/pg_bsd_indent/lexi.c
index 943bf7ce6b0..e846188d6f4 100644
--- a/src/tools/pg_bsd_indent/lexi.c
+++ b/src/tools/pg_bsd_indent/lexi.c
@@ -363,7 +363,8 @@ lexi(struct parser_state *state)
bsearch(s_token, typenames, typename_top + 1,
sizeof(typenames[0]), strcmp_type))) {
state->keyword = 4; /* a type name */
- state->last_u_d = true;
+ if (state->last_token != period && state->last_token != unary_op)
+ state->last_u_d = true;
goto found_typename;
}
} else { /* we have a keyword */
--
2.50.1 (Apple Git-155)
--k2Vi/uo5iFea1Gni
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename=v1-0002-run-pgindent.patch
view thread (580+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v1 1/2] pgindent: Fix spacing after != when member name matches typedef.
In-Reply-To: <no-message-id-106014@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox