Hi Tom, Thanks for your feedback.
> In this case the problem is that the cleanup pattern only accounts for > one trailing space. But a variant of this, which I think affects many > of the steps in the patch, is that there could be tab(s) there. You > should fix the patterns to allow any number of spaces/tabs at the > spots where they currently expect just one space. This might result > in finding cleanups they miss now. Fair point. Fixed. > Another amusing diff I noticed: > > [...] > > Clearly, this is somebody's off-by-one-key typo, and the correct > fix is s/&/*/. I suspect that fixing that manually is the most > expedient answer, rather than trying to make pg_bsd_indent smart > enough to DTRT. Agree. > One other nitpick is that the patch itself needs to be run through > pgperltidy (which has different opinions than your editor about > tabs vs spaces, apparently). Fixed in v7. -- Best regards, Aleksander Alekseev
From 7c3abf671bafaf3a5425994e9cfedf5dafaf9895 Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev <[email protected]> Date: Fri, 20 Jun 2025 16:31:36 +0300 Subject: [PATCH v7] pgindent: improve formatting of multiline comments Format multiline comments like this: /* line 1 * line 2 */ ... into: /* * line 1 * line 2 */ This is more consistent with what we currently have in the tree. Author: Aleksander Alekseev <[email protected]> Reported-by: Michael Paquier <[email protected]> Reviewed-by: Arseniy Mukhin <[email protected]> Reviewed-by: Nathan Bossart <[email protected]> Reviewed-by: Tom Lane <[email protected]> Discussion: https://postgr.es/m/CAJ7c6TPQ0kkHQG-AqeAJ3PV_YtmDzcc7s%2B_V4%3Dt%2BxgSnZm1cFw%40mail.gmail.com --- src/tools/pgindent/pgindent | 40 +++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index b2ec5e2914b..f4be74fc3a4 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -285,6 +285,9 @@ sub post_indent # Fix run-together comments to have a tab between them $source =~ s!\*/(/\*.*\*/)$!*/\t$1!gm; + # Postprocess multiline comments except for /**... and /*-... ones + $source =~ s!^(/\*[^\*\-].*?\*/)!postprocess_multiline_comment($1)!mgse; + ## Functions # Use a single space before '*' in function return types @@ -293,6 +296,43 @@ sub post_indent return $source; } +sub postprocess_multiline_comment +{ + my $source = shift; + my @lines = split "\n", $source; + + # Only format comments that match the expected format, + # or at least that could have been the author's intent. + if ( ($lines[0] ne "/*" && $lines[-1] ne " */") + or ($lines[1] !~ m!^\s+\*!)) + { + return $source; + } + + # Check each line except for the first and the last one + for my $i (1 .. scalar @lines - 2) + { + $lines[$i] = " *" . $lines[$i] if $lines[$i] !~ /^\s+\*/; + } + + # Keep /* === and /* --- lines as is + if ($lines[0] !~ m!^/\*\s+[=-]+!) + { + $lines[0] =~ s!/\*(.+)!/\*\n *$1!; + } + + # Keep === */ and --- */ lines as is + if ($lines[-1] !~ m![=-]+\s+\*/$!) + { + # also remove trailing whitespaces + $lines[-1] =~ s!(.+?)\s+\*/!$1\n \*/!; + } + + $source = join "\n", @lines; + + return $source; +} + sub run_indent { my $source = shift; -- 2.43.0
