{"id":231800,"date":"2022-12-29T18:22:00","date_gmt":"2022-12-29T15:22:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231800"},"modified":"2022-12-29T18:22:56","modified_gmt":"2022-12-29T15:22:56","slug":"escrevendo-um-codigo-wordpress-melhor-phpstan","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/escrevendo-um-codigo-wordpress-melhor-phpstan\/","title":{"rendered":"Escrevendo um c\u00f3digo WordPress melhor: PHPStan"},"content":{"rendered":"\n<p>No post mais recente desta s\u00e9rie (que \u00e9 reconhecidamente h\u00e1 algum tempo), falei longamente sobre o <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/ferramentas-para-escrever-um-codigo-wordpress-melhor-composer\/\" title=\"Composer\">Composer<\/a> e <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/melhor-codigo-wordpress-o-arquivo-de-bloqueio-do-compositor\/\" title=\"seu arquivo de bloqueio.\">seu arquivo de bloqueio.<\/a><\/p>\n<p>Eu recomendo a leitura dos dois artigos anteriores porque o Composer eventualmente desempenhar\u00e1 um papel neste material que este e os pr\u00f3ximos posts compartilhar\u00e3o. Mas se voc\u00ea optar por n\u00e3o alcan\u00e7\u00e1-los (ou j\u00e1 estiver familiarizado com o Composer), a ess\u00eancia dos posts anteriores \u00e9, respectivamente, a seguinte:<\/p>\n<blockquote>\n<p>Eu n\u00e3o recomendo verificar o diret\u00f3rio do fornecedor em seu reposit\u00f3rio. Isso pode se tornar um diret\u00f3rio enorme mais tarde, e pode minar todo o prop\u00f3sito do Composer.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/ferramentas-para-escrever-um-codigo-wordpress-melhor-composer\/\" title=\"Compositor\">Compositor<\/a><\/p>\n<p>O objetivo \u00e9 garantir que todos estejam executando a mesma vers\u00e3o das depend\u00eancias do projeto \u2013 nem vers\u00f5es mais antigas, nem vers\u00f5es mais recentes \u2013 mas a mesma vers\u00e3o.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/melhor-codigo-wordpress-o-arquivo-de-bloqueio-do-compositor\/\" title=\"O arquivo de bloqueio do compositor\">O arquivo de bloqueio do compositor<\/a><\/p>\n<\/blockquote>\n<p>Com isso dito, existem in\u00fameras depend\u00eancias ou pacotes que podemos instalar que nos ajudam a ter certeza de que estamos escrevendo o c\u00f3digo da mais alta qualidade poss\u00edvel.<\/p>\n<p>Claro, alguns deles podem estar na forma de algo como padr\u00f5es de codifica\u00e7\u00e3o, mas essas s\u00e3o realmente mais regras do que elementos de escrita de c\u00f3digo de alta qualidade (embora eu n\u00e3o ache que devam ser deixados de fora da discuss\u00e3o &#8211; apenas deixados de fora neste momento \ud83d\ude43).<\/p>\n<p>De volta \u00e0s ferramentas em quest\u00e3o: Quais s\u00e3o algumas ferramentas que ajudam a escrever c\u00f3digo WordPress de alta qualidade? Vou compartilhar alguns dos meus favoritos e falarei sobre como podemos execut\u00e1-los em uma base de c\u00f3digo.<\/p>\n<p>Primeiro, vamos dar uma olhada na an\u00e1lise est\u00e1tica com <a href=\"https:\/\/github.com\/phpstan\/phpstan\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PHPStan<\/a>.<\/p>\n<h2>Melhor c\u00f3digo WordPress com PHPStan<\/h2>\n<h3>O que \u00e9 an\u00e1lise est\u00e1tica, afinal?<\/h3>\n<p>Primeiro, algumas palavras sobre an\u00e1lise est\u00e1tica. Ou seja, o que \u00e9? \u00c9 um bocado, por um lado:<\/p>\n<blockquote>\n<p>A an\u00e1lise de c\u00f3digo est\u00e1tico (tamb\u00e9m conhecida como an\u00e1lise de c\u00f3digo-fonte) geralmente \u00e9 realizada como parte de uma revis\u00e3o de c\u00f3digo (tamb\u00e9m conhecida como teste de caixa branca) e \u00e9 realizada na fase de implementa\u00e7\u00e3o de um ciclo de vida de desenvolvimento de seguran\u00e7a (SDL).<\/p>\n<p>An\u00e1lise de c\u00f3digo est\u00e1tico geralmente se refere \u00e0 execu\u00e7\u00e3o de ferramentas de an\u00e1lise de c\u00f3digo est\u00e1tico que tentam destacar poss\u00edveis vulnerabilidades no c\u00f3digo-fonte &#8216;est\u00e1tico&#8217; (n\u00e3o em execu\u00e7\u00e3o) usando t\u00e9cnicas como an\u00e1lise de contamina\u00e7\u00e3o e an\u00e1lise de fluxo de dados.<\/p>\n<p><a href=\"https:\/\/www.owasp.org\/index.php\/Static_Code_Analysis\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">An\u00e1lise de c\u00f3digo est\u00e1tico via OWASP<\/a><\/p>\n<\/blockquote>\n<p>Pense desta forma: \u00e9 uma maneira de analisar um programa em busca de poss\u00edveis erros que voc\u00ea pode n\u00e3o ver ao trabalhar na base de c\u00f3digo.<\/p>\n<p>Ou seja, existem problemas, bugs, problemas de seguran\u00e7a, que podem estar presentes, mas voc\u00ea n\u00e3o pode detectar por v\u00e1rios motivos (o m\u00ednimo \u00e9 que voc\u00ea est\u00e1 muito pr\u00f3ximo do c\u00f3digo).<\/p>\n<p>Com o tempo, por\u00e9m, a comunidade de desenvolvimento aprendeu maneiras de analisar o c\u00f3digo, gerar conjuntos de regras e criar ferramentas para ajudar a encontrar exatamente todos os itens acima.<\/p>\n<h3>An\u00e1lise est\u00e1tica do c\u00f3digo centrado no WordPress<\/h3>\n<p>E \u00e9 aqui que o PHPStan entra em cena.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159518-61e6f6b3d2b7f.png\" alt=\"Escrevendo um c\u00f3digo WordPress melhor: PHPStan\"><\/a><\/p>\n<p>Como mencionado, o objetivo do pacote \u00e9 identificar erros ou bugs que existem em seu c\u00f3digo antes que seu c\u00f3digo seja usado por algu\u00e9m que n\u00e3o seja desenvolvedores, destac\u00e1-los e dar a voc\u00ea a oportunidade de corrigi-los.<\/p>\n<p>Como ferramentas como essa examinam uma base de c\u00f3digo (em vez de executar o c\u00f3digo), nem sempre \u00e9 poss\u00edvel obter uma imagem clara. Isso significa que podemos obter falsos positivos.<\/p>\n<p>Mais sobre isso em um momento embora.<\/p>\n<p>Se voc\u00ea estiver interessado em come\u00e7ar a executar o PHPStan em sua base de c\u00f3digo, \u00e9 f\u00e1cil. Depois de instal\u00e1-lo, lembre-se de configur\u00e1-lo para que n\u00e3o olhe no <code>vendor<\/code>diret\u00f3rio ou, digamos, no n\u00facleo do WordPress.<\/p>\n<p>Em vez disso, fa\u00e7a com que ele examine seu c\u00f3digo.<\/p>\n<h3>Instalando o PHPStan<\/h3>\n<p>Primeiro, em seu <code>composer.json<\/code>arquivo, adicione a seguinte linha na <code>require-dev<\/code>se\u00e7\u00e3o:<\/p>\n<p><code>\"phpstan\/phpstan\": \"^0.11.12\"<\/code><\/p>\n<p>Em seguida, execute <code>composer update<\/code>no seu terminal.<\/p>\n<p>Uma vez instalado, voc\u00ea pode execut\u00e1-lo em um arquivo individual, um diret\u00f3rio ou um conjunto de diret\u00f3rios. Se voc\u00ea leu meus posts anteriores sobre organiza\u00e7\u00e3o de c\u00f3digo, sabe que sou f\u00e3 de manter a maior parte do c\u00f3digo-fonte do projeto <code>src<\/code>para que voc\u00ea possa executar algo assim:<\/p>\n<p><code>$ vendor\/bin\/phpstan analyse src<\/code><\/p>\n<p>Isso gerar\u00e1 sa\u00edda com base no que o utilit\u00e1rio encontrar.<\/p>\n<p>Lembra mais cedo quando eu disse que pode encontrar coisas como falsos positivos? Aqui est\u00e1 uma an\u00e1lise mais detalhada do que voc\u00ea pode ver:<\/p>\n<ul>\n<li>Argumentos extras passados \u200b\u200bpara fun\u00e7\u00f5es (por exemplo, fun\u00e7\u00e3o requer dois argumentos, o c\u00f3digo passa tr\u00eas)<\/li>\n<li>Argumentos extras passados \u200b\u200bpara fun\u00e7\u00f5es print\/sprintf (por exemplo, string de formato cont\u00e9m um espa\u00e7o reservado, o c\u00f3digo passa dois valores para substituir)<\/li>\n<li>Erros \u00f3bvios em c\u00f3digo morto<\/li>\n<li>Comportamento m\u00e1gico que precisa ser definido.<\/li>\n<\/ul>\n<p>Todas as op\u00e7\u00f5es acima diretamente do <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">reposit\u00f3rio<\/a>.<\/p>\n<p>\u00c9 aqui que os <a href=\"https:\/\/github.com\/phpstan\/phpstan\/tree\/0.11.12#rule-levels\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">N\u00edveis de Regra<\/a> podem fazer toda a diferen\u00e7a, embora possa exigir um pouco de ajustes para chegar a um n\u00edvel adequado para sua equipe ou seu projeto.<\/p>\n<h3>E quanto \u00e0 an\u00e1lise para WordPress?<\/h3>\n<p>Viktor Sz\u00e9pe compartilhou <a href=\"https:\/\/packagist.org\/packages\/szepeviktor\/phpstan-wordpress\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">este recurso<\/a> comigo (algo de sua autoria, na verdade) e acho que \u00e9 algo relevante e \u00fatil. A ideia do pacote \u00e9 simples:<\/p>\n<blockquote>\n<p>Ele resolve todos os problemas que tive durante a an\u00e1lise de c\u00f3digo para WordPress.<\/p>\n<\/blockquote>\n<p>Nada mal, certo?<\/p>\n<h2>Analise seu c\u00f3digo<\/h2>\n<p>Independentemente do seu projeto, sua organiza\u00e7\u00e3o de c\u00f3digo ou em que n\u00edvel voc\u00ea executa esse utilit\u00e1rio espec\u00edfico, o objetivo \u00e9 sempre melhorar o n\u00edvel de qualidade do c\u00f3digo do WordPress que estamos escrevendo.<\/p>\n<p>Instalar isso como um pacote do Composer e execut\u00e1-lo em seu <code>src<\/code>diret\u00f3rio \u00e9 um passo na dire\u00e7\u00e3o certa.<\/p>\n<p>Como dito anteriormente, compartilharei algumas outras ferramentas e compartilharei como execut\u00e1-las em uma base de c\u00f3digo antes de confirmar o c\u00f3digo em um reposit\u00f3rio.<\/p>\n<h3>Observa\u00e7\u00e3o<\/h3>\n<p>Se voc\u00ea tiver um problema ao tentar configurar o pacote, <a href=\"https:\/\/davemackey.net\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dave Mackey<\/a> me contatou com um problema semelhante e sua <a href=\"https:\/\/github.com\/szepeviktor\/phpstan-wordpress\/issues\/8\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">solu\u00e7\u00e3o<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>De volta \u00e0s ferramentas em quest\u00e3o: Quais s\u00e3o algumas ferramentas que ajudam a escrever c\u00f3digo WordPress de alta qualidade? Vamos come\u00e7ar com PHPStan.<\/p>\n","protected":false},"author":1,"featured_media":236988,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[898,753,722,806,785,846],"tags":[1170],"class_list":["post-231800","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-php-8","category-software-livre","category-tutoriais","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231800"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231800\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/236988"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}