Почему CodeSniffer не исключает указанные папки --ignore?

Я использую Jenkins(Hudson) CI и каждую ночь анализирую код, используя ряд инструментов для создания отчетов, включая Codesniffer для отчетов Checkstyle. Я не хочу, чтобы он игнорировал каталог ./framework/*, но он настаивает на его включении, независимо от моих усилий с параметром --ignore.

Отчет создан и успешно проанализирован, но на самом деле бесполезен для нас из-за огромного количества нарушений стандартов Pear Coding во фреймворке.

Codesniffer вызывается из моего скрипта сборки Ant следующим образом:

<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
 <exec executable="phpcs" dir="${basedir}" output="${basedir}/build/logs/checkstyle.xml" failonerror="off">
  <arg line="--report=checkstyle --standard=${basedir}/build/phpcs.xml --extensions=php  --ignore=*/framework/* ${basedir}" />
 </exec>
</target>

Я пробовал --ignore=framework, --ignore=framework/ и тот, что в строке выше, все из примеров, которые я нашел в Интернете.

Я также пытался использовать разные строки для каждого аргумента (using < arg value"..." />), но безрезультатно.

Любые идеи? Очень признателен :)

Изменить: аргумент --ignore теперь:

--ignore=${basedir}/framework/

...И все же папка framework включается. Есть ли у кого-нибудь работающая конфигурация PhpCodeSniffer с аргументом --ignore, работающим?

Скрестить пальцы здесь


person Julian    schedule 06.09.2012    source источник


Ответы (4)


Использование * не сработает, так как оболочка их расширит.

В зависимости от вашей версии php_codesniffer вы должны либо передать полный путь к каталогу для игнорирования (более старые версии), либо относительный путь из каталога сборки, чтобы игнор работал (начиная с версии php_codesniffer 1.3.6):

Выдержка из журнала изменений:

  • Игнорировать шаблоны теперь проверяет относительный путь к файлу на основе проверяемого каталога.
person cweiske    schedule 06.09.2012
comment
Nogo :/ Текущая строка аргумента: ‹arg line=--report=checkstyle --standard=${basedir}/build/phpcs.xml --extensions=php --ignore=${basedir}/framework/ ${ базовый каталог} /› - person Julian; 06.09.2012

У меня была такая же проблема в Дженкинсе, и ответ выше помог мне в некоторой степени. Это то, что у меня есть сейчас (и работает в моей системе).

Если ваша система выглядит так:

/
/build.xml
/foo
/foo/bar

Это то, что у меня есть в моем build.xml

  <target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer and print human readable output. Intended for usage on the command line before committing.">
<exec executable="phpcs">
  <arg value="--standard=${basedir}/build/phpcs.xml" />
  <arg value="--ignore=foo/bar" />
  <arg path="${basedir}" />
</exec>

The trick was not to use ${basedir} and to lose the trailing slash of the directory.

Я надеюсь, что это помогает

person Nick    schedule 17.10.2012

Также можно поместить эти исключения в build/phpcs.xml. Отлично работает здесь, в Дженкинсе.

Примеры исключения всех файлов в каталоге js/facebook, совпадения с подстановочными знаками для js/jquery* и указанного имени файла.

<exclude-pattern>lib/facebook</exclude-pattern>
<exclude-pattern>js/jquery*</exclude-pattern>
<exclude-pattern>lib/Postmark.php</exclude-pattern>
person markdwhite    schedule 19.10.2012

Спасибо за информацию. Я закончил тем, что решил это так

    <target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer creating a log file for the continuous integration server">
     <exec executable="phpcs" failonerror="off">
      <arg line="-v --report-checkstyle=${basedir}/build/logs/checkstyle.xml --standard=${basedir}/build/phpcs.xml --extensions=php --ignore=extensions,library ./protected" />
     </exec>
    </target>

Работает!

person Julian    schedule 18.10.2012