Trilha de aprendizado · Nível 8 · Tutorial 8

Padronizar a formatação do código com Ruff

Aplicar uma formatação consistente aos arquivos Python e verificar sua conformidade sem confundir padronização visual com correção do programa.

  • Nível: Iniciante
  • Duração: 10 min
  • 7 passos
Padronizar a formatação do código com Ruff

Passo 1 de 7

O que a formatação automática resolve

Diferencie a padronização visual do código da verificação de seu comportamento.

Apresentação consistente

A formatação automática aplica um padrão consistente à apresentação do código: espaços, aspas, recuos, quebras de linha e disposição de expressões. Ela facilita a leitura, mas não decide se o programa produz o resultado correto.

Comparação entre um código visualmente irregular e o mesmo código organizado, com os elementos lógicos preservados.

A organização visual muda; as operações e os valores permanecem os mesmos.

A aparência muda, a lógica permanece

Considere uma função que deveria descontar um valor do preço. Antes da formatação, ela está visualmente inconsistente:

Antes

python
def aplicar_desconto(preco,desconto):
    mensagem='Desconto aplicado'
    return preco+desconto,mensagem

Depois

python
def aplicar_desconto(preco, desconto):
    mensagem = "Desconto aplicado"
    return preco + desconto, mensagem

Exemplo

O defeito continua no código formatado

Com preco = 100 e desconto = 20, a função continua calculando 100 + 20 e devolvendo 120. Para produzir 80, seria necessário trocar o operador + por - — uma mudança de lógica, não de formatação. Testes continuam necessários para verificar o comportamento esperado.

Formatação ou mudança de lógica?

Trocar + por - para corrigir o cálculo é apenas uma mudança de formatação.

Resumo

Ideia central

  • Formatação automática padroniza a apresentação do código.
  • Código bem formatado ainda pode produzir resultados incorretos.
  • O formatador não corrige a intenção do programa nem substitui os testes.

Passo 2 de 7

Preparar o Ruff e delimitar os arquivos

Instale e confirme o Ruff, monte um projeto mínimo local e defina quais arquivos farão parte da prática.

Disponibilize o Ruff no ambiente

Instale e confirme

No computador, abra o terminal com o ambiente do projeto ativado. Crie uma pasta exclusiva para esta prática, entre nela e execute os comandos abaixo. O primeiro instala o Ruff; o segundo confirma que ele está disponível no mesmo ambiente.

Instalação e confirmação

shell
python -m pip install ruff
python -m ruff --version

Dica

Antes de continuar

A confirmação deve exibir uma versão do Ruff. Se o comando falhar, verifique se a instalação e a execução estão usando o mesmo ambiente Python. Ainda não execute o formatador.

Crie o projeto mínimo

Dois arquivos para a prática

Na raiz da pasta exclusiva, crie operacoes.py. Depois, crie a pasta tests e, dentro dela, test_operacoes.py. Copie os conteúdos completos a seguir sem corrigir os espaços, as quebras de linha ou a disposição das expressões: essas inconsistências serão usadas nos próximos passos.

operacoes.py

Salve este conteúdo na raiz da pasta do projeto.

python
def somar(valores):
    return sum( valores )


def aplicar_desconto(valor,percentual):
    fator=1-(percentual/100)
    return valor*fator

tests/test_operacoes.py

Salve este conteúdo dentro da pasta tests.

python
from operacoes import aplicar_desconto,somar


def test_somar_valores():
    assert somar([10,20,5])==35


def test_aplicar_desconto():
    resultado=aplicar_desconto(200,10)
    assert resultado==180

Registre o ponto de partida

Execute os testes antes da formatação

A partir da pasta que contém operacoes.py, execute python -m pytest. Registre quantos testes passaram ou falharam. Esse resultado inicial permitirá uma comparação após a formatação. O código está sintaticamente válido, embora sua apresentação seja inconsistente.

Execução inicial

shell
python -m pytest

Alvos da prática

A seleção deve incluir o módulo operacoes.py e a pasta tests. Uma pasta .venv, caso exista, contém arquivos do ambiente e não pertence ao alvo desta prática.

