散々tweetしているし、少し前にblogに書きましたが、
それを正式に本体に入れてリリースしました。という話
続きを読む概要や結論を先に書いておくと、適切にプロファイルを取って、適切にボトルネック箇所を見つけて対処しましょう。 という話になるのですが、大まかな概要というか、結果的に使った方法を書くと
といった感じです。タイトルに、
続きを読む1週間前のScalaMatsuriで発表 し、色々と話をしたわけですが、それから数日経ってScala 3対応版のwartremoverリリースして、さらに色々と試行錯誤していたら、以下のようなことに気が付き、
あっ、よく考えたら、Scala 3のlibrary側のQuotes使ったwartremoverでのlinter、tasty inspectorのinterfaceもそのままそれみたいだから、これそのまま再利用出来るのでは???
— Kenji Yoshida (@xuwei_k) March 24, 2022
(compileとは別の任意のタイミングで .tasty ファイルに対してlinter実行が出来るのでは???)https://t.co/lUx65cX94U
やってみたら出来ました、という話。ScalaMatsuriの発表の最後の方で言及していたTASTyの話ですね。その時はこれに全く気がついていなかった。
続きを読むCompiler Plugin難しい
Scala 3のmatch typeで何かのparserでも書くか?と思ったけど、コンパイル時にリテラルのStringを、型情報というか分解した場合の値情報?を、保ったままの分解が単純には出来そうにはないというか…
— Kenji Yoshida (@xuwei_k) February 28, 2021
あるいは一旦CharのHListにしたいんだけど、何か方法あるのかな
https://t.co/sNupBRy3rV
— Kenji Yoshida (@xuwei_k) 2022年2月28日
type Substringが増えてるからいける…?
できました。
続きを読むアイデアというか初期実装は、1年近く前に遡るのですが、それをしっかり作り直して整理してリリースしました。
https://github.com/xuwei-k/unused-code
まだまだ追加したい機能や改善点などありますが、初期versionでも、結構しっかり作ったつもりなので(?)割と既に実用的なはずなので、試してみてのフィードバックお待ちしています。
続きを読むscalafixのSyntacticRuleで、project内でグローバルな未使用コード検出君(class, trait, object, method)を作っている。
— Kenji Yoshida (@xuwei_k) March 18, 2021
大まかな原理として、すべてのNameを集計、保存しておいて、1箇所しか出現しないものを検出(多少その後特殊処理する)、という力技で、まぁまぁ実用的なものが出来つつある