Scala-Matsuri-2023.pdf
by
kenji yoshida
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Scalafix and Wartremover 2023 ScalaMatsuri 2023 2023-04-16 1 / 16
Slide 2
Slide 2 text
twitter @xuwei_k github @xuwei-k blog https://xuwei-k.hatenablog.com 2 / 16
Slide 3
Slide 3 text
2020: Scalafix やWartremover の独自ルール を仕事で活用する 2022: Wartremover のScala 3 対応 3 / 16
Slide 4
Slide 4 text
wartremover Compiler plugin Linter TASTy inspector でcompile 時とは別に動か す方法増やした 原理上、全ての型情報を扱えるので、何でも正確 に判断できる ここ数年ほとんど@xuwei-k しかコミットしてな い 4 / 16
Slide 5
Slide 5 text
wartremover Scala 2 と3 で全く別のコードを書く必要がある デメリット SemanticDB の生成が遅いので、それを考慮する とSemanticRule よりwartremover の方が実行 速い? 型情報扱わないなら使うべきではない 言い換えるとscalafix のSyntacticRule で良いなら必要な い 5 / 16
Slide 6
Slide 6 text
残してあるがscalafix の SyntacticRule で十分な例 AsInstanceOf, IsInstanceOf, Throw, Var, While, Return, Null, ExplicitImplicitTypes, DefaultArguments 6 / 16
Slide 7
Slide 7 text
scalafix SyntacticRule とSemanticRule で実行できる ことや、実行速度が異なる @xuwei-k はscalafix 自体のコミッターではな い 稀にpull req する程度 自作でOSS のrule 多数公開してる この発表の2023-04-16 時点で75 個 https://github.com/xuwei-k/scalafix-rules 7 / 16
Slide 8
Slide 8 text
scalafix Linter にもなるし、書き換えも出来る SyntacticRule はとても速い rule 実行するたびにcompile やり直さなくてよ い wartremover でもScala 3 なら同様 8 / 16
Slide 9
Slide 9 text
近況 本当に毎日のレベルで仕事かOSS でscalafix 書 いてる( 今までの合計数百) scalafix とwartremover それぞれ長所も短所 あるので両方使ってる 9 / 16
Slide 10
Slide 10 text
近況 wartremover のScala 3 対応はほぼ終わった wartremover もscalafix も独自rule 色々足し た scala-js でscalafix 作るためのサイト作った ことにより大幅にscalafix 書きやすくなった 10 / 16
Slide 11
Slide 11 text
https://xuwei-k.github.io/scalameta-ast/ 日本語blog Scala コードを入力すると、scala-js と scalameta で変換の後のAST 表示してくれる かなり細かく機能つけた 11 / 16
Slide 12
Slide 12 text
https://xuwei-k.github.io/scalameta-ast/ dialect 選択 SyntacticRule 、SemanticRule の雛形生成 Rule の雛形においての細かい設定 package 、rule 名、import style 12 / 16
Slide 13
Slide 13 text
https://xuwei-k.github.io/scalameta-ast/ input とoutput 両方をscalafmt でformat js で動かすためにscalafmt 独自fork していて面倒 scalafmt の設定も自由に可能 browser のlocal strage に前回の状態保存 scalameta のversion 選択可能 13 / 16
Slide 14
Slide 14 text
wartremover の近況 wartremover のsbt plugin にscalafix のよ うなinput task 追加した Scala 3 で独自にunion type のleast upper bound を計算する仕組みを作った 14 / 16
Slide 15
Slide 15 text
Live Coding や 既存のrule 説明 15 / 16
Slide 16
Slide 16 text
おわり 16 / 16