Qodana logo

Qodana

The code quality platform for teams

Java Kotlin News Releases

Saiu o Qodana 2022.3 EAP: Qodana para .NET e Go, e mais de 100 novas inspeções

Read this post in other languages:

 

Temos o prazer de anunciar o lançamento do Qodana 2022.3 EAP. Esta versão da plataforma oferece suporte para .NET e Go. Também adicionamos mais de 100 novas inspeções para as linguagens que já tinham suporte. Porém, as imagens do Qodana 2022.2 são mais estáveis, pois o Qodana 2022.3 EAP ainda está no estágio inicial.

 

Continue lendo para saber mais e tornar-se um usuário pioneiro de alguns novos recursos empolgantes!

 

 


INTRODUÇÃO AO QODANA

 

Nossos novíssimos linters trazem todos os recursos do Rider e do GoLand para permitir que você identifique código anômalo e bugs em potencial, elimine código inútil, melhore a estrutura geral do código e introduza as melhores práticas por todos os seus projetos de .NET e Go!

 

Qodana para .NET

 

O Qodana dá suporte a quase todas as inspeções de .NET oferecidas pelo Rider. Como a lista dessas inspeções é longa, confira a documentação do Rider para saber mais sobre todas as inspeções. Enquanto isso, veja abaixo alguns exemplos das inspeções de .NET que o Qodana pode executar.

 

Ordenação de locks inconsistentes

 

Um dos maiores problemas ao se usar locks para garantir a segurança das threads é evitar travamentos mútuos, ou seja, quando as threads simultaneamente impedem umas às outras de continuar a execução, de modo que esta não avança. Com esta nova inspeção, o Qodana realça os ciclos que puderem levar a possíveis travamentos mútuos em tempo de execução.

 

 

Acesso a variáveis capturadas modificadas

 

O Qodana para .NET detecta acessos a variáveis capturadas a partir de um método anônimo, quando essas variáveis forem modificadas externamente.

 

 

Evitar usar expressões lambda “async” quando o tipo Delegate retornar “void”

 

Esta inspeção detecta o uso de expressões lambda “async”. Se houver quaisquer exceções não tratadas pela expressão lambda, elas nunca afetarão a thread que fez a chamada e não serão pegas pela cláusula “catch”.

 

 

Verificações de tipo e casts podem ser combinados

 

O operador de teste de tipo is, na sua forma clássica (Expressão is Tipo), retornará verdadeiro apenas quando o tipo de execução da Expressão for compatível com o Tipo e o resultado da Expressão não for null.

 

Quando se usa is para verificar a compatiblidade antes do casting, como no exemplo abaixo, encontramos pelo menos dois problemas:

 

  • A verificação de tipo é executada duas vezes sem necessidade, o que pode afetar o desempenho, se isto for feito dentro de um loop.
  • O fato de que a execução do programa não chegará ao comando if se obj for null não fica imediatamente claro para quem está lendo o código.

O Qodana detectará esse problema e sugerirá que você o corrija no Rider.

 

 

Uma expressão lambda ou método anônimo não deve ter capturas do contexto externo

 

Uma expressão lambda ou método anônimo passado a um parâmetro anotado pelo atributo “[RequireStaticDelegate]” não deve ter capturas do contexto que o contém (variáveis e funções locais, referências “this”), para evitar alocações de heap.

 

 

Para configurar o linter para .NET e executar análises, consulte a documentação do Qodana.

 

Qodana para Go

 

O Qodana 2022.3 foi projetado para dar suporte a todas as inspeções oferecidas pelo GoLand. Para ver a lista completa dessas inspeções, consulte a documentação do GoLand. Veja abaixo alguns exemplos de inspeções do Go que agora têm suporte no Qodana.

 

Placeholder argument ‘d.DeletedCount’ has the wrong type ‘int64’ (%s)

 

Esta inspeção alerta para usos incorretos de fmt.Printf, fmt.Println e outras funções semelhantes de formatação e impressão.

 

Em suas strings de formato, funções de formatação usam verbos de formatação, como %s, %d, %v e outros.

 

Se esses verbos de formatação forem usados incorretamente, o resultado de uma função de formatação conterá um erro.

 

 

