clang-format は、コマンドラインでも使用できるようですので、メモ
https://clang.llvm.org/docs/ClangFormat.html
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
install from source code もできますが...
以下の手順で、src からinstallできますが、makeに数時間や数GB(5GB超?)を要する為、 私が使用する centos8 on virtualboxでは、build できませんでした。
$ wget https://github.com/llvm/llvm-project/archive/llvmorg-10.0.1.tar.gz $ tar -xvf llvmorg-10.0.1.tar.gz $ cd llvm-project-llvmorg-10.0.1 $ mkdir build $ cd build $ cmake -G "Unix Makefiles" ../llvm $ make
install from package
$ sudo yum install clang* $ /usr/bin/clang-format --version clang-format version 9.0.1 (Red Hat 9.0.1-2.module_el8.2.0+309+0c7b6b03)
formatting java source code
以下は、foo.java を indent幅=4 で、上書き(-i)するものです。
clang-format -i -style="{IndentWidth: 4}" ./foo.java
その他、標準入力でsource code を受け取ることもできます。 以下は、「Seasar2徹底入門 - SAStruts/S2JDBC対応 - 翔泳社」のサンプルコードを 整形した例です。
https://www.shoeisha.co.jp/book/detail/9784798121505
$ cat foo.java | clang-format --assume-filename="foo.java" -style="{IndentWidth: 4}" package org.seasar.sastruts.example.action; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.Resource; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.seasar.fisshplate.preview.FPPreviewUtil; import org.seasar.fisshplate.template.FPTemplate; import org.seasar.sastruts.example.fpao.HelloFpao; import org.seasar.sastruts.example.fpao.HelloFpao.HelloDto; import org.seasar.struts.annotation.Execute; import org.seasar.struts.util.ResponseUtil; /** * Fisshplateのサンプルです。 * * @author Naoki Takezoe */ public class ExcelAction { @Resource protected HelloFpao helloFpao; /** * Fisshplateのサンプル一覧を表示します。 */ @Execute(validator = false) public String index() { return "index.jsp"; } /** * バインド変数のサンプルです。 */ @Execute(validator = false) public String helloWorld() throws Exception { InputStream in = getClass().getResourceAsStream("/excel/HelloWorld.xls"); FPTemplate template = new FPTemplate(); Map<String, String> map = new HashMap<String, String>(); map.put("name", "たけぞう"); HSSFWorkbook wb = template.process(in, map); ByteArrayOutputStream out = new ByteArrayOutputStream(); wb.write(out); ResponseUtil.download("HelloWorld.xls", out.toByteArray()); return null; } : /** * プレビュー機能のサンプルです。 */ @Execute(validator = false) public String preview() throws Exception { InputStream template = getClass().getResourceAsStream("/excel/Foreach.xls"); InputStream data = getClass().getResourceAsStream("/excel/Foreach_Preview.xls"); HSSFWorkbook wb = FPPreviewUtil.getWorkbook(template, data); ByteArrayOutputStream out = new ByteArrayOutputStream(); wb.write(out); ResponseUtil.download("Foreach_Preview.xls", out.toByteArray()); return null; } } $