2009-10-21 2 views
46

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

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

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

+1

Каких ошибок, помимо тех, что компилятор уже ищет? –

+1

Не совсем - какой компилятор может найти, я тоже могу найти. Я ищу «мертвый код», ненужные инициализированные переменные и т. Д. Для более статического анализа взгляните на http://findbugs.sourceforge.net/ –

+1

Удачи вам в поиске, но анализаторы типа FindBugs представляют собой много работы, и Scala может быть слишком молод, чтобы иметь какой-либо язык. –

ответ

20

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

+1

Это не очень подходит для Scala из-за акцента на специфические Java SDK, хотя с огромным количеством ложных срабатываний (все в IMO) – monkjack

-2

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

+2

Почему это принятый ответ? Я не могу найти никаких доказательств того, что Klocwork «решает» проблемы, с которыми вы столкнулись с Findbugs ...? – p3t0r

7

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

17

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

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

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

8

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

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

1

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

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

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

Смежные вопросы