scalafixを使ってclass名とfile名が異なっているものを自動修正したり警告を出す

というのを作ったので貼っておきます。 細かいところが雑ですが・・・。 Javaだとpublicなclassだと強制的に揃えないといけないですが、良くも悪くもScalaだと自由なので、揃えたい場合には、わざわざこういうのを作らないといけなくて不便。 file名ではなく…

scala-stewardの使い方や動かし方の方法一覧

今までいくつかblog書いたが、どういうときに、どの方法使えば良いのか?が明らかにわかりにくいと思ったので、現状のまとめ あと https://tarao.hatenablog.com/entry/scala-renovate scala-stewardを自分でホストするのは面倒だし, かと言ってGitHub Actio…

scala-stewardを独自に作ったGitHub App(bot)で動かす方法

結局、デフォルトのGITHUB_TOKENで別のGitHub Actions起動できない問題があるから使いづらい(実質、他のCI併用する場合じゃないと有用じゃない?)けど、これhttps://t.co/uo7COyP2xo本体に取り込まれてリリースされてた— Kenji Yoshida (@xuwei_k) 2020年11…

今までありがとうTravis CI、さよならTravis CI

しっかり調査してないですが、こういったCIサービスがほぼ存在しない時期にほぼほぼ最初に登場して、一時期明らかにデファクトスタンダードだったと思うので、昔からOSS活動している人ほど、とても多く利用してお世話になっていたと思うので、そういう人であ…

2020年11月現在のScala 3(Dotty)とScala 2のコンパイル速度比較

最初に結論 Scala 2.13.3 と 3.0.0-M2-bin-20201031-1ab76c1-NIGHTLY をscalaz最新版でベンチマークしたところ、 Scala 2.13.3は平均約57秒、Scala 3の最新版は平均約31秒で 約45%短縮!!! めでたいなぁ。 他の条件で計測した場合にどうなるのかわからない…

sbtのremote cacheのidにcommitの日付を入れる

sbt

という小ネタ。 sbt 1.4.1時点のデフォルトでは、単にgitのcommitのhashのみだが、日付が入っていたほうが、例えばローカルのキャッシュを手動で削除したりする際などに便利そうなので。 https://github.com/sbt/sbt/blob/4a2aaabb9b41a9e016e/main/src/main…

sbt 1.4のremote cacheを試してbug報告やpull reqした記録

だいぶ色々やっているので、とりあえず雑にまとめておく

sbt 1.4からのpipeline機能を試したら3割compile時間短縮された

3割というのは、もちろんprojectの構成だったり、計測方法やその他色々によるわけですが、とにかく自分が計測した場合には3割短縮されました。114秒が80秒になりました。

GitHub Actionsとscala-stewardを組み合わせてtokenやbot accountの用意すらせずにpull reqを送ってもらう方法

scala-stewardという、全自動でScala projectのlibrary update pull requestを送ってくれるやつが数年前からある https://github.com/scala-steward-org/scala-steward しばらくは、OSSなpublicなものは、普通、公式のリポジトリ一覧が書いてあるファイルに…

JDK14のRecordsに対するshapeless.Generic自動生成マクロを書いた

TODO: あとでLabelledGenericとかその他色々も作りたい LabelledGenericは実装した 実装が雑なので細かい部分バグがあるかもしれない ライブラリにしてpublishする・・・? リリースした

DottyのMatch Typeを使ってコンパイル時にFibonacciを計算する

見た目通りで、あまり難しくないので、特に説明することがない。 macroさえ使わずに書けますね。 shapelessにあったような色々な機能が標準で装備されています。 みなさん、Match Type使ってもっと複雑な色々な計算書いてみましょう。 ちなみに、この単純な…

Scala 2.13.4からのTASTy読み取り機能

というものが追加されるらしいです。

Scala 2.13で-Xsource:3を指定すると変更される挙動一覧

Scalaコンパイラには、ある程度最近のversionから -Xsource:バージョン という、少し将来のversionの挙動に近づけるオプションがあります。 Scala 2.13.3時点で -Xsource:3 を指定できるわけですが、その場合の挙動の変更一覧を、scala/scalaをgit grepして…

Throwableでtry catchしてしまっているのをNonFatalに書き換えるscalafixのrule

この程度の単純なものならば、正規表現の置換だけで可能な気がしますが、書いたので置いておきます。 NonFatalのimport加えるあたりは、そういう低レベルなやつでやると、適切な位置に追加するのは多少面倒かもしれないですね。 細かいところが多少雑なので…

sbt 1.3.0以降 % Test でライブラリ追加してもcompileの依存が変わる場合がある件

