scalafmtやscalafix適用結果をGitHubのpull reqで自動でsuggestする

一言でいうとreviewdogの紹介をするだけなのですが、すごくタイミングよく罠にハマった?ので、それの暫定的な回避も書いておきます。

sbtのprojectでpull requestで変更された依存ライブラリの一覧を出す

少し前に、以下のようなものを作りましたが xuwei-k.hatenablog.com github.com それと似たような発想で 「このpull reqで変わったライブラリは何か?」 のdiffを出す仕組みを作りました、という話。 ここでのポイントは 「間接的に依存してるjarも含むdiff…

sbtで特定のprojectを含めた依存project全体に対してtask実行する

昔似たような違うものを使ったことがありますが、違うものです

scala3profileというsbt/compiler pluginをリリースした

github.com

CIで増減した警告を教えてくれるsbt pluginを作りたい話

モチベーションなど 自分が知る限り、sbt使ったbuildで、CIで増えた(あるいは減った)警告を出してくれる簡単な仕組みは存在しない もし知っていたら、作る必要なくなるので教えてください reviewdogは使ってる https://github.com/reviewdog/reviewdog revie…

scalafixのrule書くときのためにscalametaのAST変換ツールを作った

https://github.com/xuwei-k/scalameta-ast https://xuwei-k.github.io/scalameta-ast/

sbtの独自Configurationを使ったbuild速度の改善

突然ですが、皆さんsbtのchrome trace吐き出す機能使ってますか?大抵の人は使ってないというか、存在すら知らないと思います。 https://github.com/sbt/sbt/pull/4576 以前以下のあたりでも多少話を出しました https://xuwei-k.hatenablog.com/entry/2022/0…

自作scalafix ruleの説明その2

以前書いてから増えた分の解説。 xuwei-k.hatenablog.com 以前と同様、特に記述がないものは全部SyntacticRuleなので、100%正しく書き換えや警告出せる保証がないです。

Scala 3でJavaのアノテーション継承したclassが定義できない問題の対策

github.com

Scalaにおけるunboxing

今更な話題なのですが、解説したくなったので解説を書いておきます。

Scala 3のscala.deriving.Mirrorの実装詳細は?生成コードは?SumOfとProductOfの違いは?Scala 2の場合は?調べてみました!

少しふざけたタイトルをつけましたが、以下、基本的に超真面目なマニアックな話をします。 Scala 3から、ある程度の定型的なtype classのinstance生成時に低レベルなmacroを書かずに便利に綺麗に書けるMirrorという仕組みが標準で追加されています。 docs.sc…

wartremoverのsbt pluginにTASTy inspector経由で実行する機能入れた

散々tweetしているし、少し前にblogに書きましたが、 xuwei-k.hatenablog.com それを正式に本体に入れてリリースしました。という話 github.com

Scala 3のinlineによるcompile時間増大に対処する方法

概要や結論を先に書いておくと、適切にプロファイルを取って、適切にボトルネック箇所を見つけて対処しましょう。 という話になるのですが、大まかな概要というか、結果的に使った方法を書くと sbtのTask毎の時間を記録する機能を使う Scala 3 compilerのロ…

WartRemoverをScala 3のTASTy inspector経由で動かす

1週間前のScalaMatsuriで発表 し、色々と話をしたわけですが、それから数日経ってScala 3対応版のwartremoverリリースして、さらに色々と試行錯誤していたら、以下のようなことに気が付き、 あっ、よく考えたら、Scala 3のlibrary側のQuotes使ったwartremove…

WartremoverのScala 3対応の発表をした

Compiler Plugin難しい xuwei-k.github.io

Scala 3移行の発表をした

speakerdeck.com 発表中にも言ったし、以前色々tweetしていたりもするんですが、本業での方が、コード量多かったり、時期がはやくてcompilerやlibraryが安定してなかったりで、色々辛かったりその分面白い話もあったんですが、とにかく具体的なそれなりな大…

Scala 3のmatch typeでcompile timeにString literalをparseして評価する

