IntelliJ IDEA 13ではEclipseのコードフォーマット設定のインポートが可能に

同じプロジェクト内で複数のIDEが使われるのは珍しいことではありません。各自が好みのIDEを使えるようにすることは大事なことです。しかし共同作業をする上で、IDEの混在はしばしば困難を招きます。中でも良く問題としてあがるのがプロジェクト全体で統一すべきコーディングスタイルです。

Eclipse Code Formatterという人気のプラグインを使うと名前の通りIntelliJ IDEAでEclipseのコードフォーマットを適用することができます。このプラグインはEclipseのAPIを使うため、他の人がEclipseで編集したコードにフォーマットを合わせるという目的は十分に果たします。しかしリファクタリングやコード生成等を使う場面ではこのプラグインは働きません。

しかしIDEA 13ではもう心配無用です。プラグインを使うことなくEclipseのコードフォーマット設定をインポートすることができます。やり方は簡単で、Eclipseで[Preferences → Java → Code Style → Formatter→ Export All]よりXMLファイルにフォーマット定義を書き出し、IntelliJ IDEAより[Settings → Code Style → Java→  Manage]よりそのXMLファイルを読み込むだけです。

現在のところ、IntelliJ IDEAは以下の設定項目のインポートに対応しています:

  • General
    • Right margin, Formatter on/off tags
    • Indentation
    • Indent size
    • Usage of ‘Tab’ character
    • Usage of Tab only for leading indentation (Smart Tabs)
    • Indent ‘case’ branches from ‘switch’
    • Indent class members
    • Keep comment at first column
  • Spaces (Java)
    • Before/after comma (as set for Eclipse method declaration parameters)
    • After comma in type arguments
    • Within array initializer braces
    • Within brackets (in array reference)
    • Within parentheses of: annotation, ‘for’, ‘if’, ‘catch’ ’while’, ’switch’, method, empty method, parenthesized expression, method call, type cast, ‘synchronized’
    • Before parentheses of: ‘try’, ‘for’, ’while’, ‘switch’, method, ’if’, ‘catch’, method, method call, ‘synchronized’.
    • After type cast
    • Around unary, assignment operators (if it’s set for ‘before’ and ‘after’ in Eclipse).
    • Before opening brace of: array initializer, ‘switch’
    • Before ‘?’ in conditional expression
    • Space before/after ‘:’ in conditional expression
    • Space around binary operators (a single Eclipse setting is mapped to multiple IntelliJ IDEA’s settings)
  • Blank lines
    • Around fields and methods
    • Before/after package
    • Before/after imports
    • Before method body
    • Keep blank lines in code (number of empty lines to preserve)
  • Wrapping
    • New line before: closing brace in array initializer, ‘else’ in ‘if’ statement, ‘finally’ and ‘catch’ in ‘try’ statement, binary operator (if wrapped)
    • New line after:  opening brace in array initializer
    • Special ‘else if’ treatment (compact ‘else if’)
    • Keep simple blocks in one line
    • Keep control statements in one line
  • Alignment of: array initializer expressions, arguments in method declarations and calls, field declarations, extends list, assignments, binary expressions, ‘throws’ clause, resources in ‘try’.
  • Brace style for: code blocks, methods and classes
  • JavaDoc
    • Enable JavaDoc formatting
    • Blank lines in JavaDoc

注意していただきたいのはIntelliJ IDEAとEclipseのコードフォーマット定義は根本的に異なるため、完全なマッピングはできないということです。例えばIntelliJ IDEAで‘(‘の後にスペースを置き、‘)’の前にスペースを置かないという設定はできません。しかしながら、IntelliJ IDEAのチームでは相互互換性を改善するため継続的に取り組んでいます。そして皆様のフィードバックをお待ちしております。

また、近々以下の機能を実装予定です:

  • より多くの設定項目(皆様のフィードバックにより何を優先すべきか決めていきます)
  • より多くの言語
  • 設定のエクスポート、インポートなしに.settings/org.eclipse.jdt.core.prefsを直接読み込み可能にする
  • コーディング規約(フィールドのプレフィクスなど)のインポート
  • コードテンプレートのインポートや、インポート設定のオーガナイズ

フィードバックは掲示板へ、不具合があればYouTrackへお願いいたします。

Develop with Pleasure!

原文

image description