Плагин Prettier для SQL, который использует sql-parser-cst и настоящий алгоритм форматирования Prettier.
Попробуйте вживую!
Как и Prettier для 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 ;
В настоящее время этот плагин сохраняет большинство элементов синтаксиса и концентрируется в основном на расположении пробелов.
См. STYLE_GUIDE для обзора используемого стиля форматирования SQL.
Установите его как любой другой плагин 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
Затем используйте его для файлов SQL с помощью инструмента командной строки Prettier или расширения Prettier для выбранного вами редактора.
По умолчанию плагин определяет диалект 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, чтобы настроить его в качестве средства форматирования по умолчанию.
Вам также может потребоваться настроить prettier.documentSelectors, чтобы включить Prettier для файлов *.sql
.
Чтобы узнать, что делает Prettier, а что нет, откройте окно вывода VSCode и выберите раскрывающийся список Prettier. В формате в окне должен отображаться ваш inferredParser
. Он должен подтвердить это, показав "parser": "sqlite"
(или тот, который вы настроили в своем более красивом разделе 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 все еще может сильно измениться. Хотя общие принципы уже должны быть в основном установлены.