用于 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 格式化样式的细节仍然很容易发生变化。尽管一般原则现在应该已经基本到位。