Scala 3のmatch typeで何かのparserでも書くか?と思ったけど、コンパイル時にリテラルのStringを、型情報というか分解した場合の値情報?を、保ったままの分解が単純には出来そうにはないというか…あるいは一旦CharのHListにしたいんだけど、何か方法あるの…

unused-codeという未使用コードの検知、削除のsbt-plugin & scalafix rule作ってリリースした

アイデアというか初期実装は、1年近く前に遡るのですが、それをしっかり作り直して整理してリリースしました。 https://github.com/xuwei-k/unused-code まだまだ追加したい機能や改善点などありますが、初期versionでも、結構しっかり作ったつもりなので(?)…

scalafixのruleをまとめてライブラリにしてpublishした

本体にドキュメント書いてないので、とりあえず現時点のruleについてひたすら説明書いておきます https://github.com/xuwei-k/scalafix-rules

自分が出したpull reqがconflictしていたら通知するGitHub Action君

というのを作った。 仕事で自分が関わっている特定のリポジトリでは、以前からそういうの作ってbotがpull reqに直接コメントするようにしている。(自分のものだけではなく、そのリポジトリのpull req全てに対して) そうではなく、自分が出したOSS含めた任意…

2021年の最新技術を使った場合のScalaのコンパイル速度

ここでいう最新技術とは以下です。 JDK8や11よりも、17の方が速い? M1 Macが速い?(2021年最新のM1 Maxではなく、2020のMacbook Pro 13インチのM1です・・・。M1 Max欲しい!!! => 最後に追記したぞ) Scala 2より3の方が速い? 自分の最近の経験上、それ…

Scala 2のJDK17対応状況

最新情報は以下の公式の情報をご覧ください。で終わるのですが、これ書いている2021年9月現在の情報を簡単にまとめておきます(ただのtweet貼り付け) https://github.com/scala/bug/issues?q=label%3Ajdk17 公式のJDK17関連のbug https://docs.scala-lang.org…

sbtでtaskAllという独自コマンドを作った

sbt

仕事でsbtのsub projectが100個以上あるので、こういう指定だけでもダルいので

Scala 3でMatchableに推論されたら警告かエラーにするcompiler plugin

scala.Matchable自体の解説はしませんが、AnyValやAnyやAnyRefや Product with Serializable と同様に、それに推論されたら、わりとミスなことが多い気がするので、作ってみました。

MockitoのwhenとScala 3の型推論

Scala 2ではcompile errorなのにScala 3では実行時にClassCastExceptionやその他変なエラーになる。 なるほど・・・Scala 3のcompilerはあまり悪くない気がするから、よけいに辛い・・・

Scala 3のmacroによる型安全かつ実行時にリフレクションにならないClose型クラス(ローンパターン)の実装

というのがおそらく作成できたけれど、もっと書き方改善可能なところあったら教えて下さい。 このくらいすでに、Scala 3でも前例が存在する気もするけど、とりあえず(あまり前例は調査はせずに)自作しました。 テスト書いてあるとおり、指定されたcloseメソ…

Scala 3でcase classのcompanionがFunctionNを継承しなくなっていて互換がないことへの対策

数日前の記事と、対になる(?)もの xuwei-k.hatenablog.com

Scala 2と3でcase classのコンパニオンのunapply(Tupleへの変換)が互換がないことの解決案

まずは以下をご覧ください github.com

2021年5月時点のScala 3.0.0と2.13.5のコンパイル速度比較

結論: Scala 3.0.0はScala 2.13.5の半分以下(4割)の時間でコンパイル終わる!!! (scalazでのベンチマーク) 半年前のDotty 0.27の時点でやった方法とだいたい同じ方法で計測し直した結果です。

sbt 1.4以降でgraphviz使ったsvgなどのdependency graphの出力

sbt

sbt 1.4から標準にdependency graphが取り込まれた https://github.com/sbt/sbt/pull/5883 https://github.com/sbt/sbt/pull/5880 標準で(拡張子的にはhtmlだが)svgで出力するやつがある https://github.com/sbt/sbt/blob/7969a155b0978a925d3bd4aeefcb2ace1…