Unhandled error

 

Esta inspeção alerta para chamadas a funções e métodos que não são capazes de tratar o resultado de chamadas do tipo error.

 

Uma API dessas funções implica que sua execução pode terminar em falha e retornar um erro. Chamadas que não tratam resultados que contêm erros podem ser uma indicação de mau uso da API.

 

 

Unused dependency

 

Esta inspeção alerta para dependências sem uso no seu projeto. É uma boa prática verificar regularmente a existência de dependências não usadas, pois isso reduz o tamanho das bibliotecas do seu projeto e facilita a manutenção.

 

 

Para ver o Qodana em ação e brincar com essas novas inspeções, fique à vontade para mergulhar na nossa documentação e ver como configurar linters para o Go.

 

Novas inspeções

 

Além de adicionar novos linters para .NET e Go, o Qodana 2022.3 também traz mais de 100 novas inspeções para os linters já existentes. Vamos dar uma olhada nos exemplos de maior destaque das inspeções para Java, Kotlin e Python.

 

Inspeções Java e Kotlin

 

Adicionamos mais de 40 novas inspeções ao Qodana para JVM Community e o Qodana para JVM.

 

DataFlowIssue

 

Esta inspeção alerta para construtos de código que sempre violam contratos de nulidade possível, podem criar exceções ou são redundantes, com base em uma análise do fluxo de dados.

 

EscapedSpace

 

O Java 15 introduziu a sequência de escape s em strings para tornar visíveis espaços em branco ao final de blocos de texto. Na maioria dos outros contextos, especialmente em expressões regulares, esta sequência de escape pode ser confundida facilmente com o s de uma expressão regular, que significa um espaço em branco. Nos literais de strings em Java, ele tem que ser grafado como \s, para diferenciar.

 

MismatchedJavadocCode

 

Esta inspeção alerta para casos em que o Javadoc de um método contradiz de forma óbvia a assinatura do método, como, por exemplo, um comentário dizendo que “retorna verdadeiro” quando o método retorna uma string.

 

Destructure

 

Esta inspeção alerta para declarações em Kotlin que podem ser desestruturadas.

 

UnresolvedRestParam

 

Agora o Qodana pode detectar declarações inconsistentes de métodos em serviços REST (tais como parâmetros @PathParam que não correspondem a um placeholder da anotação @Get), pois essas declarações gerariam exceções em tempo de execução. 

 

ReactiveStreamsThrowInOperator

 

Esta nova inspeção detecta declarações throw em código de operador de Reactor/RxJava, em vez de retornar valores de erros determinados, o que evita que os erros continuem a ser processados. Por exemplo, a inspeção ignora esses erros ou os muda para um valor substituto padrão.

 

 

 

Observe que esta versão do Qodana também traz todas as novas inspeções para Android do IntelliJ IDEA 2022.3 e do Android Studio — Electric Eel | 2022.1.1.

 

Inspeções para Python

 

Também adicionamos ao Qodana para Python algumas inspeções para o Google App Engine. Essas inspeções realçarão problemas antes que eles causem falhas em ambientes de produção. Por exemplo, agora você pode detectar:

 

  • Consultas GQL que não obedecem as restrições de consultas permitidas no servidor do Google App Engine.
  • Consultas GQL sem índices.
  • Usos de recursos do Python que são restritos pela sandbox do Google App Engine.
  • Casos em que “threadsafe” não está habilitado no tratador de CGI.

Para excluir determinadas inspeções da sua análise, você pode personalizar seu perfil de inspeção padrão ou criar um novo. Talvez você também queira impor inspeções que forem importantes para as suas diretrizes de programação. Confira nossa Documentação do Qodana para obter mais informações.

 

Isso é tudo a respeito do Qodana 2022.3 EAP! Esperamos que você goste desta nova versão. Se você tiver alguma sugestão para futuros temas de blog ou se quiser saber mais sobre como o Qodana pode ajudar você e a sua empresa, poste um comentário aqui, marque-nos no Twitter ou entre em contato conosco em qodana-support@jetbrains.com.

 

Bom desenvolvimento e mantenha seu código limpo!

 

A equipe do Qodana

Artigo original em inglês por:

 

image description

Discover more