Thread

  1. [PATCH v2 1/1] pgindent: Fix spacing after != when member name matches typedef.

    Nathan Bossart <nathan@postgresql.org> — 2026-05-06T16:02:22Z

    When a struct member name matches a registered typedef, pgindent
    removes the space after "!=" (and some other operators), like so:
    
        entry->dsh.dsa_handle !=DSA_HANDLE_INVALID
    
    The problem is that the related code in lexi.c sets last_u_d to
    true before jumping to found_typename, causing the next operator to
    be classified as unary and suppressing the following space.  This
    is correct for type names, but not for struct members.  For
    example, "Datum *x" needs "*" to be unary to suppress the space
    before "x".  To fix, only set last_u_d before jumping to
    found_typename if the typedef name doesn't appear after "." or
    "->".
    
    Note that this does not bump INDENT_VERSION.  We'll do that just
    once after some other changes to pg_bsd_indent are committed.
    
    Reviewed-by: Chao Li <li.evan.chao@gmail.com>
    Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
    Discussion: https://postgr.es/m/aS9hkwnkWf3dZIA_%40nathan
    ---
     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)
    
    
    --1t/m2eK+hqhKaVEb--