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.
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.
prettier-plugin-sql
is an evergreen module. 🌲 This module requires an LTS Node version (v14.18.0+).
Using npm:
# npm
npm i -D prettier prettier-plugin-sql
# yarn
yarn add -D prettier prettier-plugin-sql
Once installed, Prettier plugins must be added to .prettierrc
:
{
"plugins": ["prettier-plugin-sql"]
}
Then:
# npx
npx prettier --write db.sql
# yarn
yarn prettier --write db.sql
Format SQL-in-JS tagged template literals by installing prettier-plugin-embed
and configuring as follows:
prettier.config.mjs
/** @type {import('prettier').Config} */
const prettierConfig = {
plugins: ['prettier-plugin-embed', 'prettier-plugin-sql'],
}
/** @type {import('prettier-plugin-embed').PrettierPluginEmbedOptions} */
const prettierPluginEmbedConfig = {
embeddedSqlTags: ['sql'],
}
/** @type {import('prettier-plugin-sql').SqlBaseOptions} */
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}
`
interface SqlOptions {
formatter: 'sql-formatter' | 'node-sql-parser' // default `sql-formatter`
// sql-formatter
language:
| 'sql'
| 'bigquery'
| 'db2'
| 'db2i' // (experimental)
| 'hive'
| 'mariadb'
| 'mysql'
| 'n1ql'
| 'postgresql'
| 'plsql'
| 'redshift'
| 'singlestoredb'
| 'snowflake'
| 'spark'
| 'sqlite'
| 'transactsql'
| 'tsql'
| 'trino'
// default `sql`
dialect: string // `JSOX` **stringified**, please refer https://github.com/sql-formatter-org/sql-formatter/blob/master/docs/dialect.md for more details
keywordCase: 'preserve' | 'upper' | 'lower' // default `preserve`
dataTypeCase: 'preserve' | 'upper' | 'lower' // default `preserve`
functionCase: 'preserve' | 'upper' | 'lower' // default `preserve`
identifierCase: 'preserve' | 'upper' | 'lower' // default `preserve`, experimental
indentStyle: 'standard' | 'tabularLeft' | 'tabularRight' // default `standard`
logicalOperatorNewline: 'before' | 'after' // default `before`
expressionWidth: number // default `50`
linesBetweenQueries: number // default `1`
denseOperators: boolean // default `false`
newlineBeforeSemicolon: boolean // default `false`
params: string // `JSOX` **stringified**, please refer https://github.com/sql-formatter-org/sql-formatter/blob/master/docs/params.md for more details
paramTypes: string // `JSOX` **stringified**, please refer https://github.com/sql-formatter-org/sql-formatter/blob/master/docs/paramTypes.md for more details
// node-sql-parser
type: 'table' | 'column' // default `table`
database:
| 'bigquery'
| 'db2'
| 'hive'
| 'mariadb'
| 'mysql'
| 'postgresql'
| 'transactsql'
| 'flinksql'
| 'snowflake' // (alpha)
// default `mysql`
}
More details on sql-formatter and node-sql-parser.
1stG | RxTS | UnTS |
---|---|---|
1stG | RxTS | UnTS |
---|---|---|
Detailed changes for each release are documented in CHANGELOG.md.