以下再現コード

ScalazをDotty対応した知見

少し前に、こっそりと、かなりひさしぶりな(互換壊す)メジャーリリース?となる、7.3.0 finalをリリースしたけど全然リリースノート書いたり宣伝もしていないScalazですが、 もう最近自分しか開発していない感があり、猫のほうが明らかに流行っています。 が…

JDK11でGraalを有効にするとScalaのコンパイルが13%くらい速くなった

Graalについて全然詳しくないので、Graal自体の説明はしません、というかできませんが、JDK10以降で -XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler というオプションを付与すると有効にできるらしいですね。 というわけで、以下のような条件で計…

Scalaのcompiler pluginをCrossVersion.fullにするかCrossVersion.binaryにするか

昨日のwartremoverのやつの続き、というか、Scalaのcompiler pluginに関する別の話。 いきなり雑に説明に入りますが

wartremover-contribをどうやって依存させるかという問題

以前こういうのを書きましたが xuwei-k.hatenablog.com

play-wsのstandalone版に自動書き換えするscalafixのruleを書いた

https://t.co/2G7DXbQ369play-ws-#scalafix 0.1.0 released.non standalone play-ws => play-ws-standalone 😃 pic.twitter.com/Y4JTqiIMRQ— Kenji Yoshida (@xuwei_k) 2020年3月25日 https://github.com/xuwei-k/play-ws-scalafix github.com 歴史とともに、…

CircleCIにおけるsbtプロジェクトの依存ライブラリの最適なキャッシュ方法の考察

CircleCIにおけるキャッシュの仕組みというか仕様は、他のCIサービスと比べると、少し変わった特徴がある気がします。 といっても、自分は他にはTravisCIくらいしか詳しくないので、実はCircleCIのように色々工夫している方がむしろ最近は主流な可能性もあり…

sbtにおけるテストの並列実行の設定詳細解説

いきなり本題というか、一番言いたいことを書くと、まず テストの fork の設定によってぜんぜん違う。 という点があまり知られていない気がします。 *1 というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時…

CircleCI上でsbtのインクリメンタルコンパイラのキャッシュが効かなくて再コンパイルされる問題

結論としては以下のissueに大体全部書いてあります。 Incremental compilation inside docker container broken since SBT 1.1.0 · Issue #4168 · sbt/sbt · GitHub 依存ライブラリのjarのキャッシュではなく、あくまでインクリメンタルコンパイラのキャッシ…

wartremoverを使ってscalapbのapplyのデフォルト引数を禁止する

というのを作りました。 scalapbというのは、scala向けのprotocol buffersやgRPCのためのライブラリですが、protobufのmessageに対応するcase classのコンパニオンオブジェクトのapplyには、すべて(protobuf上のデフォルト値と同様の)デフォルト引数が設定さ…

scalapropsをdotty対応してみた知見

まだ継続してメンテナンスするかどうかわからないけど、以下のようなニュースが飛び込んで来たので、そろそろ試すか、と試した結果をメモ。 結果としては数十分から数時間書き換えた程度で、それなりに動きました。 最初scalazをやろうかとおもったけど、kin…

sbtで依存しているprojectのみにcleanなどの特定のタスクを実行する

以下のような質問を某所で受けたので 書きました gist.github.com 既にあるとか、もっといい感じに書ける、みたいなのがあればお知らせください。 ちなみに、デフォルトでは単体のprojectしかcleanしないのは、完全にsbt的には意図した挙動のはずです。 デフ…

sbtですべてのsub projectの特定のtaskを直列に実行するtaskを自動でつくる

要点をまとめると TaskではなくCommandでやってしまうなら少し簡単だが、(stateなどの他のkeyに依存して)taskからtaskを生成するには多少コツがいる(Def.taskDynを使う) なおかつ、sub projectの列挙を全自動でやりつつtaskを生成するのが多少コツがいる( Pr…

mockitoとscalatestについて

以下の投稿について、編集リクエストするレベルではないし、コメントするにも論点が多すぎてすごく長くなるため、別記事として自分のblogに書くことにしました qiita.com

scalafixのSymbol literal自動書き換えruleを作った

github.com

GuiceのTypeLiteralをScalaのmacroを使って生成する

ウォ〜〜scalaでguice使う時に injector.getInstance(Key.get(new TypeLiteral[Foo[Bar]]{}))って書くの面倒くさいにゃんよ〜〜!! 単に injector.instanceOf[Foo[Bar]]って書けて欲しい〜〜!!— にゃおきゃっと (@nyaocat) July 29, 2019