🛠️

golinesのベースフォーマッタをgofmtにして実行する

2024/01/10に公開

golinesはGo言語のコードフォーマッタで、1行当たりの長さをいい感じにしてくれます。

golines をディレクトリ指定等で使うと結構処理が重いです。
高速化のために、過去にgoroutine使って並列化するようなpull-request出したりもしました。
https://github.com/segmentio/golines/pull/105

最近、golinesのプロファイル取ってみて気づいたのですが、golinesはデフォルトで裏でgoimportsをexecして実行しているので、結構重いということに気づきました。
もうひとつgolinesがデフォルトで対応しているベースフォーマッタにgofmtがあるのですが、こちらはモジュールとして呼び出しているので、非常に高速でした。

プロジェクトの性質にもよりますが、ファイル数が多い場合には、ベースフォーマッタをgoimportsではなくgofmtにすることで高速化できそうです。

以下のようにすれば、gofmtを指定して実行できます。私が使っているプロジェクトでは、goimportsgolines両方実行する形にしてもお釣りが来ました。

golines --base-formatter=gofmt -w ./

ただしgolinesは自動生成された.goファイルを無視する機能を持っており、goimportsはその機能を持っていないので、その辺りの差分はシェルを組むなりして回避する必要があります。

Discussion