Agent skill
lint
Python Linter (user)
Install this agent skill to your Project
npx add-skill https://github.com/diegofornalha/skills-futuro/tree/main/lint
SKILL.md
Python Linter
Executa análise de qualidade de código Python usando ferramentas de linting e formatação.
Propósito
Esta skill automatiza a verificação de qualidade do código Python executando múltiplas ferramentas:
- black - Formatação de código
- flake8 - Style guide enforcement (PEP 8)
- isort - Ordenação de imports
- pylint - Linting abrangente
- mypy - Type checking (opcional)
Como Usar
Modo Rápido (Recomendado)
/lint
Executa verificação completa com todas as ferramentas disponíveis.
Modo Check-Only (Sem modificar arquivos)
/lint --check
Apenas reporta problemas, não aplica correções.
Modo Fix (Auto-correção)
/lint --fix
Aplica correções automáticas sempre que possível.
Escopo Específico
/lint --path src/
Executa linting apenas no diretório especificado.
Fluxo de Execução
A skill segue esta ordem de execução:
┌─────────────────────────────────────────────────┐
│ PIPELINE DE LINTING │
│ │
│ 1. black --check (formatação) │
│ ↓ │
│ 2. isort --check (imports) │
│ ↓ │
│ 3. flake8 (style guide) │
│ ↓ │
│ 4. pylint (linting completo) │
│ ↓ │
│ 5. [OPCIONAL] mypy (type checking) │
│ │
│ Resultado: Resumo de todos os problemas │
└─────────────────────────────────────────────────┘
Ferramentas
1. Black (Formatação)
O que verifica:
- Line length (88 caracteres por padrão)
- Indentação consistente
- Quotes uniformes
- Trailing commas
Comandos executados:
# Check mode (padrão)
black --check .
# Fix mode
black .
# Arquivo específico
black src/main.py
Configuração recomendada (pyproject.toml):
[tool.black]
line-length = 88
target-version = ['py311']
include = '\.pyi?$'
extend-exclude = '''
/(
# directories
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| build
| dist
)/
'''
2. isort (Import Sorting)
O que verifica:
- Ordem de imports (stdlib → third-party → local)
- Agrupamento correto
- Linha em branco entre grupos
Comandos executados:
# Check mode
isort --check-only --diff .
# Fix mode
isort .
Configuração recomendada (pyproject.toml):
[tool.isort]
profile = "black"
line_length = 88
multi_line_output = 3
include_trailing_comma = true
force_grid_wrap = 0
use_parentheses = true
ensure_newline_before_comments = true
3. flake8 (Style Guide)
O que verifica:
- PEP 8 compliance
- McCabe complexity
- Naming conventions
- Unused imports/variables
Comandos executados:
flake8 . --max-line-length=88 --extend-ignore=E203,W503
Configuração recomendada (.flake8):
[flake8]
max-line-length = 88
extend-ignore = E203, W503, E501
exclude =
.git,
__pycache__,
.venv,
venv,
build,
dist,
*.egg-info
max-complexity = 10
per-file-ignores =
__init__.py: F401
tests/*: F811
4. pylint (Comprehensive Linting)
O que verifica:
- Code smells
- Refactoring opportunities
- Convention violations
- Potential bugs
Comandos executados:
pylint src/ --fail-under=8.0
Configuração recomendada (.pylintrc):
[MASTER]
ignore=CVS,.git,__pycache__,.venv
[MESSAGES CONTROL]
disable=
C0111, # missing-docstring
R0903, # too-few-public-methods
C0103, # invalid-name
[FORMAT]
max-line-length=88
[DESIGN]
max-args=7
max-attributes=10
max-branches=15
5. mypy (Type Checking - Opcional)
O que verifica:
- Type annotations corretas
- Type compatibility
- Missing type hints
Comandos executados:
mypy . --ignore-missing-imports
Configuração recomendada (pyproject.toml):
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
ignore_missing_imports = true
exclude = [
'venv',
'.venv',
'tests'
]
Interpretação de Resultados
✅ Sucesso (Score 10/10)
✅ black: All files formatted correctly
✅ isort: All imports sorted correctly
✅ flake8: No style violations found
✅ pylint: Score 10.0/10
⚠️ Warnings (Score 7-9/10)
⚠️ black: 3 files would be reformatted
⚠️ isort: 2 files would be reordered
✅ flake8: No violations
⚠️ pylint: Score 8.5/10
- src/main.py:45: C0301 (line-too-long)
- src/utils.py:12: W0612 (unused-variable)
❌ Errors (Score <7/10)
❌ black: 15 files would be reformatted
❌ isort: 8 files would be reordered
❌ flake8: 23 violations found
- E501: line too long (92 > 88 characters) × 12
- F401: imported but unused × 7
- W503: line break before binary operator × 4
❌ pylint: Score 6.2/10
- Multiple convention violations
- Code complexity issues
Auto-Fix Strategy
Quando executado com --fix, a skill:
-
black (auto-fix 100%)
- Reformata todos os arquivos automaticamente
-
isort (auto-fix 100%)
- Reordena imports automaticamente
-
flake8 (auto-fix 50%)
- Remove unused imports
- Fix trailing whitespace
- Alguns erros requerem correção manual
-
pylint (auto-fix 20%)
- Maioria requer intervenção manual
- Skill sugere correções específicas
Instalação de Dependências
Se as ferramentas não estiverem instaladas:
# Instalar todas as ferramentas
pip install black flake8 isort pylint mypy
# Ou via requirements-dev.txt
pip install -r requirements-dev.txt
requirements-dev.txt:
black==24.1.0
flake8==7.0.0
isort==5.13.2
pylint==3.0.3
mypy==1.8.0
flake8-docstrings==1.7.0
flake8-bugbear==24.1.0
Integração com CI/CD
GitHub Actions
name: Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install black flake8 isort pylint
- name: Run linters
run: |
black --check .
isort --check-only .
flake8 .
pylint src/ --fail-under=8.0
Pre-commit Hook
# .pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 24.1.0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.13.2
hooks:
- id: isort
- repo: https://github.com/pycqa/flake8
rev: 7.0.0
hooks:
- id: flake8
Boas Práticas
-
Execute antes de commit
bash/lint --fix git add . git commit -m "fix: apply linting fixes" -
Configure uma vez, use sempre
- Crie arquivos de configuração no projeto
- Commite as configurações (.flake8, pyproject.toml, .pylintrc)
-
Use em CI/CD
- Bloqueia PRs com code quality ruim
- Mantém padrão consistente no time
-
Progressive Enhancement
- Comece com black + isort (fácil)
- Adicione flake8 (médio)
- Gradualmente melhore score do pylint (difícil)
-
Ignore false positives
- Use
# noqapara suprimir warnings específicos - Configure exclusões por arquivo em .flake8
- Use
Troubleshooting
Black vs Flake8 conflitos
Problema: flake8 reclama de formatação que black considera correta
Solução: Configure flake8 para ser compatível com black:
[flake8]
extend-ignore = E203, W503
max-line-length = 88
isort vs Black conflitos
Problema: isort e black formatam imports diferente
Solução: Configure isort com profile black:
[tool.isort]
profile = "black"
Pylint score muito baixo
Problema: Score 3.5/10 em projeto legado
Solução: Progressive improvement:
- Desabilite algumas regras inicialmente
- Foque em bugs reais (E, F)
- Depois convenções (C, R, W)
Mypy demais erros
Problema: 500+ type errors em projeto sem type hints
Solução:
[tool.mypy]
ignore_missing_imports = true
disallow_untyped_defs = false # Gradualmente ative
Exemplo de Saída Completa
🔍 Python Linting - Análise de Qualidade de Código
📂 Escopo: . (current directory)
🔧 Modo: check (read-only)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1️⃣ BLACK (Code Formatting)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ All 47 files formatted correctly
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2️⃣ ISORT (Import Sorting)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 2 files need import reordering:
- src/main.py
- src/utils/helpers.py
Run with --fix to auto-correct
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3️⃣ FLAKE8 (Style Guide)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ 5 violations found:
src/main.py:45:10: E501 line too long (92 > 88)
src/main.py:78:1: F401 'os' imported but unused
src/utils/helpers.py:12:5: W0612 unused variable 'result'
src/config.py:23:80: E231 missing whitespace after ','
tests/test_main.py:5:1: F811 redefinition of unused 'mock'
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4️⃣ PYLINT (Comprehensive Linting)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Your code has been rated at 8.75/10
src/main.py:45: C0301 (line-too-long)
src/utils/helpers.py:12: W0612 (unused-variable)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 RESUMO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ black: PASS
⚠️ isort: 2 fixes needed
❌ flake8: 5 violations
⚠️ pylint: 8.75/10
🎯 Score Geral: 8.2/10
💡 Próximos passos:
1. Execute: /lint --fix (corrige black + isort automaticamente)
2. Corrija manualmente os 5 erros do flake8
3. Re-execute para validar
🚀 Para aplicar correções automáticas: /lint --fix
Referências
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
setup-linting-ci
Configura linting automático com pre-commit hooks e CI/CD para projetos Python
tech-debt-resolver
Loop automatizado de melhoria contínua que usa o Chat RAG para identificar débitos técnicos, implementa correções, reingere a base de conhecimento e valida até eliminar 100% dos débitos.
internal-comms
A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
prompt-engineering-expert
brand-guidelines
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
theme-factory
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
Didn't find tool you were looking for?