Este projeto SonarSource é um analisador de código estático para a linguagem PHP usada como uma extensão da plataforma Sonarqube. Ele permitirá que você produza um código limpo estável e facilmente suportado, ajudando você a encontrar e corrigir bugs, vulnerabilidades e cheiros de código.
Para fornecer feedback (solicite um recurso, relate um bug, etc.), use o fórum da comunidade SONARSource. Não se esqueça de especificar o idioma (PHP!), Versão do plug -in e versão Sonarqube.
Se você tiver uma pergunta sobre como usar o plug -in (e os documentos não o ajudarem), também o incentivamos a usar o fórum da comunidade.
Para solicitar um novo recurso, crie um novo tópico no fórum da comunidade Sonarsource. Mesmo se você planeja implementá -lo e enviá -lo de volta à comunidade, inicie um novo tópico primeiro para ter certeza de que podemos acompanhá -lo.
Para enviar uma contribuição, crie uma solicitação de tração para este repositório. Certifique -se de seguir nosso estilo de código e que todos os testes estão passando.
Se você tem uma ideia para uma regra, mas não tem certeza de que todos precisam, pode implementar uma regra personalizada disponível apenas para você.
newIssue adicionado adicionado à interface da API CheckContextPHPCustomRulesDefinition foi removido, foi obsoleto desde a versão 2.13 (março de 2018)ParameterTree#type() está depreciado. Use ParameterTree#declaredType() em vez disso.ReturnTypeClauseTree#type() está depreciado. Use ReturnTypeClauseTree#declaredType() .ClassPropertyDeclarationTree#typeAnnotation() está depreciado. Use ClassPropertyDeclarationTree#declaredType() .CatchBlockTree#variable() agora pode retornar NULL .FunctionCallTree#arguments() está depreciado. Use FunctionCallTree#callArguments() em vez disso.AnonymousClassTree#arguments() está depreciado. Use AnonymousClassTree#callArguments() .CallArgumentTree . Esta árvore envolve expressões passadas como argumentos agora.ThrowExpressionTree .MatchExpressionTree .ParameterTree agora tem um método visibility .Para executar testes, siga localmente estas instruções.
Para construir o plug -in e executar seus testes de unidade, execute este comando do diretório raiz do projeto:
./gradlew build Para executar testes de integração, você precisará criar um arquivo de propriedades como o mostrado abaixo e definir sua localização em uma variável de ambiente nomeada ORCHESTRATOR_CONFIG_URL .
# version of SonarQube server
sonar.runtimeVersion =9.9Antes de executar qualquer um dos testes de integração, verifique se os submódulos estão verificados:
git submodule update --initO "Plugin Test" é um teste de integração adicional que verifica recursos do plug -in, como cálculo métrico, cobertura etc. para iniciá -lo:
./gradlew its:plugin:integrationTestO "teste de decisão" é um teste de integração especial que inicia a análise de uma base de código grande, salva os problemas criados pelo plug -in nos arquivos de relatório e compara esses resultados ao conjunto de problemas esperados (armazenados como arquivos JSON). Para iniciar o teste de domingo:
./gradlew its:ruling:integrationTestEste teste oferece a oportunidade de examinar os problemas criados por cada regra e verifique se eles são o que você espera. Você pode inspecionar questões novas/perdidas verificando o URL local Sonarqube mencionado nos logs no final da análise. Se tudo parecer bom para você, você pode copiar o arquivo com os problemas reais localizados em
sonar-php/its/ruling/target/actual/
no diretório com os problemas esperados
sonar-php/its/ruling/src/test/resources/expected/
Para atualizar todas as descrições de regras:
./gradlew ruleApiUpdatePara buscar arquivos estáticos para uma regra sxxxx da RSPEC:
./gradlew ruleApiGenerateRule -Prule=SXXXX O mesmo para uma filial RSPEC específica ( master por padrão):
./gradlew ruleApiGenerateRule -Prule=SXXXX -Pbranch=my-branchCopyright 2010-2024 SONARSource.
Os analisadores do Sonarqube divulgados após 29 de novembro de 2024, incluindo correções de patches para versões anteriores, são publicados sob a licença Sonar Source-Alowable versão 1 (SSALV1).
Consulte arquivos individuais para obter detalhes que especificam a licença aplicável a cada arquivo. Os arquivos sujeitos ao SSALV1 serão observados em seus cabeçalhos.