Further improve pgindent's list of file exclusions.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Sep 2020 18:16:18 +0000 (14:16 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 17 Sep 2020 18:16:18 +0000 (14:16 -0400)
I despair of people keeping the README file's notes in sync with
the actual exclusion list, so move the notes into the exclusion file.
Adjust the pgindent script to explicitly ignore comments in the file,
just in case (though it's hard to believe any would match filenames).

Extend the list so that it doesn't process any files we'd not wish it to
even in a fully-built-out development directory.  (There are still a
couple of derived files that it wants to reformat, but fixing the
generator scripts for those seems like fit material for a separate patch.)

Discussion: https://postgr.es/m/79ed5348-be7a-b647-dd40-742207186a22@2ndquadrant.com

src/tools/pgindent/README
src/tools/pgindent/exclude_file_patterns
src/tools/pgindent/pgindent

index 9b16b0ed504a5da6121a8c09ce30f9324592bbab..56f07c7ee4cdd051457d8a8cb8a182970035e8a6 100644 (file)
@@ -138,33 +138,11 @@ Which files are processed
 The pgindent run processes (nearly) all PostgreSQL *.c and *.h files,
 but we currently exclude *.y and *.l files, as well as *.c and *.h files
 derived from *.y and *.l files.  Additional exceptions are listed
-in exclude_file_patterns:
-
-src/include/storage/s_lock.h and src/include/port/atomics/ are excluded
-because they contain assembly code that pgindent tends to mess up.
-
-src/backend/utils/fmgrtab.c is excluded because it confuses pgindent
-and it's a derived file anyway.
-
-src/interfaces/ecpg/test/expected/ is excluded to avoid breaking the ecpg
-regression tests, since what ecpg generates is not necessarily formatted
-as pgindent would do it.  (Note that we do not exclude ecpg's header files
-from the run; some of them get copied verbatim into ecpg's output, meaning
-that the expected files may need to be updated to match.)
-
-src/include/snowball/libstemmer/ and src/backend/snowball/libstemmer/
-are excluded because those files are imported from an external project,
-not maintained locally, and are machine-generated anyway.  Likewise for
-plperl/ppport.h.
-
-src/include/jit/llvmjit.h is excluded because it contains C++ constructs
-that confuse pgindent.
-
-src/backend/utils/probes.h and its alias src/include/utils/probes.h
-are excluded because that file is machine-generated by code not under
-our control, and some versions of dtrace build files that confuse
-pgindent.
+in exclude_file_patterns; see the notes therein for rationale.
 
+Note that we do not exclude ecpg's header files from the run.  Some of them
+get copied verbatim into ecpg's output, meaning that ecpg's expected files
+may need to be updated to match.
 
 The perltidy run processes all *.pl and *.pm files, plus a few
 executable Perl scripts that are not named that way.  See the "find"
index a8f1a92f4b3bd6305860b971e93a89c026f2ca19..b2e9d8f654780c2b25e8c11e44a80f292dea75c1 100644 (file)
@@ -1,11 +1,37 @@
-#list of file patterns to exclude from pgindent runs, see notes in README
-/storage/s_lock\.h$
-/port/atomics/
-/utils/fmgrtab\.c$
-/ecpg/test/expected/
+# List of filename patterns to exclude from pgindent runs
+#
+# These contain assembly code that pgindent tends to mess up.
+src/include/storage/s_lock\.h$
+src/include/port/atomics/
+#
+# This contains C++ constructs that confuse pgindent.
+src/include/jit/llvmjit\.h$
+#
+# This confuses pgindent, and it's a derived file anyway.
+src/backend/utils/fmgrtab\.c$
+#
+# kwlist_d files are made by gen_keywordlist.pl.  While we could insist that
+# they match pgindent style, they'd look worse not better, so exclude them.
+kwlist_d\.h$
+#
+# Exclude ecpg test files to avoid breaking the ecpg regression tests
+# (but include files at the top level of the ecpg/test/ directory).
+src/interfaces/ecpg/test/.*/
+#
+# src/include/snowball/libstemmer/ and src/backend/snowball/libstemmer/
+# are excluded because those files are imported from an external project,
+# rather than maintained locally, and they are machine-generated anyway.
 /snowball/libstemmer/
-/pl/plperl/ppport\.h$
-/jit/llvmjit\.h$
-/utils/probes\.h$
+#
+# These files are machine-generated by code not under our control,
+# so we shouldn't expect them to conform to our style.
+# (Some versions of dtrace build probes.h files that confuse pgindent, too.)
+src/backend/utils/probes\.h$
+src/include/pg_config\.h$
+src/pl/plperl/ppport\.h$
+src/pl/plperl/SPI\.c$
+src/pl/plperl/Util\.c$
+#
+# Exclude any temporary installations that may be in the tree.
 /tmp_check/
 /tmp_install/
index 457e3288248446428160b3a2a47be8f7fc739dc9..4124d27dea669c1f5b2c8d66ef52e2d57abb2799 100755 (executable)
@@ -159,6 +159,7 @@ sub process_exclude
        while (my $line = <$eh>)
        {
            chomp $line;
+           next if $line =~ m/^#/;
            my $rgx = qr!$line!;
            @files = grep { $_ !~ /$rgx/ } @files if $rgx;
        }