контрольный стиль + фильтры подавления - PullRequest
5 голосов
/ 13 октября 2008

У меня есть настройка фильтра подавления контрольного стиля (например, игнорировать магические числа в коде модульного теста).

Файл подавления xml находится в той же папке, что и файл checkstyle xml. Однако, где этот файл на самом деле находится в разных местах: в моем окне Windows Dev это находится в d: \ dev \ shared \ checkstyle \ config на сервере Linux CI это будет в / root / repo / shared / checkstyle / config на другой коробке разработчиков это может быть где угодно (они проверяют свои svn репозитории).

Единственная «непротиворечивая» вещь состоит в том, что файл подавления всегда находится в той же папке, что и файл xml checkstyle. Я не могу понять, как обеспечить постоянное получение этого файла. Также я не знаю, почему checkstyle не поддерживает встроенное подавление в xml-файле checkstyle.

любая помощь?

Ответы [ 6 ]

10 голосов
/ 14 октября 2008

У меня была такая же проблема с конфигурацией подавления Checkstyle, когда я переходил между Linux и Windows. Вот как я решил это в моей системе сборки на основе Ant:

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

Мой основной файл конфигурации Checkstyle имеет объявление модуля SuppressionFilter, как показано ниже. Значение свойства checkstyle-suppressions-file берется из файла свойств Checkstyle:

<module name="SuppressionFilter">
    <property name="file" value="${checkstyle-suppressions-file}"/>
</module>

Файл свойств Checkstyle не является статичным, он генерируется скриптом сборки Ant из шаблона файла свойств с именем template-checkstyle.properties. Вот как выглядит шаблон для свойства файла suppressions:

checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml

Мой скрипт сборки Ant копирует этот файл в файл с именем checkstyle.properties. Копия заменена специальным токеном на правильное значение каталога, в котором находится файл подавлений:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
    <filterset>
        <filter token="SCM_DIR" value="${scm.dir.unix}"/>
    </filterset>
</copy>

Теперь, откуда берется значение scm.dir.unix? Ну, это получено из свойства моей сборки, читайте дальше. Вам нужно будет указать такое значение с указанными вами значениями каталога.

Обратите внимание, что существует одна неочевидная проблема, касающаяся способа указания этого каталога. Я говорю, что значение scm.dir.unix является производным от свойства сборки, поскольку я заметил, что основной файл конфигурации Checkstyle не может содержать обратную косую черту, то есть символы разделителя пути Windows, в значении свойства file модуля SuppressionFilter. Например, указание что-то вроде C:\foo\bar\baz приводит к сообщению об ошибке Checkstyle о том, что C:foobarbaz не может быть найдено. Я работаю над этим путем "преобразования" свойства сборки каталога scm.dir в формат "unix" с помощью задачи Ant pathconvert:

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

Затем я вызываю задачу checkstyle Ant следующим образом:

<checkstyle config="${scm.dir}/checkstyle_checks.xml"
            properties="${scm.dir}/checkstyle.properties">
    <!-- details elided -->
</checkstyle>

При вызове задачи checkstyle пары ключ / значение, содержащиеся в файле checkstyle.properties, вводятся в основную конфигурацию Checkstyle.

Если хотите, вы можете увидеть полные сценарии здесь

Надеюсь, это поможет

6 голосов
/ 21 февраля 2013

В Eclipse я добавил следующее, что не требовало от меня добавления каких-либо дополнительных свойств:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>
2 голосов
/ 05 ноября 2011

Если вы работаете с eclipse и у вас есть файл подавления в том же каталоге, что и внешний конфигурационный файл checkstyle, вы можете настроить фильтр подавления следующим образом:

<module name="SuppressionFilter">
    <property name="file" value="${config_dir}/my_suppressions.xml"/>
</module>

Вы также должны определить свойство $ {config_dir} в конфигурации checkstyle:

Настройки Eclipse -> «Checkstyle» -> Выберите конфигурацию cs -> «Свойства ..» -> «Дополнительные свойства ..»

Определите свойство для каталога конфигурации checkstyle:

config_dir --->  ${config_loc}
2 голосов
/ 03 июня 2009

Я получаю абсолютный путь к каталогу, в котором находится build.xml, используя переменную ant.file и название проекта:

<project name="common" ... >
  <dirname property="thisdir" file="${ant.file.common}"/>

Затем я могу объединить абсолютный путь к моим файлам конфигурации checkstyle:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml

Поскольку переменная thisdir взята из ant, похоже, не требуется преобразование разделителя пути.

1 голос
/ 05 марта 2013

Я думаю, что ответ Роберта может быть расширен до простого решения для ant и Eclipse :

Включите файл подавления в XML-файл конфигурации следующим образом:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

Теперь Eclipse удовлетворен и находит файл.

Чтобы заставить муравья работать, обновите вашу цель примерно так:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml">
    <!-- ... -->
    <property key="samedir" value="${checkstyle.config}"/>
</checkstyle>

Надеюсь, это поможет.

0 голосов
/ 11 августа 2018

Начиная с CheckStyle 4.26.0 вы можете использовать предопределенные константы в ваших конфигурационных файлах.

(https://github.com/jshiell/checkstyle-idea/issues/217):

  • $ {basedir} & $ {project_loc} - сопоставляется с текущим каталогом проекта
  • $ {workspace_loc} - сопоставляется с текущим каталогом рабочей области Eclipse
  • $ {config_loc} & $ {samedir} - получить сопоставление с каталогом, в котором находится файл конфигурации

Если вы хотите поделиться конфигурацией с maven, вам понадобится «псевдоним» «константы затмения» в вашей конфигурации POM (в разделе отчетов) с помощью элемента конфигурации «propertyExpansion»:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

"propertyExpansion" вдохновлен: https://github.com/checkstyle/checkstyle/blob/master/pom.xml#L582.

...