Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scala-Matsuri-2023.pdf

 Scala-Matsuri-2023.pdf

kenji yoshida

April 16, 2023
Tweet

More Decks by kenji yoshida

Other Decks in Programming

Transcript

  1. Scalafix
    and
    Wartremover
    2023
    ScalaMatsuri 2023
    2023-04-16
    1 / 16

    View Slide

  2. twitter @xuwei_k
    github @xuwei-k
    blog https://xuwei-k.hatenablog.com
    2 / 16

    View Slide

  3. 2020: Scalafix
    やWartremover
    の独自ルール
    を仕事で活用する
    2022: Wartremover
    のScala 3
    対応
    3 / 16

    View Slide

  4. wartremover
    Compiler plugin
    Linter
    TASTy inspector
    でcompile
    時とは別に動か
    す方法増やした
    原理上、全ての型情報を扱えるので、何でも正確
    に判断できる
    ここ数年ほとんど@xuwei-k
    しかコミットしてな

    4 / 16

    View Slide

  5. wartremover
    Scala 2
    と3
    で全く別のコードを書く必要がある
    デメリット
    SemanticDB
    の生成が遅いので、それを考慮する
    とSemanticRule
    よりwartremover
    の方が実行
    速い?
    型情報扱わないなら使うべきではない
    言い換えるとscalafix
    のSyntacticRule
    で良いなら必要な

    5 / 16

    View Slide

  6. 残してあるがscalafix

    SyntacticRule
    で十分な例
    AsInstanceOf, IsInstanceOf, Throw,
    Var, While, Return, Null,
    ExplicitImplicitTypes,
    DefaultArguments
    6 / 16

    View Slide

  7. scalafix
    SyntacticRule
    とSemanticRule
    で実行できる
    ことや、実行速度が異なる
    @xuwei-k
    はscalafix
    自体のコミッターではな

    稀にpull req
    する程度
    自作でOSS
    のrule
    多数公開してる
    この発表の2023-04-16
    時点で75

    https://github.com/xuwei-k/scalafix-rules
    7 / 16

    View Slide

  8. scalafix
    Linter
    にもなるし、書き換えも出来る
    SyntacticRule
    はとても速い
    rule
    実行するたびにcompile
    やり直さなくてよ

    wartremover
    でもScala 3
    なら同様
    8 / 16

    View Slide

  9. 近況
    本当に毎日のレベルで仕事かOSS
    でscalafix

    いてる(
    今までの合計数百)
    scalafix
    とwartremover
    それぞれ長所も短所
    あるので両方使ってる
    9 / 16

    View Slide

  10. 近況
    wartremover
    のScala 3
    対応はほぼ終わった
    wartremover
    もscalafix
    も独自rule
    色々足し

    scala-js
    でscalafix
    作るためのサイト作った
    ことにより大幅にscalafix
    書きやすくなった
    10 / 16

    View Slide

  11. https://xuwei-k.github.io/scalameta-ast/
    日本語blog
    Scala
    コードを入力すると、scala-js

    scalameta
    で変換の後のAST
    表示してくれる
    かなり細かく機能つけた
    11 / 16

    View Slide

  12. https://xuwei-k.github.io/scalameta-ast/
    dialect
    選択
    SyntacticRule
    、SemanticRule
    の雛形生成
    Rule
    の雛形においての細かい設定
    package
    、rule
    名、import style
    12 / 16

    View Slide

  13. https://xuwei-k.github.io/scalameta-ast/
    input
    とoutput
    両方をscalafmt
    でformat
    js
    で動かすためにscalafmt
    独自fork
    していて面倒
    scalafmt
    の設定も自由に可能
    browser
    のlocal strage
    に前回の状態保存
    scalameta
    のversion
    選択可能
    13 / 16

    View Slide

  14. wartremover
    の近況
    wartremover
    のsbt plugin
    にscalafix
    のよ
    うなinput task
    追加した
    Scala 3
    で独自にunion type
    のleast upper
    bound
    を計算する仕組みを作った
    14 / 16

    View Slide

  15. Live Coding

    既存のrule
    説明
    15 / 16

    View Slide

  16. おわり
    16 / 16

    View Slide