sou*_*ver 12 php git code-formatting
我正在研究一个项目(PHP),并且在每次提交时都会有一些代码约定的中断.我正在使用git进行版本控制.有没有办法自动代码格式化,以便所有代码保持干净?
AD7*_*six 19
该问题分为两部分:自动格式化代码,并检测何时不符合您的编码标准.
自动格式化代码并不是您想要直接放在您和您的仓库之间的东西.在pre-commit钩子中修改文件或尝试修改文件可能会弄得一团糟.因此,使用什么vcs并不重要.
使用工具通过编辑器格式化代码,或者作为开发工作流程的一部分(手动或半自动)进行格式化是合适的.例如,vim具有=自动缩进代码的功能,正如其他人所提到的,Pear的美化是这样做的一种可能性.
检测编码标准devitions需要一个命令行工具,它告诉你当一个文件不符合编码标准-显而易见的选择是PHP代码嗅探器(phpcs) -尽管这可能仅仅是你使用手动美化你的代码相同的工具(如果您使用一个)并检查它是否不会改变文件内容.
如果现有标准都不符合您的风格,您可能需要编写自己的标准才能与phpcs一起使用.
您可以使用预提交挂钩在提交代码之前触发对代码的检查 - 如果发现代码错误,您将收到有关它们的通知,并且提交将中止.您可以使用绕过预提交挂钩git commit --no-verify
您可能会发现此repo很有用:https://github.com/AD7six/git-hooks
例:
$ 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
$
Run Code Online (Sandbox Code Playgroud)
(提交中止,代码不符合代码标准)
$ 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
$
Run Code Online (Sandbox Code Playgroud)
(提交成功 - 即使代码标准未得到满足)