Sobre el proyecto

Scythe es una herramienta de línea de comandos que trata el SQL como un lenguaje de primera clase. Analiza estáticamente archivos `.sql` anotados y genera código de acceso a bases de datos tipado y seguro (tipos de fila, funciones de consulta y mapeos de tipos) para diez lenguajes de programación (Rust, Python, TypeScript, Go, Java, Kotlin, C#, Elixir, Ruby, PHP, además de JavaScript puro) en diez motores de base de datos (PostgreSQL, MySQL, MariaDB, SQLite, DuckDB, CockroachDB, MSSQL, Oracle, Redshift, Snowflake). La generación no requiere conexión a la base de datos ni red, lo que la hace adecuada para hooks pre-commit. Las características clave incluyen: - **Inferencia de tipos**: La anulabilidad se propaga a través de JOINs, CTEs, funciones de ventana, COALESCE, CASE WHEN y agregaciones. Los enums, composiciones, arrays y JSON se asignan a tipos nativos del lenguaje. - **Linting y auditoría**: 24 reglas de linting (por ejemplo, UPDATE sin WHERE, SELECT *) y 35 reglas de auditoría para seguridad y migración segura (por ejemplo, GRANT to PUBLIC, contraseñas literales, DDL destructivo). Salida en formatos humanos, SARIF o JSON. - **Verificación de procedencia**: `scythe check` verifica que el código generado comprometido coincida con el SQL del que proviene, con verificaciones opcionales de desviación de esquema en vivo contra PostgreSQL. - **Inspección de bases de datos**: `scythe inspect` realiza comprobaciones de salud en vivo (por ejemplo, claves foráneas sin índices cubrientes, RLS deshabilitada) para PostgreSQL y MySQL/MariaDB. - **Salida flexible**: Tipos de fila como Pydantic, msgspec, dataclasses, esquemas Zod o interfaces simples; sobrescrituras de tipos para extensiones como ltree, citext o PostGIS. - **Anotaciones**: Además de `:one`/`:many`, soporta `@optional` para filtros condicionales, `:batch` para operaciones masivas y `@returns :grouped` para resultados anidados. - **Migración desde sqlc**: `scythe migrate` convierte configuraciones existentes de `sqlc.yaml`. Las opciones de instalación incluyen cargo, Homebrew, npm, pip y una acción de GitHub. Se proporcionan hooks pre-commit para formatear, hacer linting, auditar, inspeccionar, generar y verificar. La herramienta tiene licencia MIT y está documentada en goldziher.github.io/scythe.