scalapropsをdotty対応してみた知見

まだ継続してメンテナンスするかどうかわからないけど、以下のようなニュースが飛び込んで来たので、そろそろ試すか、と試した結果をメモ。

結果としては数十分から数時間書き換えた程度で、それなりに動きました。

最初scalazをやろうかとおもったけど、kind-projectorがコンパイラプラグインだから、そのままでは不可能そうなのでscalapropsにしました。

https://github.com/scalaprops/scalaprops/compare/scalaprops:f9297e9...scalaprops:9986a9d

tweetでは最初0.20.0-RC1といったけど、0.21.0-RC1で動きました

  • toString() 呼び出し時に () つけるな、と怒られる
  • scalaz.LazyNone呼び出し時に逆にカッコつけろ、と言われる
  • def this() {def this() = { になおせ、と言われる
  • enumがkeywordなのでバッククオートで括らないと駄目
  • == が型安全になって怒られた(変な比較してた)
  • FloatとIntの共通の型で?推論させると、今までFloatになっていたが、AnyValにされてしまったので明示的にtoFloatで変換
  • implicit valやdefに型を書け、と怒られるので付与(ローカル変数だとしても)
  • forAll { fa: F[A] => みたいなやつをカッコつけろ、と怒られる forAll { (fa: F[A]) =>
  • 一部のテストファイルが、implicitの規則か型推論の規則が変わったせいでコンパイル通らないので一旦除去(詳細調べてない)。全体からすると数%程度
  • scalacOptionsで "-doc-source-url" の指定が変わったのか、そのままだとdoc生成が動かない
  • case classのunapplyの仕様が変わっていてcase classからGenやCogen生成する用のメソッドの型が合わない