Esta é uma coleção do nosso php_codesniffer personalizado (3.x) Sniffs para detectar bugs em potencial e comportamento inesperado no código PHP. Ele pode ser usado como um conjunto de regras por conta própria, mas é destinado principalmente a um conjunto de sniffs separados que podem ser integrados a outros padrões.
Descrevemos a motivação por trás de alguns desses cheirar em nosso blog.
Instale como uma dependência de desenvolvimento usando o Composer:
$ composer require --dev moxio/php-codesniffer-sniffs
Verifique seus arquivos contra este conjunto de cheirar:
$ ./vendor/bin/phpcs --standard=vendor/moxio/php-codesniffer-sniffs/MoxioSniffs path/to/your/files
Mais cheirar serão adicionados em breve.
Moxiosniffs.php.disallowbareContinueInswitch : não permite a instrução continue sem um argumento numérico quando usado diretamente dentro de um case switch . Isso impede que bugs silenciosos causados pelo PHP considerando que switch é uma estrutura de loop.
Moxiosniffs.php.disallowImplicticloSecomparison : Desaparece comparações implícitas não rigorosas por funções como in_array e array_search . Requer que o $strict -Parameter dessas funções seja definido explicitamente. Isso impede bugs ocultos devido ao comportamento contra-intuitivo da comparação não rica.
Moxiosniffs.php.disallowImplicticlooseBase64Decode : Desaparece o uso implícito não rigoroso da função base64_decode . Requer que o $strict -Parameter para esta função seja definido explicitamente.
Moxiosniffs.php.disallowuniqidwithoutmoreentropia : não percorra as chamadas para uniqid() sem $more_entropy = true . Quando $more_entropy é false (que é o padrão), uniqid() chama usleep() para evitar colisões, o que pode ser um desempenho substancial de desempenho. Sempre chamando uniqid() com $more_entropy = true evita esses problemas.
Moxiosniffs.php.disallowArrayCombinersWithSingLearray : não permite chamadas para funções que combinam duas ou mais matrizes com apenas uma única matriz dada como argumento. Isso se aplica a funções como array_merge(_recursive) , array_replace(_recursive) e todas as variantes de array_diff e array_intersect . Essa chamada não faz sentido e provavelmente é o resultado de uma vírgula ou parênteses equivocados. Para reiniciar uma única matriz, basta usar array_values .
Moxiosniffs.php.disallowImplicticmicrotimeasString : desalance as chamadas para microtime() sem que o argumento $get_as_float seja definido explicitamente. Por padrão, microtime possui uma string como seu valor de retorno ("msec sec"), que é inesperado e não pode ser ingenuamente fundido para flutuar, tornando-o propenso a erros. Ainda é possível definir esse argumento como false , mas nesse caso você provavelmente pensou sobre isso.
Moxiosniffs.php.disallowImplicititeratorToArrayWithuseKeys : desalance as chamadas para iterator_to_array() sem que o argumento $use_keys seja explicitamente definido. Por padrão, iterator_to_array usa as chaves fornecidas pelo iterador. Esse comportamento geralmente é desejado para matrizes associativas, mas pode causar resultados inesperados para matrizes 'semelhantes a listas'. Explicitamente exigindo que o parâmetro seja definido garante que o desenvolvedor precise pensar sobre qual comportamento é desejado para a situação em questão.
Moxiosniffs.php.disallowDateTime : Desaponde o uso de DateTime e promove o uso de DateTimeImmutable . O primeiro ser mutável pode levar a alguns insetos sutis, mas desagradáveis. Consulte esta postagem para obter mais antecedentes sobre por que você deseja desencorajar usando DateTime .
Moxiosniffs.php.disallowMbDetectEncoding : não permite o uso de mb_detect_encoding . Esta função tem um nome enganoso que implica que pode realmente detectar a codificação de uma string, um problema que geralmente é impossível. Em vez disso, ele verifica uma lista de codificações até encontrar uma que possa ser a correta (ou seja, a string é uma sequência de bytes válida de acordo com essa codificação). O uso de mb_check_encoding (possivelmente em um loop) torna isso muito mais explícito. Veja esta palestra para obter mais informações básicas sobre este tópico.
Moxiosniffs.php.disallowutf8encodedecode : não percorra as chamadas para utf8_encode() e utf8_decode() . Essas funções podem ser consideradas enganosas porque apenas se convertem para/da ISO-8859-1 e não detectam "magicamente" a codificação de origem/alvo. O uso de iconv() ou mb_convert_encoding() torna explícito as duas codificações de caracteres que desempenham um papel na conversão.
Moxiosnififfs.php.disallowDatEcreateFROMAFORMATWITHUNSPECIFICADOTEMECOMPONS : Desaponde as chamadas para DateTime::createFromFormat , DateTimeImmutable::createFromFormat , date_create_from_format & date_create_immutable_from_format com formats, que não é o que não é o que é o que não é o que não é o que não é o que não é o que não é o que não é o que não é o que é o que é o que é o que você está fazendo com o número de dólares. De outra forma, isso criaria objetos DateTime (imutável) com um componente de tempo definido para o tempo atual (de criação), que provavelmente nunca é o que você deseja e pode ser uma fonte de bugs.
Após a instalação de dependências (incluindo dependências de desenvolvimento) usando compositor, execute
$ ./vendor/bin/phpunit
Do projeto ROOT DIR.
Este projeto adere ao versão semântica.
Observe que, da perspectiva desta biblioteca como uma coleção de sniffs de picaragem (e não um padrão de codificação completo), a adição de novos farejadores não será considerada uma mudança de ruptura e, portanto, não causará um aumento no número da versão principal.
Esses cheirar são liberados sob a licença do MIT.