Вопрос

Недавно я изучал checkstyle в рамках некоторых исследований стандартных соглашений о кодировании.Хотя кажется, что он идеально подходит для совершенно новых проектов, похоже, у него есть огромный барьер для внедрения в уже существующие проекты, поскольку, похоже, он не предоставляет метод только проверки нового или отредактированного кода.Может быть, я ошибаюсь?

Если у вас есть кодовая база, у которой никогда не было стандарта кодирования, может потребоваться огромное усилие, чтобы привести всю кодовую базу в соответствие со стандартом сразу.Разрешение выполнять это постепенно с течением времени по мере естественного развития кода кажется более разумным подходом.Но это не похоже на возможность с checkstyle.

Я предполагаю, что это должно быть связано с системой управления версиями, чтобы быть возможным.Возможно ли это с помощью Checkstyle или есть другой инструмент, который может обеспечить такую функциональность?

Это было полезно?

Решение

Насколько мне известно, Checkstyle предназначен для анализа исходного кода без учета его истории или изменений.

Добавление такой функции означает анализ script checkstyle, чтобы снабдить его точным подмножеством файлов, представляющих дельту.

Но тогда определенные виды проверок, скорее всего, завершатся неудачей или будут пропущены при их анализе, например проверка дублирующегося кода.

Таким образом, для такого рода инкрементного анализа вам нужно ограничить не только набор источников, но и набор правил, которые вы хотите применить, поскольку некоторые из этих правил имеют смысл только для всех источников.


Итак, почему вы не могли выполнить полную проверку каждого файла, а затем отфильтровать результаты на основе изменений, управляемых вашей системой управления версиями?Что-нибудь подобное существует?

Насколько мне известно, нет, особенно с таким плагином, как затмение-cs для eclipse:при анализе файла они будут отображать все предупреждения, даже если в системе управления версиями указано, что файл не изменился с момента данной ревизии.

Только внешний скрипт мог бы это сделать:
Принцип прост (хотя он может быть немного медленным во время выполнения).:

  • для каждого файла выполните diff, чтобы проверить, были ли внесены изменения
  • если да, то,
    • сделайте svn blame пометить строки номером редакции, в которой содержалось последнее изменение.
    • Затем проанализируйте файл с помощью checkstyle.
  • Затем скрипт может отфильтровать предупреждение для строки, изменяемой в данный момент (или для всех строк, измененных после данной ревизии).

Другие советы

Мы разработали плагин Checkstyle для SCM-Manager , инструмента для управления git, subversion и ртутными репозиториями. Если он активирован, можно проверить зафиксированный исходный код на соответствие вашим правилам Checkstyle. Если при проверке обнаружены ошибки, фиксация отменяется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top