Подтвердить что ты не робот

Использовать PHP_CodeSniffer только для модифицированных строк

Я пытаюсь создать pre-commit script в SVN, и я хочу запустить PHP_CodeSniffer только в измененных строках (в отличие от всего файла). Пока у меня есть этот script:

#!/bin/sh

REPOS="$1"
TXN="$2"

# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
$SVNLOOK log -t "$TXN" "$REPOS" | \
   grep "[a-zA-Z0-9]" > /dev/null || exit 1

# Check for code validation before commiting the script using PHP_CodeSniffer
/tmp/pear/download/PHP_CodeSniffer-1.4.3/scripts/phpcs-svn-pre-commit  "$REPOS" -t "$TXN" >&2 || exit 1

# All checks passed, so allow the commit.
exit 0
4b9b3361

Ответ 2

Концептуально это не имеет смысла.

phpcs должен знать контекст дыры, чтобы правильно анализировать.

Сканирование только измененных строк приведет к удалению контекста.

Ответ 3

Вот как это делается в инструменте Phabricator Arcanist:

  • он запускает php-код сниффера на каждый измененный файл и собирает все ошибки
  • ограничивает эти ошибки номером строки, где разрешены только номера строк, которые были изменены в этом коммите.

Это, конечно, не будет охватывать некоторые конкретные случаи, когда изменение в LineA вызвало ошибку в LineB.

Ответ 4

Возможно, вы попытаетесь ускорить сканирование или предотвратить появление новых проблем в коде, который уже имеет огромное количество проблем. (http://xyproblem.info/)

Если вы пытаетесь ускорить сканирование, я боюсь, что это не-go. Как сказал Макс Хорват, это не имеет смысла. Вам нужен весь файл, чтобы обеспечить достаточный контекст для оценки новой строки (простой пример: я добавляю новую строку, которая ссылается на переменную, определенную в строке, которую я не редактировал. Вы не можете установить, является ли она действительной ссылкой без сканирование файла, чтобы найти ссылки на него).

Если вы пытаетесь выявить новые проблемы, единственный правильный способ сделать это - запустить 2 сканирования и сравнить результаты с новыми изменениями и без них.

Это не обязательно удваивает время обработки, если вы можете запускать оба сканирования в параллельном или кеш-результатах, но это не будет быстрее, что является позором, так как очевидный вариант использования для таких технологий - для очень больших файлов.

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

Вероятно, было бы достаточно убрать номера строк до того, как вы разделите результаты и дадите разработчику понять это. Если бы вы сказали: "Это изменение ввело одну из этих 4 ошибок, но я не знаю, что" разработчик легко выяснит ".

Ответ 5

Я знаю, что тема устарела. Я создаю собственное решение для достижения этой цели (только сканирование с измененной выровненностью). Это преждевременно, но работает

https://github.com/ayeo/sniffer