用於 SQL 的 Prettier 插件,使用 sql-parser-cst 和實際的 Prettier 格式化演算法。
現場嘗試!
與 Prettier for JavaScript 一樣,該插件根據 SQL 表達式的長度對其進行不同的格式化。一個簡短的 SQL 查詢將被格式化為一行:
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
檔案中的 prettier 配置來覆寫此行為:
{
"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 文件將其配置為預設格式化程式。
您可能還需要設定 prettier.documentSelectors 才能為*.sql
檔案啟用 Prettier。
若要查看 Prettier 正在執行或未執行的操作 - 開啟 VSCode 輸出視窗並選擇 Prettier 下拉清單。在格式上,視窗應該會顯示您的inferredParser
。它應該透過顯示"parser": "sqlite"
(或您在 prettier 配置overrides
部分中配置的任何一個)和帶有此套件路徑的plugins
來重新確認。如果您沒有看到該部分,則 Prettier 沒有使用此套件。
對新 SQL 方言的支援取決於 sql-parser-cst 支援的這些方言。如果您確實願意,可以在解析器儲存庫中為此開啟一個新問題。但請注意,實作對新方言的解析器支援需要大量工作。只要 PostgreSQL、MySQL 和 MariaDB 的持續實施尚未完成,任何其他方言的工作就不太可能開始。
將 prettier-plugin-embed 與prettier-plugin-sql-cst
一起使用。
目前該外掛支援兩種 SQL 方言:
它也對以下方言提供實驗性支持:
主要限制是解析器不支援這些方言的完整語法。人們應該預料到解析器會因為更特定於這些方言的語法而崩潰。但只要解析成功,格式化也應該成功。主要是 SELECT、INSERT、UPDATE、DELETE 語句的格式可以正常運作。
為了克服這個限制,您可以啟用sqlAcceptUnsupportedGrammar
選項,這將使外掛程式跳過它無法辨識的 SQL 語句。
SQL 格式化樣式的細節仍然很容易變更。儘管一般原則現在應該已經基本到位。