Fix formatting of macros that take types.
authorTom Lane <[email protected]>
Sat, 16 May 2020 15:36:23 +0000 (11:36 -0400)
committerTom Lane <[email protected]>
Sat, 16 May 2020 15:36:23 +0000 (11:36 -0400)
Previously, we would assume that a macro like IsA() in the following
example was a cast just because it mentions a known type between parens,
and that messed up the formatting of any binary operator that followed:

       if (IsA(outer_path, UniquePath) ||path->skip_mark_restore)

This change errs on the side of assuming that function-like macros are
similar to sizeof() and offsetof(), so that operators are formatted
correctly:

       if (IsA(outer_path, UniquePath) || path->skip_mark_restore)

Thomas Munro

Discussion: https://postgr.es/m/20200114221814[email protected]

indent.c

index 5da3401482b2a5c5c7311696d551d8cb1f0feda1..62d4d01e51dc32f2f139e75a54e2c0389e4644b1 100644 (file)
--- a/indent.c
+++ b/indent.c
@@ -570,8 +570,13 @@ check_type:
                ps.in_or_st = false;    /* turn off flag for structure decl or
                                         * initialization */
            }
-           /* parenthesized type following sizeof or offsetof is not a cast */
-           if (ps.keyword == 1 || ps.keyword == 2)
+           /*
+            * parenthesized type following sizeof or offsetof is not a cast,
+            * and we assume the same for any other non-keyword identifier,
+            * to support macros that take types
+            */
+           if (ps.last_token == ident &&
+               (ps.keyword == 0 || ps.keyword == 1 || ps.keyword == 2))
                ps.not_cast_mask |= 1 << ps.p_l_follow;
            break;