автоматизированное форматирование кода git - PullRequest
12 голосов
/ 23 февраля 2012

Я работаю над проектом (PHP) и на каждом коммите есть некоторые перерывы в соглашении о коде. Я использую Git для контроля версий. Есть ли способ автоматического форматирования кода, чтобы весь код оставался чистым?

Ответы [ 5 ]

19 голосов
/ 23 февраля 2012

Вопрос состоит из двух частей: автоматическое форматирование кода и обнаружение его несоответствия вашим стандартам кодирования.

Автоматическое форматирование код на самом деле не то, что вы хотите поместить между вами и вашим репо напрямую. Изменение файлов или попытка изменить файлы в хуке pre-commit может привести к путанице. Таким образом, не имеет значения, какой VCS вы используете.

Было бы целесообразно использовать инструмент для форматирования кода с помощью вашего редактора или в качестве процесса, который вы запускаете (вручную или полуавтоматически) в рамках вашего рабочего процесса разработки. Например, vim имеет функцию = для автоматической вставки кода, и, как уже упоминалось другими, Устройство Pear * beautifier является одной из возможностей сделать это.

Обнаружение стандартных отклонений кода требуется инструмент cli, который сообщает, когда файл не соответствует стандартам кодирования - очевидный выбор - PHP Code Sniffer (phpcs) - хотя это может просто используйте тот же инструмент, который вы используете, чтобы украсить свой код вручную (если вы его используете) и убедитесь, что он не меняет содержимое файла.

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

Вы можете использовать ловушку предварительной фиксации для запуска проверки кода непосредственно перед его фиксацией. Если обнаружены ошибки кода, вы получите уведомление о них, и фиксация будет прервана. Вы можете обойти свои ловушки перед фиксацией, используя git commit --no-verify

Этот репо может оказаться полезным: https://github.com/AD7six/git-hooks

* 1 028 * Пример:
$ more foo.php 
<?php
    function bar() {
    }
$ git add foo.php
$ git commit -v
running php/lint.php ...    OK
running php/phpcs.php ...   FAIL
phpcs -n -s --extensions=php,ctp --encoding=UTF-8 --standard=Cake '/tmp/cakephp-git-hooks'

FILE: foo.php
---------------------------------------
FOUND 3 ERROR(S) AFFECTING 2 LINE(S)
---------------------------------------
 2 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
 2 | ERROR | Line indented incorrectly; expected 0 spaces, found 4 (Cake.WhiteSpace.ScopeIndent.Incorrect)
 3 | ERROR | Space indented: Tabs for indents, spaces for alignment (Cake.WhiteSpace.ForceTabIndent)
---------------------------------------

Time: 0 seconds, Memory: 3.75Mb

$

(фиксация прервана, код не соответствует стандартам кода)

$ git commit -v --no-verify -m "dummy commit"
running misc/happy-commits ...  OK
[2.1 2c432f1] dummy commit
 1 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 foo.php
$

(фиксация выполнена успешно - хотя стандарты кода не были соблюдены)

2 голосов
/ 23 февраля 2012

Вокруг есть несколько скриптов PHP beautifier (один из них в PEAR), которые вы можете вызывать из коммита git commit.

2 голосов
/ 23 февраля 2012

Вы можете использовать PHP_Beautifier , чтобы украсить ваш php-скрипт.

Но я думаю, что украшение в каждом коммите может закончиться множеством измененных строк. Это усложнит понимание вывода команды diff.

2 голосов
/ 23 февраля 2012

Git знает хуки.Вы можете использовать их для запуска приложения в стиле checkstyle до того, как каждая фиксация будет принята в хранилище.Проверьте файлы в .git/hooks/ в вашем хранилище.Таким способом можно отказаться от коммита.Я не уверен, что вы можете изменить коммит.

1 голос
/ 23 февраля 2012

Git имеет хуки коммитов, которые позволяют вам выполнить команду перед вашим коммитом.Не рекомендуется использовать эти ловушки фиксации для изменения исходного кода, поскольку это может привести к нежелательным результатам.

Однако вы можете использовать ловушку git pre-commit для запуска сниффера PHP-кода.PHP-сниффер кода - это инструмент, устанавливаемый через PEAR, который укажет, где вы удивились стандарту.Вы можете настроить свои собственные стандарты или использовать существующие стандарты, такие как стандарт PEAR.Хук фиксации может быть настроен для отображения всех нарушений (нестандартный код) и остановки фиксации.Если код соответствует стандартам, он может разрешить фиксацию.

Вот ссылка на анализатор кода PHP:

http://pear.php.net/package/PHP_CodeSniffer/redirected

Вот хороший примерgit pre-commit hook для сниффера php-кода:

https://gist.github.com/1892861

Некоторая документация по перехватчикам git commit:

http://book.git -scm.com / 5_git_hooks.html

...