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