ScalaPBで使える protocol buffers の linter の plugin を作った

github.com

最初に作ったのは結構前なのですが、OSSにしてなかったのでOSSにしました。 sbtでの設定方法はgithubのREADMEなどを見てください。 protocol buffersには多少の慣習というかstyle guideが公式にあり、

https://developers.google.com/protocol-buffers/docs/style

  • メッセージ名は CamelCase
  • フィールドは underscore_separated_names
  • enumは CAPITALS_WITH_UNDERSCORES
  • service名やserviceのメソッド名は CamelCase

などです。それらをチェックして、違反していたらコンパイルエラーにします。 諸事情によりわざと慣習に違反してる場合や外部のprotoで変更不可能な場合に備えて、特定のメッセージやフィールドなどをエラーにしないfilter的な仕組みもあります。

そもそも protocol buffersには、pluginという任意の言語でprotobufのASTのようなものを受けとって色々出来る仕組み があり、 さらにscalapbが依存してる protoc-bridgesbt-protoc は、独自に手軽に(?)scalajavaでpluginを書ける仕組みがあって、 それを使っています。

公式のstyle guideそんなに多く書いてないので、一度リリースすればあまりやることないかもしれませんが、 protoc-bridgeの新しいversion出たら追従などはやります。

あとは使っている依存ライブラリが、他の組み合わせによっては衝突 (scala-jsのclosure compilerが古いprotobufに依存してる、sbt 1.x は protobuf-java 3.3 に依存してる、など) する可能性があるので、 それの対策必要ならやるかもしれません。 shaded バージョンもリリースしました