.proto ってどうやって整形するんだろう?って思ったら Issue がヒット。
proto file formatter · Issue #4113 · google/protobuf
clang-format を使えってことみたいなので、やってみる。
Mac なら brew で入る。
$ brew install clang-format
$ clang-format -i hoge.proto
JetBrains 系エディタなら clang-format プラグインがあって Reformat Code with clang-format というコマンドが増えるので、これを実行すると OK 内部的に clang-format を実行するので、実行できる状態になっている必要がある。
vscode にも同様の動きをするような Clang-Format という拡張機能があるのでこれを使うと整形が出来る。 と思ったが .proto には紐付いてないみたいなのでダメっぽい…?
–
とはいえ環境を汚したくないとか、何かしらの都合で入れられないとかあると思うので Docker 使って make なりのタスクランナーから実行出来るようにしてあげるのがいいかな。
Dockerfile はこんな様子で。
FROM alpine:3.8
RUN apk add clang findutils
ENTRYPOINT find . -type f | xargs clang-format -i
run はこんなふうにやる。
$ docker run --rm -t -w /work -v "$(pwd)":/work clang-format
というのを試したリポジトリはココ。
sters/docker-clang-format-example: testrepo
ガタガタな proto も整えてくれる。
Before
syntax = "proto3";
package example;
import "google/protobuf/timestamp.proto";
service Example {
rpc Get(GetRequest) returns (GetResponse) {};
}
message GetRequest {
string fieldA;
int fieldB;
google.protobuf.Timestamp fieldC;
}
message GetRequest {
string a;
repeated google.protobuf.Timestamp b;
}
After
syntax = "proto3";
package example;
import "google/protobuf/timestamp.proto";
service Example {
rpc Get(GetRequest) returns (GetResponse) {};
}
message GetRequest {
string fieldA;
int fieldB;
google.protobuf.Timestamp fieldC;
}
message GetRequest {
string a;
repeated google.protobuf.Timestamp b;
}