89

Java 用の高品質なスタンドアロン ソース コード フォーマッタの利用可能な選択肢について知りたいと思っています。

フォーマッタはスタンドアロンである必要があります。つまり、特定の開発環境から切り離された「バッチ」モードをサポートする必要があります。理想的には、特定のオペレーティング システムからも独立している必要があります。そのため、IDE du jour の組み込みフォーマッタは、ここではあまり重要ではありません (IDE がおそらくコマンド ラインからのバッチ モード フォーマッタ呼び出しをサポートしている場合を除きます)。クローズド ソースの C/C++ で記述された、Windows などでのみ実行されるフォーマッタは理想的ではありませんが、やや興味深いものです。

明確にするために、「フォーマッタ」(または「ビューティファイア」) は「スタイル チェッカー」と同じではありません。フォーマッタは、ソース コードを入力として受け取り、スタイル ルールを適用して、元のソース コードと意味的に同等なスタイル付きソース コードを生成します。import構文の変更は、空白の変更やステートメントの整理など、コード レイアウトの変更などに限定されます。他のリファクタリングは、たとえあったとしても、ほとんど実行されません。スタイル チェッカーもスタイル ルールを適用しますが、変更されたソース コードを出力として生成せずにルール違反を報告するだけです。したがって、写真は次のようになります。

フォーマッタ(スタイリング ルールに準拠した修正済みソース コードを生成)

ソースコードを読む → スタイリングルールを適用する → スタイル付きソースコードを書く

スタイル チェッカー(変更されたソース コードを生成しません)

ソースコードを読む → スタイリングルールを適用する → ルール違反を書く

さらなる説明

ソリューションは高度に構成可能でなければなりません。単にプリセット リストから選択するのではなく、独自のスタイルを指定できるようにしたいと考えています。

また、私はJavaで書かれた、多くのものをきれいに印刷できる汎用のきれいなプリンターを探しているわけではありません。Java コードのスタイルを設定したい。

また、多くの言語用の大規模な統一フォーマッタにも必ずしも関心があるわけではありません。ソリューションが Java 以外の言語をサポートするのはよいことかもしれませんが、それは必須ではありません。

さらに、コードの強調表示のみを実行するツール完全 .

また、Web サービスには興味がありません。ローカルで実行できるツールが必要です。

最後に、ソリューションをオープン ソース、パブリック ドメイン、シェアウェア、フリー ソフトウェア、商用などに限定する必要はありません。すべての形式のライセンスが受け入れられます。

4

9 に答える 9

25

JIndent(商用)はあなたが望むことをします:

http://www.jindent.com/

私はこれを行うために過去に Jalopy も使用しました。これはオープン ソースです。

http://jalopy.sourceforge.net/

編集: Jalopy はかなり古く、最近の更新はないようです。Java 5/6 で動作するかどうかはよくわかりません。代わりに Jacobe を見たいと思うかもしれません:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

Roedy Green のサイトには、フォーマッタのより完全なリストもあります。

http://mindprod.com/jgloss/beautifier.html

于 2009-06-15T15:11:25.427 に答える
14

コマンドラインから Eclipse リフォーマッターを実行することもできます。

この機能の Eclipse ドキュメントは次のとおりです。

最初に、Java コード フォーマッタ設定のプロジェクトに固有の構成ファイルを作成する必要があります。

次に、別の場所に保存{projectDirectory}/.settings/org.eclipse.jdt.core.prefsします。

次に、フォーマッタを呼び出します。

"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"

[警告] これは Eclipse 2018 で機能しなくなったようです。Eclipse Oxygen を使用してください。

于 2009-07-16T14:36:42.247 に答える
7

ジャロピーは興味深いかもしれません。Ant にプラグインされるため、IDE から独立しています。

Astyleも役立つ場合があります。オープン ソース (Jalopy など) ですが、C++ で記述されています。Java/C/C++ のフォーマットに対応しており、(シェル スクリプトなどを介して) バッチ駆動が可能です。

于 2009-06-15T15:12:13.100 に答える
4

更新: 私が提出した誤ったバグ レポートに基づく私の新しい理解によると: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 OpenMRSFormatter.xml ファイルは、実際には設定ファイルであり、XML ではありません。ファイル。

そのようなファイルはここにあります: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

または、エクスポートされた XML フォーマッタ ファイルを次のように変換します。grep 設定 | sed 's/@@' > formatter.asprefs

ミーシャありがとう


これは、Eclipse 3.6 jar を使用して作成したものです。これは Java 専用のコマンド ラインであり、クロス プラットフォームと互換性がある必要があります。

http://www.sendspace.com/file/nm4ptt

バンドルされている OpenMRSCodeFormatter.xml ファイルを使用するシェル スクリプトがあります。サンプル出力:

misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {



public a() {
System.out.println("! I did not format this right!");
}



}misha@misha-d630:~/openmrs-code-formatter$ ./format.sh ../Test.java
Configuration Name: OpenMRSFormatter.xml
Starting format job ...
Done.
cat ../misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {

        public a() {
                System.out.println("! I did not format this right!");
        }

}misha@misha-d630:~/openmrs-code-formatter$ 

これは、次の投稿に基づいています: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

いつまでリンクが続くかわからないので、以下に内容を記しておきます。

これは、Eclipse 3.6 Helios ディストリビューションに基づいています。Linux x86 用のものを使用しましたが、(私の知る限り) プラットフォーム固有の JAR ファイルを使用していないため、どのバージョンでも機能するはずです。

