Scala コードの静的分析を実行するツールはありますか?[閉まっている]
-
22-09-2019 - |
質問
Java の FindBugs や PMD、C/C++ の Splint のような、Scala コードの静的分析を実行するためのツールはありますか?FindBugs が Java のコンパイルによって生成されたバイトコードで動作することはわかっているので、Scala 上でどのように動作するかに興味があります。
Google 検索 (2009 年 10 月 27 日現在) ではほとんど何もわかりません。
Google 検索 (2010 年 2 月 1 日現在) でこの疑問が明らかになります。
解決
FindBugsのは関係なく、それらを生成したツールの、JVMバイトコードを分析します。私はスカラ座によって生成された.classファイルをチェックするためにFindBugsを使用してみました。残念ながら、FindBugsのは些細なScalaのプログラムのために、多くの警告を生成します。
他のヒント
のCheckstyleは、Javaのためのないこと仕事をしていませんScalastyle
が用意されました。この含むだけでなく、チェックをフォーマットするだけでなく、そのような(ハッシュコードを実装するクラスとしてバグの既知のソースのためにいくつかのチェック)が、等しくない。
があり40個のチェックについては、現在ですが、我々はすべての時間の中でそれらを追加しています。
詳細については、参照 www.scalastyle.orgするます。
その方向に向けていくつかの作業が進行中です。いくつかのリンク:
- https://github.com/alacscala/scala-corpus
- https://github.com/alacscala/alacs
- https://bitbucket.org/jmhofer/findbugs4sbt/wiki/Home
scala メールリストに関するディスカッションもあり、アーカイブも利用可能 ここ.
ここでは、Scala を対象としたもの、または Scala でうまく機能するものに対する、2014 年 8 月時点での更新された回答を示します。
個人的には、JVM または Java のものでは誤検知が多すぎるか、主に Java 固有のクラスを対象としたインスペクションが含まれると思います。たとえば、Scala では Java コレクションを使用する傾向がないため、すべての findbugs コレクション ベースのインスペクションは必要ありません。別の例は、Scala では無関係な静的フィールドの使用に関する検査です。
FindBugsのバイトコード、彼らはあなたのコードの欠陥を見つけるだろうという意味で、動作します基づいている他のツール。 Scalaはjavacコンパイラとは異なるイディオムを生産することになるので、残念ながら、バイトコードベースのアプローチは、彼らは可能性が非常に高い偽陽性率、およびミス基本的な問題を生成するためにある意味、のjavacコンパイラの出力に対して調整されています。
私はCodacy(例えば httpsで多くの楽しみを持っています。 codacy.com/app/hejfelix/Frase/dashboard の)オープンソースプロジェクトのための
SBTプラグインはPMDのためにある検出器CPDをコピー&ペースト。
Scalaのコピーペースト検出器。コピー&ペーストのサブツリー/ ASTの探している、そしてそれについて知らせます。
これは、SBTのためのプラグインの。
私はスカラ座についてあまり知らないが。あなたがそれをここに見つけることができますのKlocworkソロの