Árvore de diretórios com operacoes.py e a pasta tests destacados, enquanto .venv aparece separada e fora da seleção.

Selecione explicitamente o código do projeto; não inclua o ambiente virtual nem dependências externas.

Escolha os caminhos com cuidado

Quais caminhos devem ser selecionados?

Na raiz há operacoes.py, tests/ e .venv/. Qual seleção delimita corretamente os arquivos desta prática?

Passo 3 de 7

Antecipar as mudanças com --diff

Use o Ruff para visualizar uma comparação entre o conteúdo atual e a formatação proposta, sem gravar alterações no arquivo.

Visualize sem modificar

Uma prévia da formatação

Na pasta do projeto, execute o Ruff com --diff para comparar o conteúdo atual de operacoes.py com a versão que o formatador produziria. Esse comando apenas exibe as mudanças propostas: o arquivo permanece como está.

Gerar a comparação

Execute no terminal aberto na pasta do projeto:

shell
python -m ruff format --diff operacoes.py

Dica

Confira no editor

Depois do comando, volte ao arquivo aberto no editor. Os espaços, as aspas e as quebras de linha originais ainda devem estar presentes, pois --diff não grava a versão proposta.

Leia a comparação

Antes e depois no terminal

Na comparação, uma linha iniciada por - representa a versão anterior, atualmente presente no arquivo. A linha correspondente iniciada por + mostra a versão proposta pelo Ruff. Outras linhas servem como contexto. O resultado exato depende do conteúdo de operacoes.py.

Exemplo de saída

Este recorte ilustra ajustes de espaços, aspas e disposição de um dicionário em várias linhas:

diff
-def criar_resumo(nome,total):
-    return {'cliente':nome,'total':total,'mensagem':'Compra processada com sucesso'}
+def criar_resumo(nome, total):
+    return {
+        "cliente": nome,
+        "total": total,
+        "mensagem": "Compra processada com sucesso",
+    }

Anatomia de um diff

Use os sinais e as cores como pistas para relacionar cada linha anterior à proposta correspondente.

Diagrama dividido entre a versão anterior, marcada com sinais de menos em vermelho, e a versão proposta, marcada com sinais de mais em verde, com um arquivo intacto ao lado.

O terminal mostra uma comparação; o conteúdo original continua no arquivo.

Interprete o resultado

Associe cada elemento

Relacione cada elemento da comparação ao seu significado.

Toque em um item e depois no par correspondente.

Passo 4 de 7

Aplicar a formatação em arquivos e pastas

Aplique o Ruff a um arquivo e a uma pasta, observe as mudanças gravadas e confirme a estabilidade em uma segunda execução.

Formatar um arquivo específico

Agora o Ruff vai gravar as mudanças

Na pasta do projeto, execute o comando abaixo. Diferentemente de --diff, ele aplica a formatação e salva o novo conteúdo em operacoes.py. Depois, confira o resumo exibido no terminal e reabra ou atualize o arquivo no editor para observar o resultado.

Aplicar a formatação ao módulo

bash
python -m ruff format operacoes.py

Do alvo selecionado ao arquivo formatado

Fluxo em que um arquivo Python e uma pasta de testes entram separadamente em um formatador e saem com as linhas visualmente alinhadas.

O caminho fornecido determina o alcance da operação; a saída formatada é gravada nos próprios arquivos.

Formatar uma pasta ou combinar alvos

O mesmo comando aceita diretórios

Para formatar os arquivos Python encontrados na pasta tests, informe a pasta como alvo. Também é possível selecionar o módulo e a pasta na mesma execução. Esses comandos gravam as alterações nos arquivos alcançados.

Formatar somente a pasta de testes

bash
python -m ruff format tests

Formatar módulo e testes juntos

bash
python -m ruff format operacoes.py tests

Dica

Leia o resumo

O Ruff informa quantos arquivos foram reformatados e quantos permaneceram inalterados. A redação exata pode variar conforme a versão, mas o resumo permite distinguir mudanças aplicadas de arquivos que já estavam no padrão.

Confirmar a estabilidade

Repita sem alterar o código

