2009-10-21 264 views
46

是否有任何工具可以執行靜態分析Scala代碼,類似於FindBugs和PMD for Java或Splint for C/C++?我知道FindBugs適用於編譯Java產生的字節碼,所以我很好奇它如何在Scala上工作。是否有任何工具可以執行Scala代碼的靜態分析?

谷歌搜索(截至2009年10月27日)顯示非常少。

谷歌搜索(截至2010年2月1日)揭示了這個問題。

+1

什麼樣的錯誤,超越,編譯器已經在尋找的人? – 2009-10-21 06:01:48

+1

不是真的 - 編譯器可以找到,我也可以輕鬆找到。我正在尋找的是「死代碼」,不必要的初始化變量等。更多靜態分析請看http://findbugs.sourceforge.net/ – 2009-10-21 06:05:10

+1

祝您在搜索中運氣好,但FindBugs的分析器代表了很多工作,Scala可能太年輕了。 – 2009-10-21 06:44:48

回答

20

FindBugs分析JVM字節代碼,無論生成它們的工具如何。我試着用FindBugs來檢查由Scala生成的.class文件。不幸的是,FindBugs產生了很多警告,即使對於微不足道的Scala程序也是如此。

+1

由於專注於Java SDK特定的事情,它不太適合Scala,儘管大量的誤報(全部在IMO中) – monkjack 2014-08-04 10:54:47

-2

我對斯卡拉了解不多,但是如果兼容Java,Klocwork的Solo產品可能會有效。您可以在這裏找到它Klocwork Solo

+2

爲什麼這是公認的答案?我無法找到Klocwork'解決'您運行Findbugs的問題的任何證據......? – p3t0r 2010-02-20 20:27:20

7

Findbugs和其他基於字節碼的工具都可以工作,因爲他們會在代碼中發現錯誤。不幸的是,基於字節碼的方法已經根據javac編譯器的輸出進行了調整,這意味着它們可能會產生非常高的誤報率,並且會錯過基本問題,因爲Scala將生成與javac編譯器不同的成語。

17

現在有Scalastyle它執行Checkstyle爲Java所做的工作。這不僅包括格式化檢查,還包括對已知錯誤來源的檢查,比如實現hashCode()的類,但不等於。

目前大約有40張支票,但我們一直在添加它們。請參閱www.scalastyle.org

8

這裏是一個更新的答案截至8月2014年一些旨在或使用Scala工作。個人而言,我認爲JVM或Java結果會帶來太多的誤報,或者檢查主要針對Java特定的類。例如,因爲在Scala中我們不傾向於使用Java集合,所以不需要所有基於findbugs集合的檢查。另一個例子是檢查使用Scala中無關的靜態字段。

相關問題