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
Quick introduction to scalafix Scala福岡 2019
Slide 2
Slide 2 text
About me - 谷口 力斗 / @tanishiking - 株式会社はてな - Scala / TypeScript / Go / Perl - 高校生までは福岡に住んでました
Slide 3
Slide 3 text
Scalafix - https://scalacenter.github.io/scalafix/ - Refactoring and linting tool for Scala - scala.meta - Builtin Rules / Suppressing Rules - Linter - 独自ルールを作ろう
Slide 4
Slide 4 text
Scala.meta
Slide 5
Slide 5 text
Scala.meta - https://scalameta.org/ - Scala compiler とは独立した Scala プログラム 解析のためのライブラリ - Syntactic API - Semantic API
Slide 6
Slide 6 text
Scala.meta - Syntactic API - Scalaプログラムをパースしトークン列や構文木 を返すAPI println("function(argument)".parse[Stat].get.struct ure) // Term.Apply(Term.Name("function"), List(Term.Name("argument")))
Slide 7
Slide 7 text
Scala.meta - Semantic API - 型情報やシンボルの情報を提供するAPI - compiler plugin を使って typer phase の後に SemanticDB を生成 - SemanticDB - protobuf で定められたスキーマに従ってシリ アライズされたバイナリ
Slide 8
Slide 8 text
Builtin Rules / Supressing Rules
Slide 9
Slide 9 text
Builtin Rules - https://scalacenter.github.io/scalafix/docs/rul es/overview.html // .scalafix.conf rules = [ DisableSyntax, RemoveUnused ]
Slide 10
Slide 10 text
Suppressing Rules @SuppressWarnings(Array("all")) def foo = ??? List("", null) // scalafix: ok // scalafix: off foo(null) // scalafix: on
Slide 11
Slide 11 text
Linter
Slide 12
Slide 12 text
Linter - v0.5 から linter としての機能が豊富に - 将来的に metals (scala.meta ベースの Language Server 実装) から scalafix を使った refactoring や lint の提供も
Slide 13
Slide 13 text
Lint (vs wartremover) - (+) Lintに加えて自動修正もできる - (+) syntactic rulesの実行にコンパイルは不要 なので高速 - (+) 独自ルールの実装が容易(wart実装も難しくないけど) - (-) Builtin rule が少ない - (-) scala compiler と比べて SemanticDB から取 得できる情報は制限される
Slide 14
Slide 14 text
独自ルールを 作ろう
Slide 15
Slide 15 text
独自ルールを作ろう https://scalacenter.git hub.io/scalafix/docs/d evelopers/setup.html
Slide 16
Slide 16 text
独自ルールを作ろう - 作ってみた https://github.com/tanishiking/scalafix-check-scaladoc - publicなAPIにscaladocが書かれてなかったら 怒ってくれるルール - golintとかにあるやつ
Slide 17
Slide 17 text
まとめ - scalafix は refactoring ツールとしてだけでなく linter としても使える - scala.metaのAPIを使って簡単に独自ルールが 作れる