O documento discute ferramentas para análise estática de código Python como PEP8, Pylint, Pyflakes e CloneDigger. Ele explica o que cada ferramenta faz e como instalá-las, além de fornecer dicas sobre como utilizá-las para melhorar a qualidade do código.
2. PEP8 – O que é
PEP - Python Enhancement Proposal São documentos que geralmente abordam alguma nova
funcionalidade da linguagem, propósitos, procedimentos ou ambiente. Em
suma, são “guidelines” que te orientam num melhor uso da linguagem e
suas funcionalidades, bem como podem ajudar em questões como
arquitetura, ambiente ou processos de sua aplicação.
(Escrita por Guido Van Rossum e Barry Warsaw)
●
pep8 - é uma ferramenta simples (e muito eficaz) que analisa o seu
código Python segundo as convenções de código descritas na PEP 8 (
http://www.python.org/dev/peps/pep-0008/)
3. Pylint – O que é
●
Pylint – lint's São ferramentas de checagem estática de códigos.
O Pylint é uma ferramenta de lint para o Python. O Pylint analisa de
forma minuciosa o código do seu projeto Python, lhe retornando uma
variedade de relatórios, sobre todo o tipo de problema que ele encontra,
indo de incoerências com a PEP 8, até nome de variáveis.
4. Pyflakes – O que é
●
Pyflakes – é um pylint mais resumido, que aponta direto o erro.
5. CloneDigger – O que é
●
CloneDigger – Ferramenta que detecta duplicação de código python.
7. PEP8 – Dicas de Utilização
$ pep8 models.py
models.py:42:65: W291 trailing whitespace
models.py:62:1: E302 expected 2 blank lines, found 1
models.py:105:80: E501 line too long (89 characters)
$ pep8 models.py --show-source --show-pep8
models.py:105:80: E501 line too long (89 characters)
return '/weblog/%s/%s/' % (self.pub_date.strftime('%Y/%m/%d').lower(), self.slug)
^
Limit all lines to a maximum of 79 characters.
Configuração:
As configurações são lidas no diretório ~/.config/pep8 . Exemplo de configuração:
[pep8]
ignore = E226,E302,E41
max-line-length = 160
Os erros E226, E302 e E41 serão ignorados.
9. Pylint
pylint arquivo.py
C: 1: Missing docstring
Os tipos de mensagens:
[R]efactor for a "good practice" metric violation
[C]onvention for coding standard violation
[W]arning for stylistic problems, or minor programming issues
[E]rror for important programming issues (i.e. most probably bug)
[F]atal for errors which prevented further processing
Com alguma personalização:
$ pylint aquivo.py --reports=n --include-ids=y –disable=W0232
Primeiro, com o parâmetro –-reports=n dizemos que não queremos aquele relatório gigantesco no final da análise.
O –-include-ids=y exibe para gente os ids das mensagens de erros do Pylint. É útil, pois todas as mensagens que você julgar
desnecessárias para a análise você adiciona no parâmetro -–disable (separadas por vírgula).
Gerar arquivo pylintrc com suas configurações personalizadas:
$ pylint --reports=n --include-ids=y --disable=W0232 --generate-rcfile > ~/.pylintrc
Para utlizar o arquivo de configurações personalizadas ao executar o pylint:
pylint --rcfile=pylintrc.rc arquivo.py
Para entender as mensagens de erro do pylint:
pylint –help-msg=R0904
12. CloneDigger
clonedigger meuprojeto/
Ele irá gerar um arquivo output.html
E neste relatório ele mostrará os trechos de códigos repitidos por
arquivo e irá destacar em vermelho as linhas que não se repetem.
13. PEP8, Pylint e Pyflakes, comparação:
$ pep8 admin.py
admin.py:37:14: E124 closing bracket does not match visual indentation
$ pylint admin.py
No config file found, using default configuration
************* Module demo_passo_a_passo.admin
C: 15,0: Invalid name "site" for type constant (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$)
C: 18,0:BookmarkAdmin: Missing docstring
R: 21,4:BookmarkAdmin.FormWizard: Too many ancestors (9/7)
C: 21,4:BookmarkAdmin.FormWizard: Missing docstring
E: 23,19:BookmarkAdmin.FormWizard.done: Undefined variable 'HttpResponse'
R: 21,4:BookmarkAdmin.FormWizard: Too many public methods (31/20)
R: 18,0:BookmarkAdmin: Too many public methods (60/20)
W: 5,0: Unused import admin
W: 6,0: Unused import BookmarksWizard
$ pyflakes admin.py
admin.py:5: 'admin' imported but unused
admin.py:6: 'BookmarksWizard' imported but unused
admin.py:23: undefined name 'HttpResponse'
14. E uma IDE ?
http://ninja-ide.org (do acrônimo recursivo: "Ninja-IDE Is Not Just Another IDE"), é
uma IDE multi-plataforma de desenvolvimento integrado. NINJA-IDE é executado
em Linux/X11, Mac OS X e sistemas operacionais de desktop Windows, e permite
aos desenvolvedores criarem aplicações para diversas finalidades, utilizando todas
as ferramentas e utilitários de NINJA-IDE, tornando a tarefa de escrever software
mais fácil e agradável.