# PHPコードフォーマッタ

PDT(3.1.1以降)に整形機能を追加します。

- 範囲選択なしでFormat(Ctrl+Shift+F)すると、ファイル全体をフォーマットします。
- 範囲を選択してFormat(Ctrl+Shift+F)すると、選択範囲のみフォーマットします。
- 範囲選択なしでFormat Active Elements(Ctrl+I)すると、カーソル位置の要素（関数/メソッドまたはクラスもしくはPHPコードブロックあるいはHTML要素）をフォーマットします。
- 範囲を選択してFormat Active Elements(Ctrl+I)すると、選択範囲に含まれる要素（同上）をフォーマットします。
- PHP ExplorerのコンテキストメニューでSource＞Formatを選択すると、ファイル全体をフォーマットします。

- コメント・PHPDocコメント内は基本的にフォーマットしませんが、インデント・行頭スペースは変わります。
- テンプレートファイル（*.tplなど）はフォーマットできません。
- 文法エラーのあるファイルはフォーマットできません。

## 設定画面

設定画面はPreferences＞PHP＞Code Styleの下の「Formatter (PDT Tools)」にあります。PDTの設定画面の「Formatter」もそのまま残っていますが、そちらでは設定しないでください。

⇒設定

## 補足事項

1. コメントに関して
   - インラインコメントの前後は、空白文字があれば1個のスペースを挿入し、空白文字が無ければ無いまま（挿入はしない）となります。
   - マルチラインコメントの文頭は "/*" の桁位置を基準として極力フォーマット前の状態を保持しますが、それができない場合は文頭の空白文字を全削除し、先頭文字が "*" の場合のみスペースを1個挿入します。
   - 行末の行コメントは、文末と "//" または "#" との間に空白文字があれば1個のスペースを挿入し、空白文字が無ければ無いまま（挿入はしない）となります。
2. 折り返しに関して
   - 行の長さが最大幅を超えるかどうかの判定は、インラインコメントや複合構文（例えば関数呼び出しの引数に関数が使用されている場合などで、フォーマットにより長さが変わる可能性があるケース）を考慮していません。
3. 問題マーカーに関して
   - フォーマットに失敗した場合、一時的な問題マーカーを作成します。これは、複数ファイルを一括フォーマットした時、正常終了したのかいずれかのファイルでフォーマットに失敗したのか、ログファイルを参照しないと判らないためです。一時的なマーカーなのでEclipseを終了すると消えます。
4. Format Active Elements(Ctrl+I)に関して
   - フォーマットされるのはカーソル位置の関数/メソッドまたはクラスの内側だけで、外側はフォーマットされません。
   - カーソル位置が関数/メソッドまたはクラスの中に無い場合は、PHPコードブロック（PHP開始タグから終了タグまで）をフォーマットします。
   - カーソル位置の関数/メソッドまたはクラスが複数のPHPコードブロックにまたがっている場合、カーソル位置のPHPコードブロックのみがフォーマットされます。
   - HTMLに関してはHTMLフォーマッタに準じます。なお、設定の「HTMLもフォーマットする(オプション)」がOffであっても、HTMLは常にフォーマット対象となります。

## 制限事項

1. namespace宣言行のインラインコメントは改行されます。
   <?php
   namespace my\\name; // "名前空間の定義" を参照ください
   上記コードは下記のようにフォーマットされます。
   <?php
   namespace my\\name;
   // "名前空間の定義" を参照ください
   これは、PDTの内部データ構造が次のようになっており、インラインコメントが名前空間ブロックの中に入り込んでいるためです。
   namespace my\\name
   {
   // "名前空間の定義" を参照ください
   ...
   }