Существуют ли какие-либо инструменты для выполнения статического анализа кода Scala?

Существуют ли какие-либо инструменты для выполнения статического анализа кода Scala, похожие на FindBugs и PMD для Java или Splint для C/С++? Я знаю, что FindBugs работает с байт-кодом, созданным с помощью компиляции Java, поэтому мне интересно, как это работает на Scala.

Поиски Google (по состоянию на 27 октября 2009 года) показывают очень мало.

Поиски Google (по состоянию на 01 февраля 2010 года) раскрывают этот вопрос.

Ответ 1

FindBugs анализирует байт-коды JVM, независимо от инструмента, сгенерировавшего их. Я попытался использовать FindBugs для проверки файлов .class, сгенерированных с помощью Scala. К сожалению, FindBugs выпустил множество предупреждений даже для тривиальных программ Scala.

Ответ 2

Теперь существует Scalastyle, который выполняет задание, которое Checkstyle делает для Java. Это включает в себя не только проверки форматирования, но и некоторые проверки известных источников ошибок, например класс, реализующий hashCode(), но не равный.

В настоящее время существует около 40 проверок, но мы добавляем их все время.

Для получения дополнительной информации см. www.scalastyle.org.

Ответ 4

Ниже приведен обновленный ответ на август 2014 года для некоторых, которые нацелены или хорошо работают с Scala.

Лично я думаю, что JVM или Java имеют слишком много ложных срабатываний или имеют проверки, которые нацелены в основном на определенные Java классы. Например, поскольку в Scala мы не склонны использовать сборники Java, все проверки на основе коллекций findbugs не нужны. Другим примером является проверка использования статических полей, которые не имеют отношения к Scala.

Ответ 5

Findbugs и другие инструменты, базирующиеся на байт-кодах, будут работать в том смысле, что они найдут ошибки в вашем коде. К сожалению, подходы, основанные на байт-кодах, были настроены на выход компиляторов javac, что означает, что они, вероятно, будут давать очень высокие ложные положительные коэффициенты и пропустить основные проблемы, потому что Scala будет производить разные идиомы, чем javac-компилятор.

Ответ 8

scala детектор копировальной пасты, основанный на AST. Ищите скопированные поддеревья/АСТ и сообщайте об этом.

Это плагин для sbt.

https://github.com/ajtkulov/scala-cpd

Ответ 9

Я мало что знаю о Scala, но если Java совместима с Klocwork, продукт Solo может работать. Вы можете найти его здесь Klocwork Solo