sql-parser-cst と実際の Prettier 書式設定アルゴリズムを使用する SQL 用の Prettier プラグイン。
ライブで試してみてください!
Prettier for JavaScript と同様に、このプラグインは SQL 式を長さに応じて異なる形式でフォーマットします。短い SQL クエリは 1 行でフォーマットされます。
SELECT a, b, c FROM tbl WHERE x > 10 ;
長いクエリでは、各句が別の行に出力されます。
SELECT id, client . name , client . priority
FROM client
WHERE client . id IN ( 12 , 18 , 121 );
さらに長いものでは、各節の内容がインデントされます。
SELECT
client . id ,
client . name AS client_name,
organization . name AS org_name,
count ( orders . id ) AS nr_of_orders
FROM
client
LEFT JOIN organization ON client . organization_id = organization . id
LEFT JOIN orders ON orders . client_id = client . id
WHERE
client . status = ' active '
AND client . id IN ( 28 , 214 , 457 )
AND orders . status IN ( ' active ' , ' pending ' , ' processing ' )
GROUP BY client . id
ORDER BY client . name
LIMIT 100 ;
現在、このプラグインはほとんどの構文要素を保持し、主に空白のレイアウトに重点を置いています。
使用される SQL 書式設定スタイルの概要については、「STYLE_GUIDE」を参照してください。
他の Prettier プラグインと同様にインストールします。
npm install --save-dev prettier prettier-plugin-sql-cst
# or
pnpm add --save-dev prettier prettier-plugin-sql-cst
# or
yarn add --dev prettier prettier-plugin-sql-cst
次に、Prettier コマンド ライン ツールまたは選択したエディターの Prettier 拡張機能を介して SQL ファイルでそれを使用します。
デフォルトでは、プラグインはファイル拡張子に基づいて SQL 言語を決定します。
.sql
または.sqlite
- SQLite.bigquery
- BigQueryこの動作は、 .prettierrc.json
ファイル内のより適切な構成でオーバーライドできます。
{
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
または、 package.json
内に保存することもできます。
{
"prettier" : {
"plugins" : [ " prettier-plugin-sql-cst " ],
"overrides" : [
{
"files" : [ " *.sql " ],
"options" : { "parser" : " bigquery " }
}
]
}
}
プラグインは次のパーサーを提供します。
sqlite
bigquery
postgresql
(実験的! クラッシュが予想される)mysql
(実験的! クラッシュが予想されます)mariadb
(実験的! クラッシュが予想されます) 標準の Prettier オプション printWidth、tabWidth、useTabs が適用されます。 SQL 固有のオプションもいくつかあります。
APIオプション | デフォルト | 説明 |
---|---|---|
sqlKeywordCase | upper | SQL キーワードをupper またはlower に変換するか、既存のキーワードpreserve 。現時点では、 preserve sqlCanonicalSyntax: true と多少互換性がないことに注意してください (たとえば、追加されたAS キーワードは常に大文字になります)。 |
sqlParamTypes | [] | バインドされたパラメータの型の配列: ? 、 ?nr 、 $nr 、 :name 、 @name 、 $name 。 |
sqlCanonicalSyntax | true | 有効にすると、エイリアスでAS の使用を強制したり、 <> 比較を!= に置き換えたりするなど、キーワードと演算子の独自の変更が実行されます。詳細については、STYLE_GUIDE を参照してください。 (0.11.0以降) |
sqlAcceptUnsupportedGrammar | false | 通常、プラグインがサポートしていない SQL 構文に遭遇すると、エラーがスローされ、何もフォーマットされません。このオプションを有効にすると、認識できない SQL ステートメントはスキップされ、そのまま残されます。 |
このプラグインを VSCode 内で使用するには、Prettier VSCode 拡張機能をインストールします。
Prettier VSCode のドキュメントに従って、デフォルトのフォーマッタとして設定します。
*.sql
ファイルに対して Prettier を有効にするために、prettier.documentSelectors を構成する必要がある場合もあります。
Prettier が何をしているのか、またはしていないかを確認するには、VSCode 出力ウィンドウを開き、Prettier ドロップダウンを選択します。フォーマットすると、ウィンドウにinferredParser
表示されるはずです。 "parser": "sqlite"
(またはより適切な設定overrides
セクション内で設定した任意のパーサー) と、このパッケージへのパスを含むplugins
表示することで、それを再確認する必要があります。その部分が表示されない場合、Prettier はこのパッケージを使用していません。
新しい SQL 言語のサポートは、sql-parser-cst によってサポートされているこれらの言語に依存します。本当に必要な場合は、パーサー リポジトリでその新しい問題を開くことができます。ただし、新しい方言に対するパーサーのサポートを実装するには多大な労力がかかることに注意してください。現在進行中の PostgreSQL、MySQL、MariaDB の実装が完了していない限り、他の方言の作業が開始される可能性は低いです。
prettier-plugin-embed をprettier-plugin-sql-cst
と一緒に使用します。
現在、このプラグインは 2 つの SQL 言語をサポートしています。
次の方言も実験的にサポートしています。
主な制限は、パーサーがこれらの方言の完全な構文をサポートしていないことです。これらの方言に特有の構文ではパーサーがクラッシュすることが予想されます。ただし、解析が成功する限り、フォーマットも成功するはずです。主に、SELECT、INSERT、UPDATE、DELETE ステートメントのフォーマットが機能することが期待できます。
この制限を克服するには、 sqlAcceptUnsupportedGrammar
オプションを有効にすることができます。これにより、プラグインは認識しない SQL ステートメントをスキップします。
SQL 書式設定スタイルの詳細は、依然として大きく変更される可能性があります。ただし、一般原則はすでにほぼ整備されているはずです。