Ответ 1
В 2017 году, поскольку CodeSniffer 3.0.0, есть новый --cache
вариант.
Или вы можете использовать EasyCodingStandard, что делает это по умолчанию.
Я пытаюсь создать 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
В 2017 году, поскольку CodeSniffer 3.0.0, есть новый --cache
вариант.
Или вы можете использовать EasyCodingStandard, что делает это по умолчанию.
Концептуально это не имеет смысла.
phpcs должен знать контекст дыры, чтобы правильно анализировать.
Сканирование только измененных строк приведет к удалению контекста.
Вот как это делается в инструменте Phabricator Arcanist:
Это, конечно, не будет охватывать некоторые конкретные случаи, когда изменение в LineA вызвало ошибку в LineB.
Возможно, вы попытаетесь ускорить сканирование или предотвратить появление новых проблем в коде, который уже имеет огромное количество проблем. (http://xyproblem.info/)
Если вы пытаетесь ускорить сканирование, я боюсь, что это не-go. Как сказал Макс Хорват, это не имеет смысла. Вам нужен весь файл, чтобы обеспечить достаточный контекст для оценки новой строки (простой пример: я добавляю новую строку, которая ссылается на переменную, определенную в строке, которую я не редактировал. Вы не можете установить, является ли она действительной ссылкой без сканирование файла, чтобы найти ссылки на него).
Если вы пытаетесь выявить новые проблемы, единственный правильный способ сделать это - запустить 2 сканирования и сравнить результаты с новыми изменениями и без них.
Это не обязательно удваивает время обработки, если вы можете запускать оба сканирования в параллельном или кеш-результатах, но это не будет быстрее, что является позором, так как очевидный вариант использования для таких технологий - для очень больших файлов.
Выяснение того, являются ли два сообщения об ошибках одинаковыми, немного сложнее, чем оно появляется первым, поскольку номера строк будут изменены. Вам нужно будет разбить два оригинальных файла и выяснить все смещения строк, чтобы получить правильный результат.
Вероятно, было бы достаточно убрать номера строк до того, как вы разделите результаты и дадите разработчику понять это. Если бы вы сказали: "Это изменение ввело одну из этих 4 ошибок, но я не знаю, что" разработчик легко выяснит ".
Я знаю, что тема устарела. Я создаю собственное решение для достижения этой цели (только сканирование с измененной выровненностью). Это преждевременно, но работает