Introdução — Ktlint
Kitlint é uma ferramenta de Checkstyle para Kotlin que não necessita de configuração ao ser adicionado no projeto. Seu objetivo é realizar o processo de análise estática de código para identificar possíveis erros de formatação. Para utilizar essa ferramenta, é necessário realizar a integração no projeto através do Gradle ou baixar o JAR executável e utilizar as Tasks geradas para realizar as análises, também é possível customizar suas Tasks para adequar ao projeto e suas particularidades.
Funcionalidades
- Sem configurações: não é necessário configurar nada mais alem da task que iremos executar;
- Regras padrões: já existem regras criadas pelos próprios desenvolvedores do Ktlint (seguindo o style guide do Kotlin);
- Regras experimentais: é possível criar novas regras seguindo o padrão de código Visitor;
- Danger integration: através do relatório gerado pelo Ktlint é possível envia-lo para o Danger interpretar e comentar nos Pull Requests.
Integração
Iremos criar um package chamado config no root do projeto, que irá conter todas configurações relacionadas a Análise Estática;
Devemos criar o arquivo ktlint.gradle que irá conter as configurações da Task que iremos executar para obter o relatório da análise, ele estará localizado no diretório config/ktlint/;
Após criar o ktlint.gradle, iremos incluir as dependências em nosso build.gradle (.):
Para finalizar, devemos incluir o ktlint.gradle em nosso build.gradle (app) através da linha: apply from: “${rootDir}/config/ktlint/ktlint.gradle” (essa linha será incluída embaixo das linhas com "apply plugin …"). Assim poderemos executar a task ktlintVerification.
Agora podemos conferir o resultado da task (executando ./gradlew ktlintVerification) através do exemplo:
O resultado será exibido no terminal em que a task for executada, neste exemplo vemos que foram detectados infrações relacionadas a WildcardImports (import java.*), Unnecessary Block ({}) e NewLineAtEndOfFile (Ausência de uma linha em branco no final do código).
Repositório: https://github.com/sp4wna1/StaticAnalysis