Execute novamente o comando combinado. Sem mudanças no código ou na configuração, o Ruff normalmente não encontra nada novo para reformatar. Essa estabilidade significa que reaplicar o mesmo padrão não deve gerar alterações sucessivas.

Segunda execução

bash
python -m ruff format operacoes.py tests

Atenção

Revise o que foi gravado

O término bem-sucedido do formatador confirma que a operação foi executada, não que o programa está correto. Por enquanto, observe o resumo e compare visualmente os arquivos; a revisão completa e os testes serão retomados adiante.

Registre o que aconteceu

Relato da prática

Execute a formatação de operacoes.py e da pasta tests. Em seguida, repita o comando combinado e descreva: quais comandos você usou, o que percebeu nos arquivos e o que o resumo informou na segunda execução.

Escreva pelo menos 80 caracteres (0/80).

Passo 5 de 7

Verificar a conformidade sem escrever

Use --check para verificar se arquivos e pastas seguem a formatação do Ruff sem modificar seu conteúdo.

Verifique os alvos selecionados

Depois de aplicar a formatação, use --check para verificar o módulo e a pasta de testes. O Ruff examina os arquivos selecionados e informa se estão no padrão, mas não grava alterações.

Execute na pasta do projeto

shell
python -m ruff format --check operacoes.py tests

Dica

Observe a posição da opção

Neste comando, --check pertence ao subcomando format. A análise estática de estilo e possíveis defeitos é outro uso do Ruff, que será estudado no próximo tutorial.

Aplicar, visualizar ou verificar

Os três comandos têm finalidades diferentes: format grava a padronização; format --diff mostra as mudanças propostas sem gravá-las; format --check apenas informa se os arquivos selecionados estão conformes.

Três finalidades do formatador

Diagrama com três caminhos: um grava alterações no arquivo, outro apresenta uma comparação e o terceiro somente verifica o arquivo sem modificá-lo.

Aplicar altera o arquivo; visualizar e verificar preservam seu conteúdo.

Exemplo

Como interpretar as mensagens

Se o Ruff informar que os arquivos já estão formatados, os alvos estão conformes. Se informar que um arquivo seria reformatado, ele está fora do padrão — e continua inalterado porque foi usado --check. A redação e os totais exibidos podem variar conforme a versão e os arquivos examinados.

Confirme a interpretação

Complete o comando

python -m ruff format ____ operacoes.py tests

Interprete o resultado

O comando com --check informa que operacoes.py seria reformatado. O que isso significa?

Passo 6 de 7

Revisar as alterações e executar os testes

Compare os arquivos formatados com o conteúdo original e execute novamente os testes para verificar os comportamentos cobertos.

Revise o que mudou

Compare apresentação e lógica

Abra operacoes.py e tests/test_operacoes.py no editor e compare-os com os conteúdos originais apresentados no início da prática. Não é necessário usar Git.

Espaços, aspas, quebras de linha e disposição de expressões podem ter mudado. Já nomes, valores, operadores e regras do programa devem continuar iguais.

O foco da revisão

Observe a diferença entre mudanças visuais esperadas e elementos da lógica que precisam permanecer intactos.

Comparação lado a lado de dois trechos Python com diferenças de espaços, aspas e quebras de linha, mas com nomes, valores e operadores equivalentes.

A formatação reorganiza a apresentação; a revisão confirma que os elementos da lógica foram preservados.

Atenção

Não ignore diferenças inesperadas

Se você encontrar mudança em um nome, valor, operador ou regra, interrompa a conclusão da prática e investigue. O término do comando de formatação, sozinho, não comprova que está tudo correto.

Execute os testes novamente

Compare com o resultado inicial

Na pasta do projeto e com o mesmo ambiente usado anteriormente, execute novamente toda a suíte. Compare a quantidade de testes e o resultado final com o registro feito antes da formatação.

Teste após a formatação

Execute no terminal, a partir da pasta do projeto:

shell
python -m pytest

Dica

O que a aprovação demonstra

Se os mesmos testes continuarem aprovados, isso fornece evidência de que os comportamentos cobertos por eles foram preservados. Não é uma garantia de ausência de defeitos em cenários que os testes não verificam.

Registre as evidências

