Subject: Add editorconfig support for Postgres spec files

From: "Tristan Partin" <[email-masked]>
Date: Thu, 16 Apr 2026 21:49:57 +0000

I was reading through some spec files today, and my editor was resolving 
the tab width as 8. I looked at some of the spec files, and we seem to 
have standardized on a tab width of 4 with tabs expanded into spaces. 
I decided to encode this in the .editorconfig file for convenience.

PS: I am working on a tree-sitter grammar for these files. I'll probably 
try to set up a TextMate grammar was well for those who use editors that 
support that. I'll share that later.

-- 
Tristan Partin
PostgreSQL Contributors Team
AWS (https://aws.amazon.com)
diff --git i/.editorconfig w/.editorconfig
index 0ee9bd28ac..07e1bd0af6 100644
--- i/.editorconfig
+++ w/.editorconfig
@@ -53,6 +53,13 @@ indent_style = space
 tab_width = unset
 indent_size = 1
 
+[*.spec]
+trim_trailing_whitespace = true
+insert_final_newline = true
+indent_style = space
+tab_width = unset
+indent_size = 4
+
 [*.xml]
 trim_trailing_whitespace = true
 insert_final_newline = true

---

From: Heikki Linnakangas <[email-masked]>
Date: Fri, 17 Apr 2026 11:18:22 +0300

> have standardized on a tab width of 4 with tabs expanded into spaces.

There's a mix of styles in different files. To pick a few random examples:

src/test/isolation/specs/nowait.spec: indented with 2 spaces. But there 
are some tabs too.

src/test/modules/injection_points/specs/repack_toast.spec: Tabs

src/test/modules/brin/specs/summarization-and-inprogress-insertion.spec: 
Mix of tabs and spaces, width 4.

Yeah, it would be nice to standardize on something...

- Heikki

---

From: Jelte Fennema-Nio <[email-masked]>
Date: Fri, 17 Apr 2026 22:10:12 +0200

> Yeah, it would be nice to standardize on something...

Agreed.

Whatever that standardized indenting style then is, it should then be
encoded in .gitattributes. Our editorconfig file is generated based on
that using src/tools/generate_editorconfig.py.

I think in any case that script should be update to add some "DO NOT
MODIFY MANUALLY! GENERATED USING src/tools/generate_editorconfig.py "
header to the resulting editorconfig file. Because I agree that's not
clear at the moment.

---

From: Michael Paquier <[email-masked]>
Date: Tue, 21 Apr 2026 14:43:06 +0900

On Fri, Apr 17, 2026 at 11:18:22AM +0300, Heikki Linnakangas wrote:
> src/test/isolation/specs/nowait.spec: indented with 2 spaces. But there are
> some tabs too.
> 
> src/test/modules/brin/specs/summarization-and-inprogress-insertion.spec: Mix
> of tabs and spaces, width 4.
> 

In terms of system_views.sql, the SQL input files in the regression
test suites and the sample files, we are using whitespaces, not tabs.
I cannot say much about the width part and what would be a good
number, but at least it seems to me that the tabs should go.  We don't
really have a strict width rule for the SQL files in the regression
tests, and I don't think we need one.  It would be nice to keep the
same flexibility for the isolation spec files.
--
Michael

---

From: Andreas Karlsson <[email-masked]>
Date: Thu, 30 Apr 2026 21:24:29 +0200

> header to the resulting editorconfig file. Because I agree that's not

You mean like this? I think the comment should point them towards the 
script which generated it.

--
Andreas Karlsson
Percona

From 72e9b5aa323756c1d1b30b597a9e5a57da227928 Mon Sep 17 00:00:00 2001
From: Andreas Karlsson <[email-masked]>
Date: Thu, 30 Apr 2026 21:18:27 +0200
Subject: [PATCH] Add comment clarifying .editorconfig is generated

To make sure people do not try to manually edit .editorconfig let's add
a comment on top of the file pointing them towards where they can learn
how to generate it.
---
 .editorconfig                      | 2 ++
 src/tools/generate_editorconfig.py | 4 +++-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/.editorconfig b/.editorconfig
index 0ee9bd28ac4..24d3fdeae81 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -1,3 +1,5 @@
+# Generated by src/tools/generate_editorconfig.py
+
 root = true
 
 [*]
diff --git a/src/tools/generate_editorconfig.py b/src/tools/generate_editorconfig.py
index 0ce54f7292a..7ea1dcf5442 100755
--- a/src/tools/generate_editorconfig.py
+++ b/src/tools/generate_editorconfig.py
@@ -25,7 +25,9 @@ def main():
     with open(".gitattributes", "r") as f:
         lines = f.read().splitlines()
 
-    new_contents = """root = true
+    new_contents = """# Generated by src/tools/generate_editorconfig.py
+
+root = true
 
 [*]
 indent_size = tab
-- 
2.43.0