git formatting de código automatizado

Estoy trabajando en un proyecto (PHP) y en cada compromiso hay algunas interrupciones en la convención del código. Estoy usando git para el control de versiones. ¿Hay alguna manera de formatear automáticamente los códigos para que todo el código se mantenga limpio?

La pregunta tiene dos partes: formatear automáticamente el código y detectar cuando no se ajusta a sus estándares de encoding.

Formatear automáticamente el código no es realmente algo que quiera poner entre usted y su repos directamente. Es probable que la modificación de files o el bash de modificar files en un enganche pre-commit haga un lío. Como tal, no importa qué vcs estás usando.

Usar una herramienta para formatear el código a través de su editor o como un process que ejecuta (de forma manual o semiautomatizada) como parte de su flujo de trabajo de desarrollo sería apropiado. Por ejemplo, vim tiene la function = en el código de sangría automática, y como lo mencionaron otros embellecedores de Pear es una posibilidad para hacer esto.

La detección de devitions estándar de código requiere una herramienta cli que le indica cuándo un file no cumple con los estándares de encoding; la opción obvia es PHP Code Sniffer (phpcs), aunque podría ser simplemente la misma herramienta que utiliza para embellecer su código manualmente (si use uno) y verifique que no cambie el contenido del file.

Es posible que necesite escribir su propio estándar para utilizarlo con phpcs si ninguno de los estándares existentes coincide con su estilo.

Puede usar un enganche precompromiso para activar una comprobación del código justo antes de confirmarlo. Si se encuentran errores de código, se le notificará acerca de ellos y se anulará la confirmación. Puede omitir sus ganchos pre-commit usando git commit --no-verify

Puede encontrar este repository útil: https://github.com/AD7six/git-hooks

Ejemplo:

 $ 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 $ 

(commit aborted, el código no cumple con los estándares del código)

 $ 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 $ 

(la confirmación se realizó correctamente, aunque no se cumplieron los estándares de código)

Git sabe ganchos. Podría aprovecharlos para ejecutar alguna forma de aplicación de estilo de testing antes de que se acepte cada confirmación en el repository. Verifique los files en .git/hooks/ dentro de su repository. Es posible rechazar un compromiso de esta manera. No estoy seguro de si puedes modificar la confirmación.

Hay algunos scripts de "embellecedor de PHP" (uno de ellos en PEAR), que puede llamar desde el enlace de commit de git.

Puedes usar PHP_Beautifier para embellecer tu script php.

Pero creo que embellecer en cada compromiso puede terminar en una gran cantidad de líneas modificadas. Esto dificultará comprender la salida del command diff .

Git tiene commit hooks que te permiten ejecutar commands antes de tu commit. No se recomienda utilizar estos enganches de confirmación para cambiar el código fuente ya que esto puede causar resultados no deseados.

Sin embargo, puede hacer uso de un gancho de precompilation de git para ejecutar el sniffer de código PHP. El sniffer de código PHP es una herramienta que se puede instalar a través de PEAR, que indicará dónde se preguntó fuera de estándar. Puede configurar sus propios estándares o hacer uso de estándares existentes como el estándar PEAR. El enganche commit se puede configurar para mostrar todas las violaciones (código no estándar) y detener el commit. Si el código está de acuerdo con los estándares, puede permitir la confirmación.

Aquí está el enlace al sniffer de código PHP:

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

Aquí hay un buen ejemplo de un gancho de precompilation de git para sniffer de código php:

https://gist.github.com/1892861

Alguna documentation de git commit hooks:

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

    Intereting Posts