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:

-- 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:

-- 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:

-- 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.

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:

-- pgt-ignore-start lint/safety/banDropColumn
-- pgt-ignore-end lint/safety

Nesting is allowed, so this works fine:

-- 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.

-- 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:

-- 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 will show a warning.
  • Trying to suppress diagnostics that don't haven't been raised will also show a warning.