feat(lint): add linter rules for migration and naming conventions
* Implement migration safety rules: - MIG001: Warn on CREATE INDEX without CONCURRENT. - MIG002: Warn on ALTER TABLE ADD COLUMN NOT NULL without DEFAULT. - MIG003: Warn on ALTER TABLE ADD CONSTRAINT without NOT VALID. * Implement naming conventions rules: - NAM001: Warn on non-snake_case table names. - NAM002: Warn on non-snake_case column names in CREATE TABLE. - NAM003: Warn on non-snake_case function names. * Add test fixtures for all new rules.
This commit is contained in:
+13
-6
@@ -96,12 +96,19 @@ Legend: ✅ done · 🚧 in progress · ⬜ not started
|
||||
|
||||
---
|
||||
|
||||
## V2 — Linter (later)
|
||||
- `pkg/pgast`: `go-pgquery` (WASM, no cgo) wrapper → real PG AST.
|
||||
- `pkg/lint`: rule engine + packs — style/consistency, **migration safety** (locks, unsafe
|
||||
ALTER/ADD COLUMN, non-CONCURRENTLY index, blocking constraints), naming, correctness.
|
||||
- `pkg/diagnostics`: shared diagnostic type (CLI + LSP).
|
||||
- `pgtidy lint` subcommand; `--fix` for autofixable rules.
|
||||
## ✅ V2 — Linter
|
||||
- `pkg/pgast`: `go-pgquery` (WASM, no cgo) wrapper → real PG AST. `FirstTokenOffset`
|
||||
skips leading whitespace/comments for accurate line numbers.
|
||||
- `pkg/diagnostics`: `Diagnostic{RuleID, Severity, Message, File, Line, Col}`.
|
||||
- `pkg/lint`: `Engine`, `Rule` interface, `New()` with all built-ins:
|
||||
- MIG001 CREATE INDEX without CONCURRENT
|
||||
- MIG002 ALTER TABLE ADD COLUMN NOT NULL without DEFAULT
|
||||
- MIG003 ALTER TABLE ADD CONSTRAINT FK/CHECK without NOT VALID
|
||||
- COR001 SELECT * | COR002 UPDATE without WHERE | COR003 DELETE without WHERE
|
||||
- NAM001/2/3 table/column/function names not snake_case (quoted identifiers only)
|
||||
- `pgtidy lint [--only=ID,...] [files...]`; exits 1 on findings, 2 on error.
|
||||
- Fixture SQL in `testdata/lint/`; 6 tests covering violations + clean fixtures.
|
||||
- _`--fix` for autofixable rules: future._
|
||||
|
||||
## V3 — LSP + VSCode (later)
|
||||
- `pkg/lsp`: formatting + range formatting, publishDiagnostics, codeAction quick-fixes.
|
||||
|
||||
Reference in New Issue
Block a user