ハスケルコードフォーマッター(フォルモル / オルモルスタイル)
ガイド
ハスケルコードフォーマッター(フォルモル / オルモルスタイル)
raw Haskellソースを貼り付けて、Fourmolu/Ormolu風の一貫したスタイルにフォーマットされたコードを取得します。演算子のスペース、並べ替えられたLANGUAGEプロガマ、グループ化されたインポート、およびタブをスペースに変換します。すべての処理はブラウザ内で行われ、ソースコードはあなたのマシンに留まります。
使用方法
- アップロード
.hsファイルまたはHaskellソースを入力ボックスに貼り付けてください(「例を試す」リンクを使用して簡単なサンプルを試してください)。 - インデントサイズを選択してください — 2スペース(Fourmoluのデフォルト)または4スペース(Ormoluのデフォルト)。
- 長さが最大値を超える行を検証サマリーにフラグ表示するための最大行長を設定(デフォルトは100)。
- トグル インポートの並べ替え, LANGUAGEプロガマを並べ替えおよび重複を削除と、 空白行のまとめる プロジェクトのスタイルに合わせます。
- フォーマットされた出力は自動的に表示され、シンタックスハイライトが適用されます。結果をコピーまたはダウンロードして取得してください。
機能
- 一貫したスペース — 演算子、比較演算子、Applicative/Monadコンビネータ(例:
=,::,->,<-,=>,$,++)の周囲に標準的なスペースを追加します。<$>,<*>,>>=. - プロガマの標準化 — すべての
{-# LANGUAGE ... #-}プロガマをファイルのトップに移動し、複数プロガマを1つの拡張子ごとに分割し、アルファベット順に並べ替え、重複を削除します。 - インポートの並べ替え — 隣接した
import宣言をモジュール名でアルファベット順に並べ替えながら、未指定/指定されたグループの慣例を維持します。 - レイアウト安全 — ユーザーの先頭インデントを維持(Haskellのレイアウトルールは意味的に重要)ながら、選択されたインデント幅でタブをスペースに変換します。
- コメント安全なトークナイザー — 行コメント(
--)、ネストされたブロックコメント({- ... -})、プロガマ、エスケープ付き文字列、およびキャラクタリテラルを正しく処理し、それらの中の演算子文字が壊れないようにします。 - 括弧+ブロック検証 — 開閉括弧、ブレース、未終了ブロックコメントの不均衡を行番号で検出します。
- 長行レポート — 指定された最大幅を超える行をハイライトし、レビュー前にリファクタリングできます。
- 100%クライアントサイド — あなたのコードはすべてブラウザ内で処理され、アップロード、ログ記録、または保存されません。
よくある質問
-
OrmoluとFourmoluの違いは?
Ormoluは厳密で意見の強いHaskellフォーマッターで、設定がほとんどなく、すべてのプロジェクトがOrmoluでフォーマットされた場合、見た目がまったく同じになります。FourmoluはOrmoluのフォークであり、インデントサイズ、コンマの配置、先頭/末尾コンマ、レコードブレースのスペースなど、いくつかのスタイル調整を提供し、上流のOrmoluとまったく同じではない一貫したスタイルをチームに提供します。両方とも同じパーサーとAST駆動アプローチを使用しており、信頼できるHaskellコードを生成します。
-
Haskellのフォーマットは一般用途AIにとって難しい理由は?
Haskellはオフサイドルールを使用しており、インデントが意味的に重要で、let、where、do、case ... ofのブロックの開始と終了を決定します。フォーマッターはパーサーツリーを理解しなければならず、プログラムの意味を変えるようなインデントを再インデントすることはできません。一般用途の言語モデルはコードをテキストとして扱い、頻繁にインデントを変更し、特にネストされたwhere節や複数行のラムダ式に対して、入力と異なるインデントを生成します。
-
LANGUAGEプロガマとは?
LANGUAGEプロガマは、Haskellソースファイルのトップに配置される形式 {-# LANGUAGE ExtensionName #-} で、モジュールにGHCの言語拡張を有効にします。例えばOverloadedStrings、ScopedTypeVariables、TypeApplicationsなど。プロガマは複数併用可能({-# LANGUAGE A, B, C #-})ですが、多くのスタイルガイドは1つの拡張子1行にし、アルファベット順に並べることを推奨しており、変更の差分を簡単に確認できます。
-
qualifiedインポートは通常、別々にグループ化される理由は?
慣例では、qualifiedインポート(import qualified Data.Map as M)はplainインポート(import Data.List)の後にグループ化され、読者はまず未指定名をスキャンし、どのモジュールがエイリアスでアクセスされているかを一目で確認できます。これはstylish-haskell、Ormolu、Fourmoluのデフォルトで生成されるレイアウトであり、プロジェクトにqualifiedエイリアスを追加または削除した場合のマージコンフリクトを局所化します。
