piapia123
ja

Perl コード整形

整形

処理はすべてブラウザ内で完結します。データは送信されません

入力
ファイルをここにドロップすると読み込めます
出力

Perl コードのインデントを整えます。括弧を数えるのではなく、本物のパーサー(tree-sitter)で構文木を作り、文法に基づいて各行の深さを決めます。 なぜパーサーが必要か。「括弧を数える」方式は、`}` がコード中にあるのか文字列やコメントの中にあるのかを区別できません。そして Perl はこの罠が特に多い言語です:`$h->{key}`、`"${name}"`、`q{...}` と、波括弧がそこら中に出てきます。`"}"` を含むコードが 1 つあるだけで、それ以降のインデントが総崩れになり、しかも何が悪いのか示されません。構文木があれば、ブロックの境界はパーサーが示します。 ⚠️ 変更するのは各行の先頭の空白だけで、行内の文字には一切触れません。 これは意図的な制約です:フォーマッタ最悪の失敗は「見た目が悪い」ことではなく動いているコードを壊すことだからです。したがって行内の空白整理・並べ替え・折り返し・行削除は行いません。 ⚠️ ヒアドキュメントの本文と POD 指令はまるごと保持します。 どちらも Perl 固有の事情です:ヒアドキュメントの本文は文字列の中身なので、インデントするとデータに空白が入ります(`<<~` は特にそうで、本文各行の相対的なインデントが意味そのものです)。また POD 指令は行頭に置く必要があり、インデントすると Perl は POD と見なさずコードとして解析し、構文エラーになります。他の言語には無い問題なので、Perl だけ別扱いにしています。 構文が不完全でもエラーにせず出力します —— 書きながら整形するとはそういうものです。

機能

  • tree-sitter による本物の構文解析 —— インデントは文法に従って決まります
  • 文字列・コメント・`q{}` の中の括弧は構造判定に影響しません
  • ヒアドキュメント本文と POD 指令には一切触れません —— Perl 固有の保護
  • 変えるのは行頭の空白だけで、行内の文字には触れません
  • インデントはスペース 2 / 4 / タブから選択
  • 構文が不完全でもエラーにせず出力します
  • シンタックスハイライト表示に対応
  • すべて端末内で完結し、コードは送信されません

使い方

  1. コードを左側に貼り付けます
  2. インデント幅を選びます
  3. Ctrl/⌘ + Enter か「実行」を押します
  4. 「コピー」で結果を取得します

よくある質問

他のオンライン整形ツールと何が違いますか?
多くのオンライン整形ツールはテキストレベルのインデント処理です —— 1 文字ずつ走査し、`{` でインデントし `}` で戻します。その括弧がコード中にあるのか文字列の中にあるのかは区別できません。本ツールは本物のパーサーを使います:コードはまず構文木になり、各行の深さはそれが属する文法構造によって決まります。 代償は Perl の文法ファイルとパーサーのランタイム(合わせて約 4.4 MB)で、このツールのページを開いたときだけダウンロードされます。引き換えに得られるのは、推測しない構造判定です。
ヒアドキュメントと POD は変更されますか?
いいえ。これは Perl 固有の注意点です。ヒアドキュメントの本文と POD 指令(`=head1` など)には一切触れません:本文は文字列の中身なので、インデントするとデータに空白が入ります。また POD 指令は行頭に置く必要があり、インデントすると Perl は POD と見なさずコードとして解析し、構文エラーになります。 `<<~` のように共通の先頭空白を取り除く形式も同様にまるごと保持します —— 本文各行の相対的なインデントが意味そのものなので、1 行動かすだけで結果が変わります。
整形してもコードが変わらないのはなぜですか?
多くの場合、すでに正しいということです —— それが最良の結果です。フォーマッタ最悪の失敗は「見た目が悪い」ことではなく、正しいコードを書き換えてしまうことです —— その変更は diff とコードレビューに入り、誰がやったのか分からなくなります。そこで本ツールは、直すべきものがあるときだけ動きます。 本当にインデントが乱れていれば、出力は変わります。
コードの中身は変わりますか?
変わりません。触るのは各行の先頭の空白だけです —— 行内の 1 文字も動かさず、並べ替え・折り返し・行削除・文字列やコメントへの介入も行いません。ヒアドキュメント本文と POD はなおさらまるごと保持します。どんなに変わった見た目でも、最悪の結果はインデントが好みに合わないだけで、コードは動きます。 同じ理由で、欠けた構文(抜けた括弧、忘れたセミコロン)を補うことはできません。これはインデントのツールであり、修復のツールではありません。

関連ツール