From 3558190b163378d810b5af405992ebd475c1f8a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dagfinn=20Ilmari=20Manns=C3=A5ker?= <ilmari@ilmari.org>
Date: Tue, 2 Jul 2024 16:26:10 +0100
Subject: [PATCH 3/3] Prohibit unused regular expression captures

Disable the policy in Catalog::ParseHeader, since perlcritic doesn't
(yet) realise that %+ constitutes using all named captures.
---
 src/backend/catalog/Catalog.pm   | 5 +++++
 src/tools/perlcheck/perlcriticrc | 3 +++
 2 files changed, 8 insertions(+)

diff --git a/src/backend/catalog/Catalog.pm b/src/backend/catalog/Catalog.pm
index 59ebe5f434..8f62ad6153 100644
--- a/src/backend/catalog/Catalog.pm
+++ b/src/backend/catalog/Catalog.pm
@@ -91,6 +91,10 @@ sub ParseHeader
 		# Push the data into the appropriate data structure.
 		# Caution: when adding new recognized OID-defining macros,
 		# also update src/include/catalog/renumber_oids.pl.
+		#
+		# perlcritic doesn't know that %+ uses all named captures
+		# (https://github.com/Perl-Critic/Perl-Critic/pull/1065)
+		## no critic (ProhibitUnusedCapture)
 		if (/^DECLARE_TOAST\(\s*
 			 (?<parent_table>\w+),\s*
 			 (?<toast_oid>\d+),\s*
@@ -194,6 +198,7 @@ sub ParseHeader
 			$catalog{schema_macro} = /BKI_SCHEMA_MACRO/ ? 1 : 0;
 			$declaring_attributes = 1;
 		}
+		## use critic
 		elsif ($is_client_code)
 		{
 			if (/^#endif/)
diff --git a/src/tools/perlcheck/perlcriticrc b/src/tools/perlcheck/perlcriticrc
index 6053dfcc2a..ba238b2baa 100644
--- a/src/tools/perlcheck/perlcriticrc
+++ b/src/tools/perlcheck/perlcriticrc
@@ -18,6 +18,9 @@ verbose = %f: %m at line %l, column %c.  %e.  ([%p] Severity: %s)\n
 [Variables::ProhibitUnusedVariables]
 severity = 5
 
+[RegularExpressions::ProhibitUnusedCapture]
+severity = 5
+
 # allow octal constants with leading zeros
 [-ValuesAndExpressions::ProhibitLeadingZeros]
 
-- 
2.39.2

