prettier-plugin-sql
An opinionated sql formatter plugin for Prettier
Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing, taking various rules into account.
This plugin adds support for a lot of sql files through sql-formatter or node-sql-parser.
Notice
This plugin is still under development, its printer just wraps sql-formatter or node-sql-parser's default printer.
Of course it should just work, but may not match prettier's format sometimes.
Requirements
prettier-plugin-sql
is an evergreen module. 🌲 This module requires an LTS Node version (v12.0.0+).
Install
Using npm:
npm i -D prettier prettier-plugin-sql
yarn add -D prettier prettier-plugin-sql
Usage
Once installed, Prettier plugins must be added to .prettierrc
:
{
"plugins": ["prettier-plugin-sql"]
}
Then:
npx prettier --write db.sql
yarn prettier --write db.sql
SQL-in-JS with prettier-plugin-embed
Format SQL-in-JS tagged template literals by installing prettier-plugin-embed
and configuring as follows:
prettier.config.mjs
const prettierConfig = {
plugins: ['prettier-plugin-embed', 'prettier-plugin-sql'],
}
const prettierPluginEmbedConfig = {
embeddedSqlIdentifiers: ['sql'],
}
const prettierPluginSqlConfig = {
language: 'postgresql',
keywordCase: 'upper',
}
const config = {
...prettierConfig,
...prettierPluginEmbedConfig,
...prettierPluginSqlConfig,
}
export default config
Before formatting:
const animals = await sql`
sELect first_name, species froM
animals
WhERE
id = ${id}
`
After formatting:
const animals = await sql`
SELECT
first_name,
species
FROM
animals
WHERE
id = ${id}
`
Parser Options
interface SqlOptions {
formatter: 'sql-formatter' | 'node-sql-parser'
language:
| 'sql'
| 'bigquery'
| 'db2'
| 'db2i'
| 'hive'
| 'mariadb'
| 'mysql'
| 'n1ql'
| 'postgresql'
| 'plsql'
| 'redshift'
| 'singlestoredb'
| 'snowflake'
| 'spark'
| 'sqlite'
| 'transactsql'
| 'tsql'
| 'trino'
dialect: string
keywordCase: 'preserve' | 'upper' | 'lower'
dataTypeCase: 'preserve' | 'upper' | 'lower'
functionCase: 'preserve' | 'upper' | 'lower'
identifierCase: 'preserve' | 'upper' | 'lower'
indentStyle: 'standard' | 'tabularLeft' | 'tabularRight'
logicalOperatorNewline: 'before' | 'after'
expressionWidth: number
linesBetweenQueries: number
denseOperators: boolean
newlineBeforeSemicolon: boolean
params: string
paramTypes: string
type: 'table' | 'column'
database:
| 'bigquery'
| 'db2'
| 'hive'
| 'mariadb'
| 'mysql'
| 'postgresql'
| 'transactsql'
| 'flinksql'
| 'snowflake'
}
More details on sql-formatter and node-sql-parser.
Backers
Changelog
Detailed changes for each release are documented in CHANGELOG.md.
License
MIT © JounQin@1stG.me