PHPMD é um projeto spin-off do PHP Depend e pretende ser um equivalente em PHP da conhecida ferramenta Java PMD. PHPMD pode ser visto como um aplicativo frontend amigável para o fluxo de métricas brutas medidas pelo PHP Depend.
https://phpmd.org
Veja https://phpmd.org/download/index.html
Digite phpmd [filename|directory[,filename|directory[,...]]] [report format] [ruleset file]
, ou seja:
mapi@arwen ~ $ phpmd php/PDepend/DbusUI/ xml regrassets.xml
Embora o arquivo do conjunto de regras rulesets.xml
possa ter esta aparência:
<? xml version = " 1.0 " ?>
< ruleset name = " My first PHPMD rule set "
xmlns = " https://phpmd.org/xml/ruleset/1.0.0 "
xmlns : xsi = " http://www.w3.org/2001/XMLSchema-instance "
xsi : schemaLocation = " https://phpmd.org/xml/ruleset/1.0.0
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd "
xsi : noNamespaceSchemaLocation = "
http://phpmd.org/xml/ruleset_xml_schema_1.0.0.xsd " >
< description >
My custom rule set that checks my code...
</ description >
< rule ref = " rulesets/codesize.xml " />
< rule ref = " rulesets/cleancode.xml " />
< rule ref = " rulesets/controversial.xml " />
< rule ref = " rulesets/design.xml " />
< rule ref = " rulesets/naming.xml " />
< rule ref = " rulesets/unusedcode.xml " />
</ ruleset >
O relatório xml ficaria assim:
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< pmd version = " 0.0.1 " timestamp = " 2009-12-19T22:17:18+01:00 " >
< file name = " /projects/pdepend/PHP/Depend/DbusUI/ResultPrinter.php " >
< violation beginline = " 81 "
endline = " 81 "
rule = " UnusedFormalParameter "
ruleset = " Unused Code Rules "
externalInfoUrl = " https://phpmd.org/rules/unusedcode.html#unusedformalparameter "
priority = " 3 " >
Avoid unused parameters such as '$builder'.
</ violation >
</ file >
</ pmd >
Você pode passar uma string separada por vírgula com uma lista de nomes de arquivos ou nomes de diretórios, contendo o código-fonte PHP para PHPMD.
A distribuição PHPMD Phar inclui os arquivos do conjunto de regras dentro de seu arquivo, mesmo que o parâmetro "rulesets/codesize.xml" acima pareça uma referência do sistema de arquivos.
Observe que a saída padrão está em XML, então você pode redirecioná-la para um arquivo e XSLT ou qualquer outra coisa
Você também pode usar nomes abreviados para se referir aos conjuntos de regras integrados, como este:
phpmd PHP/Depend/DbusUI/ tamanho de código xml
A interface da linha de comandos também aceita os seguintes argumentos opcionais:
--verbose, -v, -vv, -vvv
- O nível de detalhamento da saída. Irá imprimir mais informações sobre o que está sendo processado ou armazenado em cache. Será enviado ao STDERR
para não interferir na saída do relatório. a saída text
também terá sob cada erro um link para a documentação da regra e formatará o local de forma que a maioria dos IDEs seja convertida em um link para abrir o arquivo na linha do erro quando clicado.--minimumpriority
- O limite de prioridade da regra; regras com prioridade mais baixa do que não serão usadas.--reportfile
- Envia a saída do relatório para o arquivo especificado, em vez do destino de saída padrão STDOUT
.--suffixes
- Sequência separada por vírgulas de extensões de nome de arquivo de código-fonte válidas, por exemplo, php,phtml.--exclude
- Sequência de padrões separados por vírgula que são usados para ignorar diretórios. Use asteriscos para excluir por padrão. Por exemplo *src/foo/*.php
ou *src/foo/*
--strict
- Reporte também esses nós com uma anotação @SuppressWarnings.--ignore-errors-on-exit
- sairá com código zero, mesmo em caso de erro.--ignore-violations-on-exit
- sairá com código zero, mesmo se alguma violação for encontrada.--cache
- ativará o cache de resultados. O padrão será .phpmd.result-cache.php
no diretório de trabalho atual.--cache-file
- em cooperação com --cache
substituirá o caminho do arquivo de cache de resultados padrão de .phpmd.result-cache.php
pelo caminho do arquivo fornecido.--cache-strategy
- define a estratégia de cache para determinar se um arquivo ainda está atualizado. Conteúdo para basear-se no conteúdo do arquivo ou carimbo de data/hora para basear-se no carimbo de data/hora modificado do arquivo.--generate-baseline
- gerará um phpmd.baseline.xml
para violações existentes próximo ao arquivo de definição do conjunto de regras. Os caminhos dos arquivos das violações serão relativos ao diretório de trabalho atual.--update-baseline
- removerá todas as violações de um phpmd.baseline.xml
existente que não existe mais. Novas violações _não_ serão adicionadas. O caminho do arquivo das violações será relativo ao diretório de trabalho atual.--baseline-file
- o caminho do arquivo para um arquivo xml de linha de base personalizado. Se ausente, o padrão será phpmd.baseline.xml
--color
- ativa a cor na saída, por exemplo, o renderizador de texto mostrará o nome da regra em amarelo e a descrição do erro em vermelho.--extra-line-in-excerpt
- especifica quantas linhas extras são adicionadas a um trecho de código no formato htmlUm exemplo de linha de comando:
phpmd PHP/Depend/DbusUI xml codesize --reportfile "phpmd.xml" --suffixes "php,phtml"
As opções podem ser antes ou depois dos argumentos. Eles podem ser separados de seu valor com um espaço ou um sinal de igual ( =
). Assim, a seguinte sintaxe é equivalente à anterior:
phpmd --reportfile="phpmd.xml" --suffixes="php,phtml" PHP/Depend/DbusUI tamanho do código xml
Strings começando com -
serão reconhecidas como nomes de opções. Se você tiver argumentos começando com -
, defina as opções primeiro e depois use --
para marcar o início explícito ou a lista de argumentos:
phpmd --reportfile "phpmd.xml" --suffixes "php,phtml" -- -foo/Folder xml codesize
PHPMD usa os chamados conjuntos de regras que configuram/definem um conjunto de regras que serão aplicadas à fonte em teste. A distribuição padrão do PHPMD já vem com alguns conjuntos padrão, que podem ser usados imediatamente. Você pode chamar a ferramenta cli do PHPMD com um nome de conjunto para aplicar esta configuração:
~ $ phpmd /caminho/para/tamanho do código do texto fonte
Mas e se você quiser aplicar mais de um conjunto de regras à sua fonte? Você também pode passar uma lista de nomes de conjuntos de regras, separados por vírgula, para a ferramenta cli do PHPMD:
~ $ phpmd /caminho/para/tamanho do código de texto fonte,código não utilizado,nomeação
Você também pode combinar arquivos de conjuntos de regras personalizados com conjuntos de regras integrados:
~ $ phpmd /caminho/para/tamanho do código de texto de origem,/my/rules.xml
É isso. Com este comportamento você pode especificar sua própria combinação de conjuntos de regras que verificarão o código-fonte.
PHPMD também permite especificar vários diretórios de origem caso você queira criar uma saída para certas partes do seu código
~ $ phpmd /path/to/code,index.php,/another/place/with/code texto codesize
Ou use o padrão glob:
~ $ phpmd src/main/php/*/*/*{Renderer,Node}.php text my/rules.xml
PHPMD também pode ler a entrada padrão stdin:
~ $ cat src/MeuServiço.php | phpmd - texto meu/rules.xml
Portanto, o código PHP a ser verificado pode ser gerado por outro programa, não necessariamente para ser armazenado em arquivo.
A ferramenta de linha de comando do PHPMD atualmente define quatro códigos de saída diferentes.
--ignore-violations-on-exit
, que resultará em 0 mesmo se alguma violação for encontrada.No momento o PHPMD vem com os seguintes renderizadores:
Para projetos existentes, uma linha de base de violação pode ser gerada. Todas as violações nesta linha de base serão ignoradas em inspeções futuras.
A abordagem recomendada seria um phpmd.xml
na raiz do projeto. Para gerar o phpmd.baseline.xml
próximo a ele:
~ $ phpmd /caminho/para/texto de origem phpmd.xml --generate-baseline
Para especificar um caminho de arquivo de linha de base personalizado para exportação:
~ $ phpmd /caminho/para/fonte texto phpmd.xml --generate-baseline --baseline-file /caminho/para/fonte/phpmd.baseline.xml
Por padrão, o PHPMD procurará phpmd.xml
ao lado de phpmd.baseline.xml
. Para substituir esse comportamento:
~ $ phpmd /caminho/para/fonte texto phpmd.xml --baseline-file /caminho/para/fonte/phpmd.baseline.xml
Para limpar um arquivo de linha de base existente e remover apenas violações que não existem mais:
~ $ phpmd /caminho/para/texto de origem phpmd.xml --update-baseline
Disponível como parte da assinatura Tidelift.
Os mantenedores do PHPMD
e de milhares de outros pacotes estão trabalhando com o Tidelift para fornecer suporte comercial e manutenção para as dependências de código aberto que você usa para construir seus aplicativos. Economize tempo, reduza riscos e melhore a integridade do código, pagando aos mantenedores pelas dependências exatas que você usa. Saber mais.
Se você quiser contribuir com o PHPMD, consulte o guia de contribuições.