/lint-tutorial

Creative Commons Zero v1.0 UniversalCC0-1.0

O que é um linter

Linters são ferramentas de análise estática de código que servem para detectar problemas semânticos do código que o compilador não pode detectar e que podem prejudicar a execução do programa ou a manutenibilidade do código. Linters possuem configurações que podem ser personalizadas para determinar como inspecionar o código através de regras e níveis assim determinando padrões de escrita de código.

Uma regra diz qual tipo de padrão o linter deve inspecionar no código. Existem regras para os mais diversos padrões, por exemplo: usar nomes camelCase, uso de notações de tipo (em linguagens dinâmicas), checar tamanho das funções, checagem de valores nulos, proibir uso de certos métodos, etc.

Para cada regra se define o nível de severidade de uma infração dessa regra, em geral os níveis são: desligado, alerta e erro. Podemos configurar uma regra para usar nomes de função snake_case com nível de erro. Desse modo, ao escrever um código como o baixo:

function DoSomething() {
    // ...
}

Um linter como ESLint emitiria um erro informando que o nome da função não atende ao padrão

Configurando Linters

Javascript ESLint

Referência https://eslint.org/

Adicione o ESLint ao seu projeto Node com

npm install --save-dev eslint @eslint/js

Crie o arquivo de configurações eslint.config.js e inicie com o setup padrão:

import js from "@eslint/js";

export default [
    js.configs.recommended,
{
    rules: {
        "no-unused-vars": "warn",
    }
}
];

No campo rules é onde são feitas as configurações de quais regras o ESLint deve adotar quando executar a verificação do seu projeto. Veja todas opções de configuração e a lista de regras.

Para executar o linter rode (na raiz do projeto):

npx eslint . # vai analisar todos arquivos do diretório atual
npx eslint . --fix # analisa e corrige os arquivos 

Editores de texto tem suporte a extensões para integrar o ESLint ao seu fluxo de trabalho. A extensão ESLint do VS Code executa a análise em tempo real, mostra problemas no código e fornece ações de código para aplicar correções.

Python Pylint

Referência https://www.pylint.org/

Instale o pylint disponível no PyPI

pip install pylint

Crie o arquivo de configurações padrão

pylint --generate-rcfile

O arquivo é dividido em seções, uma para cada verificador (checker), você pode ver os diferentes recursos (no formato de opções para a linha de comando) e mais detalhes

Você pode passar as opções de linha de comando para o comando pylint --generate-rcfile e assim gerar um arquivo com as opções desejadas.

Para executar o linter rode (na pasta do projeto):

pylint . # vai analisar todos arquivos no diretório atual

Editores de texto tem suporte a extensões para integrar o Pylint ao seu fluxo de trabalho. A extensão Pylint do VS Code executa a análise em tempo real, mostra problemas no código e fornece ações de código para aplicar correções.

Rust Clippy

Referência https://doc.rust-lang.org/clippy/

Clippy já vem instalado como um componente na instalação padrão do Rustup. Caso não o tenha, adicione com:

rustup component add clippy

Modifique o arquivo Cargo.toml do seu projeto para incluir duas novas seções:

[lints.rust]

[lints.clippy]

O rust possui um linter nativo (bastante simples), suas regras podem ser configuradas na primeira seção. Já as regras de linting adicionadas pelo Clippy devem ficar na seção [lints.clippy] Verifique a documentação completa sobre configuração e regras.

Para executar o linter rode (na pasta do projeto):

cargo clippy

Kotlin Ktlint

Referência https://pinterest.github.io/ktlint/latest/

Diferentemente de outros linters, o Ktlint é recomendado para ser instalado como um plugin do seu editor de texto. Para instalar o plugin no IntelliJ IDEA, vá em File > Settings > Plugins > Marketplace e procure por Ktlint e instale. Basicamente nenhuma configuração é necessária, o plugin já vem com as regras padrão que são recomendadas como forma de verdadeiramente padronizar o estilo de código.

A verficação e formatação do código é feita automaticamente pelo plugin.