piapia123
ja

C 言語 コード整形

整形

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

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

C コードのインデントを整えます。括弧を数えるのではなく、本物のパーサー(tree-sitter)で構文木を作り、文法に基づいて各行の深さを決めます。 なぜパーサーが必要か。「括弧を数える」方式は、`}` がコード中にあるのか文字列やコメントの中にあるのかを区別できません。`"}"` を含むコードが 1 つあるだけで、それ以降のインデントが総崩れになり、しかも何が悪いのか示されません。構文木があれば、ブロックの境界はパーサーが示します。 ⚠️ 変更するのは各行の先頭の空白だけで、行内の文字には一切触れません。 これは意図的な制約です:フォーマッタ最悪の失敗は「見た目が悪い」ことではなく動いているコードを壊すことだからです。行頭だけを触るなら、文字列・コメント・テンプレートの中身は影響を受けようがありません。構文が特殊でもインデントが変わるだけでコードは動きます。したがって行内の空白整理・並べ替え・折り返し・行削除は行いません。 構文が不完全でもエラーにせず出力します —— 書きながら整形するとはそういうものです。

機能

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

使い方

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

よくある質問

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

関連ツール