Tenemos una aplicación web PHP 5 y actualmente estamos evaluando PHP CodeSniffer para decidir si forzar estándares de código mejora la calidad del código sin causar demasiado dolor de cabeza. Si parece bueno, agregaremos un enlace de confirmación previa SVN para garantizar que todos los archivos nuevos confirmados en la rama de desarrollo estén libres de olores de codificación estándar.
¿Hay alguna manera de configurar PHP codeSniffer para ignorar un tipo particular de error? o conseguir que trate un cierto error como una advertencia en su lugar?
Aquí un ejemplo para demostrar el problema:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
<?php
echo getTabContent('Programming', 1, $numX, $numY);
if (isset($msg)) {
echo $msg;
}
?>
</div>
</body>
</html>
Y esta es la salida de PHP_CodeSniffer:
> phpcs test.php -------------------------------------------------- ------------------------------ ENCONTRÓ 2 ERROR (S) Y 1 ADVERTENCIA (S) QUE AFECTAN A 3 LÍNEA (S) -------------------------------------------------- ------------------------------ 1 | ADVERTENCIA | La línea excede los 85 caracteres; contiene 121 caracteres 9 | ERROR | Falta el comentario del documento 11 | ERROR | Línea sangrada incorrectamente; esperado 0 espacios, encontrado 4 -------------------------------------------------- ------------------------------
Tengo un problema con el error " Línea sangrada incorrectamente ". Supongo que sucede porque estoy mezclando la sangría de PHP con la sangría de HTML. Pero esto lo hace más legible, ¿no? ( teniendo en cuenta que no tengo los recursos para moverme a un marco MVC en este momento ). Así que me gustaría ignorarlo por favor.
Respuestas:
Encontré una solución para eliminar el error " Línea indentada incorrectamente ", pero primero debo decir que dragonmantank tiene un punto excelente: no debes mezclar PHP y HTML. Es una receta para dolores de cabeza. Sin embargo, desafortunadamente creo que mezclar PHP y HTML es muy común, especialmente en el software heredado.
La solución más rápida y sucia asumiendo que estamos usando los
phpcs
estándares de codificación predeterminados (que son los estándares PEAR ) es eliminar el archivo Sniff relevante. Encuentra la ubicación de los estándares PEAR, para mí, usando Ubuntu , fue aquí:Cambie el nombre del
ScopeIndentSniff.php
archivo para que el olfateo que verifica la sangría del código ya no se ejecute:Trabajo realizado : ahora no se comprobará la sangría y no se producirá el error " Línea sangrada incorrectamente " (¡ y su código no será estándar y no será de tan alta calidad! ).
La solución anterior es bastante aficionada: la solución más limpia es crear un nuevo estándar de codificación que utilice todos los estándares PEAR, excepto las personalizaciones seleccionadas. Esto es muy rápido de hacer. Aquí le mostramos cómo hacerlo utilizando
getIncludedSniffs()
ygetExcludedSniffs()
y algunasphpcs
convenciones de nomenclatura:Pruebe su nuevo estándar de codificación personalizado invocando
phpcs
usando la--standard
bandera. Por ejemplo:Una vez que esté funcionando, puede establecer su nuevo estándar como predeterminado, lo que significa que no necesita escribir el
--standard
indicador cada vez que usephpcs
:Consulte el manual de phpcs para obtener más información.
fuente
Te encontrarás con muchos problemas al ejecutar PHPCS con tu código PHP mezclado con HTML. PHPCS solo es realmente útil cuando analiza scripts PHP puros. Los estándares de codificación integrados se basan en PHP puro, no en PHP / HTML mixto.
Una opción sería construir su propio estándar personalizado y usarlo en su lugar. El estándar personalizado tendría en cuenta la mezcla de código, pero probablemente sería difícil escribirlo.
La otra opción es usar un sistema de plantillas ya que dijiste que no quieres pasar a un marco. Smarty y Twig se pueden usar fuera de un marco MVC. Vaya a uno de esos y luego haga que PHPCS solo analice los archivos .PHP, no los archivos de plantilla.
fuente