Magnolia Tech

いつもコードのことばかり考えている人のために。

Scala 2.13より未使用変数への警告を抑止するunused annotationが追加された

時々メソッドのインタフェースを揃えるために、わざと使わない引数を定義することが有る。

Scalatraでもインタフェースを揃えるためにServletのRequestとResponseをペアで定義しているが、必ずしも使っていない、みたいなコードがあり、ビルドの度に未使用パラメータの警告が出てしまう。

[warn] /repos/scalatra/auth/src/main/scala/org/scalatra/auth/ScentryStrategy.scala:44:35: parameter value request in method beforeAuthenticate is never used
[warn]   def beforeAuthenticate(implicit request: HttpServletRequest, response: HttpServletResponse): Unit = {}
[warn]                                   ^
[warn] /repos/scalatra/auth/src/main/scala/org/scalatra/auth/ScentryStrategy.scala:44:64: parameter value response in method beforeAuthenticate is never used
[warn]   def beforeAuthenticate(implicit request: HttpServletRequest, response: HttpServletResponse): Unit = {}
[warn]                                                                ^

将来の拡張性のために意図した未使用は警告しないで欲しいなぁ…と思っていたら、Scala 2.13よりunused annotationが追加された。

Scala Standard Library 2.13.0 - scala.annotation.unused

ドキュメントに全然コード例が無いので分かりづらいけど、テストコードにコメント付きで使い方が書かれているので、こちらを見た方が理解しやすいと思います。

scala/t10790.scala at 2.13.x · scala/scala · GitHub

Scala 2.13以降なので、後方互換性の観点からすぐに使うわけにはいかないけど、ライブラリ作ったりする人は知っておくといいと思いました。