| name | lint |
| description | Python Linter (user) |
| license | MIT |
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
/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