SonarLint не показывает все записи по сравнению с указанным сервером SonarQube

Мы используем сервер SonarQube версии 5.3 с SonarLint 2.0 в подключенном режиме. В качестве IDE мы используем Eclipse Mars 2.0, и когда мы сравниваем результаты, найденные сервером SonarQube, с результатами, найденными SonarLint в IDE, результаты различаются (пример файла 274 ошибки в IDE, 826 ошибок в SonarQube !).

Одно из обычных различий заключается в том, что «переменная может быть объявлена ​​окончательной».

Также у одного из моих коллег, который использует SonarLint для IntelliJIdea, возникают аналогичные проблемы (Idea версии 2016.1.1, SonarLint 2.0.2, пример файла — такой же, как для сравнения в IDE ошибки 293).

Интересно, почему существуют такие различия в отношении сервера и даже между IDE.

Может ли кто-нибудь помочь мне в этом? Спасибо.


person Uhla    schedule 11.05.2016    source источник


Ответы (3)


Я столкнулся с похожей проблемой, иллюстрируемой этим примером: SonarLint 2.0.2: 99 проблем. Пользовательский интерфейс SonarQube 5.4: 116 проблем. Различия вызваны двумя правилами, принадлежащими плагину Checkstyle.

Поскольку вы говорите о том, что «переменная может быть объявлена ​​окончательной», я предполагаю, что за вашими отсутствующими проблемами стоит правило pmd:LocalVariableCouldBeFinal, которое принадлежит плагину PMD.

Фабрис прокомментировал эту тему в группе SonarQube Google, они "не будут добавлять поддержку какого-либо внешнего механизма": Группа Google SonarQube (это верно для PMD, Checkstyle, Findbugs и других...)

К сожалению, мы можем использовать только правила, упомянутые в Список правил SonarLint, которые предоставляются SonarQube "из коробки" (т. е. их плагин Java).

person Jan S.    schedule 12.05.2016
comment
Я понимаю! Большое спасибо за объяснение о внешних двигателях, теперь это имеет гораздо больше смысла. - person Uhla; 17.05.2016
comment
Действительно очень хороший ответ! Возможно, выходом будет создание нового профиля качества в SonarQube, используя сопоставление правил, а затем активация этого профиля вместо того, что доступно в FindBugs и PMD. Я предполагаю, что это должен быть новый запрос функции для продукта SonarQube --- поднятие профиля на основе FindBugs до анализатора SonarSource. - person Jaywalker; 07.09.2017

Прежде всего, SonarQube выполняет полный анализ вашего проекта, в то время как SonarLint анализирует только те файлы, которые вы открываете. Поэтому я действительно не знаю, как ваше сравнение количества проблем может иметь смысл (если вы не открыли все файлы один за другим в Eclipse).

Во-вторых, есть несколько известных причин, по которым SonarLint будет показывать меньше или больше проблем, чем SonarQube:

  • Some rules based on metrics are computed only in SonarQube. For instance:
    • Insufficient (line or branch) coverage
    • Недостаточная плотность комментариев
    • Дублированный код
  • You might have defined issue exclusions on SonarQube, which are not taken into account yet in SonarLint
    • But this will come soon
  • You might have defined source code exclusions on SonarQube, which are not taken into account yet in SonarLint
    • But this will come soon
person Fabrice - SonarSource Team    schedule 11.05.2016
comment
Прежде всего, спасибо за ответ. Я ценю быстрый ответ. Во-вторых, я понимаю, что для некоторых проблем вам нужно проанализировать несколько файлов (например, для проблем неизменности и т. д.) - однако я не верю, что вам нужно, чтобы специально для Variable можно было объявить окончательный вид ошибки - вам нужен только ближайший контекст там, не так ли? У меня нет исключений проблем в SonarQube, и исключения исходного кода не влияют на тестируемую область. Также я понимаю аргумент о метриках - и я бы понял недостающие. - person Uhla; 17.05.2016
comment
Однако, если я сосредоточусь конкретно на Переменная может быть объявлена ​​окончательной, я действительно не понимаю, почему они не отображаются. - person Uhla; 17.05.2016
comment
Хорошо, прочитайте комментарий о внешних движках от @jan-s, и теперь это имеет смысл. - person Uhla; 17.05.2016

Если вы просто нажмете на проект, это не сработает, вам нужно войти в проект и нажать на java-файлы. Как только вы начнете нажимать на файлы Java, присутствующие в проекте, вы увидите, что SonarLint активируется и показывает вам все ошибки присутствуют. У меня сработало

person Vishal Jaiswal    schedule 25.04.2017