• 締切済み

Eclipse PHP フォーマットについて

開発環境 Eclipse for PHP Developers Eclipse ソフトを使って PHP ソースを書くのが初めてなので使い方を教えて下さい プログラムソースをすべて選択して [ shift ] + [ alt ] + [ f ] キー押すとフォーマットが実行できます @ はタブが入っています サンプルソース if ($test == 1 ) { @$str = "a"; } ツールバーのウィンドウ - 設定の中に PHP - コード・スタイル - フォーマットがありましたので 確認するとタブ・ポリシーのみ設定できるようになっています 自分はフォーマットの機能で下の通りしたいです サンプルソース if ($test == 1 ) { @$str = "a"; } フォーマットの詳細はどこにあるのですか? 宜しくお願いします

みんなの回答

回答No.1

調べてたけど、挫折した。 >フォーマットの詳細はどこにあるのですか? 特定の設定ファイルというわけじゃなく、Javaのソースコードで書かれている。 #Google先生によると、espjpさんは以前Q6669837で、C#の質問しているから Javaも苦戦せんだろうという前提で回答。 以前、こんな他人のEclipse(Java)の質問に答えたので、まず内容を把握して欲しい。 eclipseで単文のfor文の改行をしない方法 http://okwave.jp/qa/q6363687.html DefaultCodeFormatter extends CodeFormatter http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/DefaultCodeFormatter.java?view=markup が、上記のCodeFormatterVisitorを使っている。「文法上これがある」「今のインデントはこれ」「だからこれを足す」という発想で作られていて見やすい。 …じゃあ、Eclipse(PHP)はどうなっているのかというと… http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.pdt/plugins/org.eclipse.php.core/src/org/eclipse/php/internal/core/format/PhpFormatter.java?view=markup&root=Tools_Project#l135 *各行をformatLineメソッドにかける。 formatLineメソッドでは… *各行の最初にあるtokenが何であるかによってIIndentationStrategyを変更 *caseだったときは、CaseDefaultIndentationStrategy commentだった場合、CommentIndentationStrategy php close tag "?>"だったときはPHPCloseTagIndentationStrategy "}"だったときはCurlyCloseIndentationStrategyが返る。 http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.pdt/plugins/org.eclipse.php.core/src/org/eclipse/php/internal/core/format/?root=Tools_Project *if構文にはcurlyclose"}"が含まれているから、利用したいきがする。 *curlycloseIndentationStrategyは対応する"{"を、"}"や"{"の数を数えることで探し、その時のインデントによって、整形を行う http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.pdt/plugins/org.eclipse.php.core/src/org/eclipse/php/internal/core/format/CurlyCloseIndentationStrategy.java?view=markup&root=Tools_Project 問題点: 【そのopen curly braces { がifのものであることを前まで戻って確認する必要があるが、どこでやるべきか方針に自信が持てない】 【各curlyIndentationが公開するpublicメンバは、placeMatchingBlanksのみと思われるからここでできないと思う】 #PhpFormatterのif (/* endFormat >= end || */startFormat <= start && endFormat >= end) { あたり、何がやりたいのか分かってないんだよなー #[ shift ] + [ ctrl ] + [ f ] だと思うけど、まぁいいや。

関連するQ&A