Esta es una colección de nuestro sniffs personalizado PhP_CodesNiffer (3.x) para detectar posibles errores y un comportamiento inesperado en el código PHP. Puede usarse como un conjunto de reglas por sí solo, pero se pretende principalmente como un conjunto de olfates separados que pueden integrarse en otros estándares.
Describimos la motivación detrás de algunos de estos sniffs en nuestro blog.
Instale como dependencia del desarrollo utilizando el compositor:
$ composer require --dev moxio/php-codesniffer-sniffs
Verifique sus archivos con este conjunto de sniffs:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
Pronto se agregarán más sniffs.
Moxiosniffs.php.disallowBarecontinueInswitch : no permite la instrucción continue sin un argumento numérico cuando se usa directamente dentro de un case de switch . Esto evita que los errores silenciosos causados por PHP consideren que switch es una estructura de bucle.
Moxiosniffs.php.disallowimplicitloosecomParison : no permite comparaciones implícitas no riguras por funciones como in_array y array_search . Requiere que el parámetro $strict a estas funciones se establezca explícitamente. Esto evita los errores ocultos debido al comportamiento contra-intuitivo de la comparación sin riguros.
Moxiosniffs.php.disallowimplicitloosebase64Decode : no permite el uso implícito de no rictamente de la función base64_decode . Requiere que el parámetro $strict a esta función se establezca explícitamente.
Moxiosniffs.php.disallowuniqidwithoutmoreentropy : no permite las llamadas a uniqid() sin $more_entropy = true . Cuando $more_entropy es false (que es el valor predeterminado), uniqid() llama a usleep() para evitar colisiones, lo que puede ser un rendimiento sustancial. Siempre llamando uniqid() con $more_entropy = true evita estos problemas.
Moxiosniffs.php.disallowArrayCombinersWithsinglearRay : no permite las llamadas a funciones que combinan dos o más matrices con una sola matriz dada como argumento. Esto se aplica a funciones como array_merge(_recursive) , array_replace(_recursive) y todas las variantes de array_diff y array_intersect . Tal llamada no tiene sentido, y es muy probable que sea el resultado de una coma o paréntesis fuera de lugar. Para reintegrar una sola matriz, solo use array_values .
Moxiosniffs.php.disallowImplicitMicroTimeasString : no permite las llamadas a microtime() sin el argumento $get_as_float que se establece explícitamente. Por defecto, microtime tiene una cadena como su valor de retorno ("msec sec"), que es inesperado y no puede ser ingenuo para flotar, lo que lo hace propenso a los errores. Todavía es posible establecer este argumento en false , pero en ese caso probablemente haya pensado en esto.
Moxiosniffs.php.disallowimplicititeratortoArraywithuseKeys : desactivar las llamadas a iterator_to_array() sin que el argumento $use_keys se establezca explícitamente. Por defecto, iterator_to_array usa las teclas proporcionadas por el iterador. Este comportamiento a menudo se desea para matrices asociativas, pero puede causar resultados inesperados para matrices 'listas'. Requerir explícitamente el parámetro que se establece asegura que el desarrollador tenga que pensar qué comportamiento se desea para la situación en cuestión.
Moxiosniffs.php.disallowdateTime : no permite el uso de DateTime y promueve el uso de DateTimeImmutable en su lugar. El primero es mutable puede conducir a algunos insectos sutiles pero desagradables. Vea esta publicación para obtener más información sobre por qué desea desalentar el uso de DateTime .
Moxiosniffs.php.disallowmbDetectEncoding : no permite el uso de mb_detect_encoding . Esta función tiene un nombre engañoso que implica que en realidad puede detectar la codificación de una cadena, un problema que generalmente es imposible. Más bien verifica una lista de codificaciones hasta que encuentre una que pueda ser la correcta (es decir, la cadena es una secuencia de bytes válida de acuerdo con esa codificación). Usar mb_check_encoding (posiblemente en un bucle) en su lugar hace que esto sea mucho más explícito. Vea esta charla para obtener más información sobre este tema.
Moxiosniffs.php.disallowutf8EncodeDecode : no permite las llamadas a utf8_encode() y utf8_decode() . Estas funciones pueden considerarse engañosas porque solo se convierten a/de ISO-8859-1, y no detectan "mágicamente" la codificación de origen/objetivo. Usar iconv() o mb_convert_encoding() en su lugar hace que ambas codificaciones de caracteres que jueguen un papel explícito.
Moxiosniffs.php.disallowdateCreateFromFormatWithUnSpecifiedTimeComponent : desactivar las llamadas a DateTime::createFromFormat , DateTimeImmutable::createFromFormat , date_create_from_format & date_create_immutable_from_format con formats que no especifican un tiempo de tiempo a un componente de tiempo a inicializados. Esto de otro modo crearía objetos de fecha y hora (inmutables) con un componente de tiempo establecido en el tiempo actual (creación), que probablemente nunca es lo que desea y puede ser una fuente de errores.
Después de instalar dependencias (incluidas las dependencias de desarrollo) utilizando el compositor, ejecutar
$ ./vendor/bin/phpunit
De la raíz del proyecto Dir.
Este proyecto se adhiere a la versiones semánticas.
Tenga en cuenta que, desde la perspectiva de esta biblioteca como una colección de sniffs (y no un estándar de codificación completo), la adición de nuevos sniffs no se considerará un cambio de ruptura y, por lo tanto, no causa un aumento en el número de versión principal.
Estos sniffs se lanzan bajo la licencia MIT.