Relate sua revisão

Quais diferenças de apresentação você observou? Qual foi o resultado dos testes antes e depois da formatação? Explique também por que testes aprovados não garantem a ausência de todos os defeitos.

Escreva pelo menos 80 caracteres (0/80).

Resumo

Critérios de conclusão

A formatação só deve ser considerada revisada quando as alterações visuais forem compreendidas e os testes forem executados novamente.

  • Compare os arquivos formatados com os conteúdos originais.
  • Confirme que nomes, valores, operadores e regras não mudaram.
  • Compare o resultado do pytest antes e depois.
  • Investigue qualquer diferença inesperada ou falha de teste.

Passo 7 de 7

Concluir um ciclo de padronização

Aplique o fluxo completo do Ruff no projeto local, registre os resultados e confirme a formatação e os testes.

Prepare o desafio final

Uma nova versão para formatar

Na pasta do projeto usada durante o tutorial, substitua somente o conteúdo de operacoes.py pelo código abaixo. Mantenha a pasta tests e os testes existentes. O programa está sintaticamente válido e preserva as funções da prática, mas sua apresentação está inconsistente.

Execute todos os próximos comandos a partir da pasta do projeto. Se os nomes ou testes do seu projeto foram alterados durante a prática, restaure primeiro os arquivos apresentados no tutorial.

operacoes.py

Copie todo o conteúdo para o arquivo operacoes.py.

python
def somar(a,b):
    return a+b


def subtrair(a,b):
    return a-b


def calcular_media(valores):
    return ( sum(valores) / len(valores) )


def formatar_resultado(nome,valor):
    return f'{nome}: {valor:.2f}'

O ciclo que você vai executar

O trabalho não termina quando o formatador grava o arquivo. O ciclo reúne inspeção, aplicação, revisão, verificação e testes.

Diagrama visual de um arquivo Python passando pela visualização de diferenças, formatação, revisão, verificação e execução de testes.

A conformidade de formatação e o resultado dos testes são evidências diferentes e complementares.

Organize o fluxo

Ordene os comandos

Coloque os comandos na ordem adequada para verificar a situação inicial, visualizar a proposta, aplicar a formatação e confirmar a situação final.

  1. python -m ruff format operacoes.py tests
  2. python -m ruff format --check operacoes.py tests
  3. python -m ruff format --check operacoes.py tests
  4. python -m ruff format --diff operacoes.py

Execute, revise e registre

Critérios de conclusão

Execute os quatro comandos na ordem organizada. Após o primeiro --check, confirme no editor que operacoes.py continua com a formatação inconsistente: essa opção não deve reescrever o arquivo.

Depois da formatação, revise no editor os espaços, as aspas e a disposição das expressões. Confirme que nomes, valores, operadores e regras não sofreram mudanças inesperadas. Por fim, execute python -m pytest e compare o resultado com a execução inicial feita antes da formatação.

Se aparecer uma alteração inesperada ou um teste falhar, investigue antes de considerar o ciclo concluído.

Relatório da prática

Sem enviar arquivos, registre: os comandos usados; o que o primeiro --check informou; como você confirmou que ele não reescreveu o arquivo; as mudanças vistas no --diff; o resultado da formatação e da revisão; a resposta do último --check; e o resultado do pytest.

Escreva pelo menos 120 caracteres (0/120).

Síntese do tutorial

Resumo

Um ciclo completo de padronização

Você concluiu o fluxo de formatação com alvos explícitos e verificações complementares.

  • python -m ruff format --diff antecipa as mudanças sem gravá-las.
  • python -m ruff format aplica a formatação aos arquivos e diretórios selecionados.
  • python -m ruff format --check verifica a conformidade sem reescrever os arquivos.
  • A revisão ajuda a detectar mudanças inesperadas, enquanto os testes avaliam os comportamentos cobertos.
  • Ruff padroniza a apresentação do código; formatação consistente não comprova que o programa está correto.

Tutorial concluído

Parabéns! Você concluiu: Padronizar a formatação do código com Ruff

Ciclo concluído! Agora você consegue padronizar código Python com Ruff sem confundir formatação, revisão e testes.

100 XP

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso