scala

ScalaMatsuri 2023でscalafixなどの発表した

https://xuwei-k.github.io/slides/matsuri-2023/#1 speakerdeck.com blogやtwitterで大体書いてるようなことをまとめただけなので、特に追記することはないかなぁ。

wartremoverのsbt pluginにscalafixのようなinput task追加した

「scalafixのような」とは build.sbt を編集しなくても、input taskで実行するruleを任意の数、動的に指定可能 ローカルのfileのpathや、urlも指定可能 動的に .scala fileをcompileして、それを実行してくれる url指定したらそれをダウンロードしてくる url…

Scala 3で独自にunion typeのleast upper boundを計算する仕組みを作った

Scala 3では、以下のように | というunion type?or type?という新しい仕様が追加されました。 (仕様というか、少なくとも以下の公式ドキュメントではunionと呼んでるが、Scala 3のquoteのAPI内部ではOrTypeでややこしい) https://docs.scala-lang.org/scal…

sbtかつGitHub Actionsでログの表示をいい感じにするplugin

他人が作ったものを紹介するだけの記事。 以下のtweetで大体は言い尽くしてあるのですが、これはとても良さがあるので、あえて、ほぼtweet貼り付けるだけの記事書いておくことにしました。 github.com warn

未使用なprotobufのmessageなどを検知するsbt pluginを作った

github.com run sbt unusedProtoWarn

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

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

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

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

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…

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の時点でやった方法とだいたい同じ方法で計測し直した結果です。