From 8de4a88d50845ce4d92f8596198a5a6b187f8847 Mon Sep 17 00:00:00 2001
From: Julian <juliandomke@outlook.de>
Date: Mon, 7 Jul 2025 09:03:02 +0200
Subject: [PATCH] docs: rule suppressions

---
 docs/rule_suppressions.md | 94 +++++++++++++++++++++++++++++++++++++++
 mkdocs.yml                | 25 ++++++-----
 2 files changed, 107 insertions(+), 12 deletions(-)
 create mode 100644 docs/rule_suppressions.md

diff --git a/docs/rule_suppressions.md b/docs/rule_suppressions.md
new file mode 100644
index 00000000..af5890e7
--- /dev/null
+++ b/docs/rule_suppressions.md
@@ -0,0 +1,94 @@
+# Rule Suppressions
+
+You can suppress specific diagnostics or rules in your code using suppression comments. This is useful when you want to ignore a particular rule for an entire file, a line or a block of code.
+
+## How to Suppress a Rule
+
+To suppress a rule, add a comment above the line causing the diagnostic with the following format:
+
+```sql
+-- pgt-ignore lint/safety/banDropTable
+drop table users;
+```
+
+You can suppress single rules, groups of rules, or entire categories. The format of the rule to suppress is:
+
+`category(/group(/specific-rule))`
+
+Where group and specific rule are optional.
+
+So, to suppress the `lint/safety/banDropTable` diagnostic, all of these would work:
+
+```sql
+-- pgt-ignore lint
+-- pgt-ignore lint/safety
+-- pgt-ignore lint/safety/banDropTable
+```
+
+You can also add an explanation to the suppression by adding a `:` and the explanation text:
+
+```sql
+-- pgt-ignore lint/safety/banDropTable: My startup never had any users.
+drop table users;
+```
+
+### Suppressing Rules for Block of Code
+
+You can suppress rules for blocks of code.
+
+```sql
+create table users (
+  -- ...
+);
+
+-- pgt-ignore-start typecheck: The `users` table will be created with this migration.
+alter table users drop constraint users_pkey;
+
+alter table users add primary key (user_id);
+-- pgt-ignore-end typecheck
+```
+
+Every `pgt-ignore-start` needs a `pgt-ignore-end` suppression comment, and the suppressed rules must match exactly.
+
+This _won't_ work, because the start tag suppresses a different diagnostic:
+
+```sql
+-- pgt-ignore-start lint/safety/banDropColumn
+-- pgt-ignore-end lint/safety
+```
+
+Nesting is allowed, so this works fine:
+
+```sql
+-- pgt-ignore-start typecheck: outer
+-- pgt-ignore-start lint/safety: inner
+-- pgt-ignore-end lint/safety: inner
+-- pgt-ignore-end typecheck: outer
+```
+
+### Suppressing Rules for Entire Files
+
+Instead of repeating the same suppression on multiple lines, you can suppress for an entire file.
+
+```sql
+-- pgt-ignore-all lint/safety/banDropTable
+
+drop table tasks;
+drop table projects;
+drop table users;
+```
+
+## Suppressing Multiple Rules
+
+You can suppress multiple rules by adding multiple suppression comments above a statement:
+
+```sql
+-- pgt-ignore lint/safety/banDropColumn
+-- pgt-ignore typecheck
+alter table tasks drop column created_at;
+```
+
+## Notes
+
+- Trying to suppress diagnostics that have already been disabled in your [configuration file](/#configuration) will show a warning.
+- Trying to suppress diagnostics that don't haven't been raised will also show a warning.
diff --git a/mkdocs.yml b/mkdocs.yml
index b4520ce4..572642c6 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -6,22 +6,23 @@ repo_name: supabase-community/postgres-language-server
 repo_url: https://github.com/supabase-community/postgres-language-server
 
 theme:
-    name: 'readthedocs'
-    features:
-      - navigation.expand
-    palette:
-        primary: grey
-        accent: red
+  name: "readthedocs"
+  features:
+    - navigation.expand
+  palette:
+    primary: grey
+    accent: red
 nav:
   - Introduction: index.md
   - Guides:
-    - Linting Migrations: checking_migrations.md
-    - Troubleshooting: troubleshooting.md
+      - Linting Migrations: checking_migrations.md
+      - Troubleshooting: troubleshooting.md
   - Reference:
-    - Rules: rules.md
-    - Rule Sources: rule_sources.md
-    - CLI: cli_reference.md
-    - Environment Variables: env_variables.md
+      - Rules: rules.md
+      - Rule Sources: rule_sources.md
+      - Rule Suppressions: rule_suppressions.md
+      - CLI: cli_reference.md
+      - Environment Variables: env_variables.md
 
 plugins:
   - gh-admonitions
