sql-dialect-fmt
Snowflake SQL と Databricks SQL のフォーマッタ+シンタックスハイライタ(Rust 製)。gofmt / Prettier / Biome 流の opinionated・ほぼ設定なしの整形を目指します。
整形は 無破壊・べき等 を機械的に保証します(パースできない入力は無変更で素通し、整形しても有意トークンとコメントは保存、format(format(x)) == format(x))。
インストール
# crates.io から
# このリポジトリから直接(`sql-dialect-fmt` バイナリが入る)
# ローカルチェックアウトから
# または: cargo build --release -p sql-dialect-fmt → target/release/sql-dialect-fmt
使い方
|
# オプション: --dialect snowflake|databricks / --line-width N(既定100) / --indent-width N(既定4) / --no-uppercase
Snowsight / Chrome 拡張
Snowsight 上で使う Chrome 拡張を extensions/chrome に置いています。Rust formatter を
WebAssembly にして同梱するので、ローカルサーバは不要です。
その後、Chrome の chrome://extensions で Developer mode を有効にし、extensions/chrome
を Load unpacked してください。Snowsight の worksheet editor にフォーカスして、右下の
sql-dialect-fmt ボタン、拡張アイコン、または Alt+Shift+F で整形できます。
Release 用の Chrome zip と VS Code VSIX はまとめて作れます。
開発
状態
Snowflake は SELECT 一式・DML(INSERT/UPDATE/DELETE/MERGE)・COPY・主要 DDL/object DDL・Semantic View・CREATE PROCEDURE/FUNCTION(SQL/JavaScript/Python/Java/Scala body)までパース+整形。Databricks は LATERAL VIEW、Delta DDL option、VERSION/TIMESTAMP AS OF、higher-order function lambda、backtick identifier を dialect mode でサポート。LSP/semantic tokens/hover、Tree-sitter grammar、CLI、Snowsight 用 Chrome/WASM 拡張も入っています。看板機能は magic trailing comma。詳細と計画は ROADMAP.md を参照。
クレート構成
| crate | 役割 |
|---|---|
sql-dialect-fmt-syntax |
SyntaxKind・キーワード認識・rowan 言語定義 |
sql-dialect-fmt-lexer |
手書きロスレス Lexer |
sql-dialect-fmt-parser |
エラー回復で無停止のロスレス CST パーサ |
sql-dialect-fmt-formatter |
汎用 Doc IR エンジン + SQL 整形規則 |
sql-dialect-fmt-highlight |
トークン分類(シンタックスハイライト) |
sql-dialect-fmt-hover |
型・手続き・タスクの hover テキスト |
sql-dialect-fmt-tree-sitter |
同梱 Tree-sitter grammar の Rust バインディング |
sql-dialect-fmt-lsp |
Language Server(formatting / semanticTokens / 診断、stdio) |
sql-dialect-fmt-wasm |
Snowsight/Chrome 拡張向けの WebAssembly bridge |
sql-dialect-fmt |
CLI エントリポイント(crate path は crates/sql-dialect-fmt-cli) |
ライセンス
MIT OR Apache-2.0