Scala-Matsuri-2023.pdf
by
kenji yoshida
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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