sbt 1.0のマイルストーン対応した感想

0
Kenji Yoshida @xuwei_k

sbt 1.0.0-M5試して、テスト時にデフォルトで微妙なdebugログが増えてたり、plugin側から色ついた文字列出力しようとした場合に何故か色がつかなかったり、sbtのコンソール抜けた場合にjline関連で?変な状態になる(打った文字表示されない)などの症状を観測している

2017-05-27 16:01:21
Kenji Yoshida @xuwei_k

自分の plugin を sbt 1.0 対応させようとして、コンパイルはできたけど、リリースしようとしたらsbt-release pluginで定義した一部のstepが飛ばされてる?のか順番が狂った?のか、すごく不可解な動作して原因がよくわからなくて一旦諦めた、謎ぃ・・・

2017-05-27 18:13:27
∃ugene -Yokota 🥙 @eed3si9n

sbt 1.0.0-M6 2nd beta release is available ft. features contributed by Scala Center and other bug fixes #scala - scala-sbt.org/1.0/docs/sbt-1…

2017-06-01 00:50:23
Kenji Yoshida @xuwei_k

みんなもっとsbt 1.0のマイルストーン試して地雷踏んで開発に貢献しよう (2つほど問題?を見つけた) github.com/sbt/sbt/issues… github.com/sbt/sbt/issues…

2017-06-03 17:45:24
Kenji Yoshida @xuwei_k

sbt 1.0 の普及が少しでもスムーズにいくようにするためにsbt organizationに置いてあるsbt pluginに片っ端からpull reqするお仕事

2017-06-04 13:18:47
Kenji Yoshida @xuwei_k

全部小さいというか難しくはない(?)修正だけど、直近24時間で25個くらいpull req出したっぽい(sbt以外も含む)

2017-06-04 13:22:49
Kenji Yoshida @xuwei_k

やはりこれ動かないのか。なんで動かないんだろう github.com/xerial/sbt-son… あれって任意のコマンド実行できるわけじゃないのか?制約がよくわからない

2017-06-06 00:58:42
Kenji Yoshida @xuwei_k

あと releaseStepCommand(";foo;bar") とセミコロンでつなげると、releaseProcess全体の順番が狂う(逆から実行される?)みたいなだいぶ不可解なバグり方するっぽい?

2017-06-06 01:39:21
Kenji Yoshida @xuwei_k

sbt-scalaprops plugin 0.2.1 released. support #sbt 1.0.0-M6 🎉 github.com/scalaprops/sbt…

2017-06-06 02:16:45
Kenji Yoshida @xuwei_k

sbt-class-diagram plugin 0.2.1 released. support #sbt 1.0.0-M6 🎉 github.com/xuwei-k/sbt-cl…

2017-06-06 02:55:25
Kenji Yoshida @xuwei_k

sbt 1.0、valueマクロが無名関数内で呼ばれるとエラーにするという変更入ってる(無名関数内だろうがあのマクロの構造上 必ず呼ばれるため、勘違いしたコード書かないようにするための親切心?) のだけど、気持ちはわからなくもないけど、わかっててやってる場合は単に書き換え面倒…

2017-06-06 12:35:48
Kenji Yoshida @xuwei_k

せめてエラーではなくて、デフォルトは警告でいいのでは感。 それとも単なる親切心ではなく、実装の都合上エラーにした方が内部のコードがシンプルになる、みたいな事情でもあったのだろうか(pull reqの議論まだちゃんと読んでない) github.com/sbt/sbt/pull/3…

2017-06-06 12:40:11
Kenji Yoshida @xuwei_k

すでに参照透明でない内部DSLなマクロに対して、独自のチェック追加することによりさらに参照透明でなくなってる?の、全体としてわかりやするなってるのか、わかりにくくなってるのか謎ぃ。 (ここでいう参照透明は val a = b.value で、aとb.valueが置き換え不可という

2017-06-06 12:45:08
Kenji Yoshida @xuwei_k

そもそも .value マクロは、0.12の頃と比べて、一度しか使わないなら(別に2度以上でもいいけど)あまり意味のない変数束縛しなくて済む、というのが利点なはず?だけど、その利点を直接的に殺してるというか

2017-06-06 21:16:41
∃ugene 🥙yokot∀ @eed3si9n_ja

@xuwei_k その feedback を GitHub issue か PR へのコメントでもらえると嬉しいです

2017-06-06 21:18:17
Kenji Yoshida @xuwei_k

なるほど、sbt-doge統合されたのは知ってたけど、crossScalaVersions指定にないやつで++しても無視する、というように++の動作変わってたのか。 というのに某sbt pluginを対応させようとしてて気がついた github.com/sbt/sbt/pull/2…

2017-06-06 22:20:51
Kenji Yoshida @xuwei_k

あとは sbt 1.0 では sbinary の代わりに sjson-new 使う必要があるけど、使い方(型クラスの定義方法)がよくわかってない、という問題(これからコード読む)

2017-06-06 22:42:50
Kenji Yoshida @xuwei_k

argonautやplay-jsonくらいなレベルでcase classのインスタンスの定義が簡単に(できるだけ型書かずに)定義する方法が、多少探した程度では見つからなかったのだけど、もしかして(まだ)方法ないのか? sjson-new-shapelessでも作るか?(ぇ

2017-06-06 22:54:53
Kenji Yoshida @xuwei_k

なるほどー、延々と受け継がれていたというか再発明されていた、のに今気がついた github.com/argonaut-io/ar… github.com/eed3si9n/sjson… どうせならmapとかも入れておいて欲しかった(pull reqした

2017-06-07 00:34:13
Kenji Yoshida @xuwei_k

sbt 1.0 のシリアライザsjson-newで決定なら、finalでたらsjson-newもバイナリ互換壊さないということになる(?)けど、かるく見た感じ細かい機能足りてなかったり使い勝手微妙な部分ありそうだから、互換壊れ得る変更今のうちにpull req出しまくるべきでは

2017-06-07 00:37:58
Kenji Yoshida @xuwei_k

github.com/eed3si9n/sjson… このメソッドだけだと型を必要以上に書かないといけなくて辛いので、shapelessかplay-jsonのマクロみたいに徹底的に頑張るか、argonautやplayみたいに23個メソッド生成をですね(なぜかTupleだけはあるのか)

2017-06-07 00:51:48
Kenji Yoshida @xuwei_k

そもそも人間が読む可能性とか、互換壊れていい場合とか考えるとmapにシリアライズする必要すらない場合もあり(つまりarrayでよい場合。key名考えるだけ面倒) sbinaryは asProduct5 とかそういう型も一切書かなくて良く、マクロもリフレクションも使ってないのがあり

2017-06-07 00:58:32
Kenji Yoshida @xuwei_k

あー contraband で生成してるから少なくとも現状のsbtでは冗長な書き方のみでも問題にならないという話か。いやー、ちょっとしたものに必ず contraband 使って書くのも微妙だし、やっぱり手軽に定義出来るやつ欲しいよな github.com/sbt/contraband…

2017-06-07 12:17:51