tar アーカイブの内容は次のとおりです。

misha@misha-d630:~$ tar tvjf openmrs-code-formatter.tar.bz2  | sort 
tar: Record size = 8 blocks
drwxr-xr-x misha/misha       0 2010-09-11 19:32 openmrs-code-formatter/plugins/
drwxr-xr-x misha/misha       0 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/
drwxr-xr-x misha/misha       0 2010-09-11 19:38 openmrs-code-formatter/configuration/
-rw-r--r-- misha/misha  101957 2010-09-11 19:03 openmrs-code-formatter/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar
-rw-r--r-- misha/misha  107210 2010-09-11 19:32 openmrs-code-formatter/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
-rw-r--r-- misha/misha  111098 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar
-rw-r--r-- misha/misha 1147220 2010-09-11 18:45 openmrs-code-formatter/plugins/org.eclipse.osgi_3.6.0.v20100517.jar
-rw-r--r-- misha/misha    1812 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
-rw-r--r-- misha/misha  182596 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar
-rw-r--r-- misha/misha  248071 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar
-rw-r--r-- misha/misha     265 2010-09-11 19:21 openmrs-code-formatter/configuration/config.ini
-rw-r--r-- misha/misha   28554 2010-09-11 19:34 openmrs-code-formatter/OpenMRSFormatter.xml
-rw-r--r-- misha/misha   39331 2010-09-11 19:17 openmrs-code-formatter/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar
-rw-r--r-- misha/misha 4504121 2010-09-11 19:27 openmrs-code-formatter/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar
-rw-r--r-- misha/misha   47023 2010-09-11 18:42 openmrs-code-formatter/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
-rw-r--r-- misha/misha   52710 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar
-rw-r--r-- misha/misha 6451211 2010-09-11 19:32 openmrs-code-formatter/plugins/com.ibm.icu_4.2.1.v20100412.jar
-rw-r--r-- misha/misha   70928 2010-09-11 19:01 openmrs-code-formatter/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar
-rw-r--r-- misha/misha  769898 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.resources_3.6.0.v20100526-0737.jar
-rw-r--r-- misha/misha   83817 2010-09-11 19:07 openmrs-code-formatter/plugins/org.eclipse.equinox.app_1.3.0.v20100512.jar
-rw-r--r-- misha/misha   86986 2010-09-11 19:31 openmrs-code-formatter/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar
-rw-r--r-- misha/misha   90837 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.core.jobs_3.5.0.v20100515.jar
-rw-r--r-- misha/misha   91928 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar
-rwxr-xr-x misha/misha     111 2010-09-11 19:39 openmrs-code-formatter/format.sh

プラグイン ディレクトリ内の関連する jar は、Eclipse 3.6 プラグイン ディレクトリから直接取得されます。

config.ini の内容は次のとおりです。

misha@misha-d630:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter

format.sh は次のとおりです。

misha@misha-d630:~$ more openmrs-code-formatter/format.sh 
#!/bin/bash
java -jar plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $*

OpenMRSFormatter.xml はこちらから入手できます: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

再現するのに十分なはずだと思います。

同じ概念に基づく興味深いプロジェクトがここにあります: http://code.google.com/p/maven-java-formatter-plugin/

ミーシャありがとう

于 2010-09-12T18:20:47.313 に答える
1

「Jacobe Code Beautifier」を試す:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

個人版は無料です。

于 2009-08-06T21:43:54.647 に答える
0

以前はDr. Javaを使用してコードを記述していましたが、ctrl+A + タブをすばやく押すと、構文が強調表示されてすべてがうまくフォーマットされます。Mac と Windows で使用しましたが、Linux をサポートしているかどうかはわかりません。しかもオープンソースで、スタンドアローンで、しかも無料です。

于 2009-06-15T15:15:14.310 に答える
0

バージョン 7 を含む Java のすべての方言を処理するツールについては、 Java フォーマッターを参照してください。

于 2012-05-05T17:01:31.357 に答える
0

また、JRefactory ( http://jrefactory.sourceforge.net/ ) に埋め込まれた PrettyPrinter も多く使用しました。JEdi​​t のプラグインで発見しました。私が今まで見た中でより良い javadoc カバレッジを持っていたので、私はそれを高く評価しました.

残念ながら、それは死んでいるように見え (2004 年以降進化はありません)、実際には Java5 をサポートしていません。

ところで、Triemax がデッド オープン ソースの Jalopy に基づく商用スイートであることを確認しました。

于 2009-06-15T20:01:28.910 に答える
0

Jalopy は List stuff<MyClass> ... のようなステートメントや @ で始まる lint コメントを処理しません。

すべての <MyClass> を LTLTLTMyClassGTGTGT に変更し、次に @ を //@//@//@ に変更することで、強制的にフォーマットすることができました (LT、GT、または //@ を繰り返して、それらが発生しないことを確認するだけです)。それから私はジャロピーをすることができました、そして明らかに私はすべてを元の状態に戻す必要があります.

また、 < または > を変更する前に、 <= または >= などの比較を変更しないことを確認する必要があります。

したがって、これには多くの手動の手順が含まれるため、これを貧乏人の解決策と呼ぶことができます。Jalopy をもっと頻繁に行うとしたら、おそらく sed を使用して、これらの変更を自動的に行うスクリプトを作成するでしょう。

于 2014-10-23T15:34:37.180 に答える