Thursday, September 1, 2011

Assegure a qualidade do seu código Python – pep8

Convenções de código! Já tive a oportunidade de escrever sobre elas no Profissionais TI. Benção ou maldição? Há quem goste, há quem ache uma perda de tempo…

Acredito muito que a organização e a qualidade do código são benéficas para qualquer projeto, principalmente para aqueles que possuem alta rotatividade de profissionais. Padrões de projetos, padrões estruturais e de escrita facilitam a “assimilação” do que já foi produzido, facilita a manutenção e “orienta” as novas produções.

Se você tem problemas em decorar convenções e boas práticas, não desanime! O Python possui algumas ferramentas “bacanudas” que vão te auxiliar a deixar o software mais próximo do “estado da arte”, seja garantindo as convenções de código, seja avaliando a qualidade do mesmo.

As “PEPs“ (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.

Para saber mais sobre PEPs, acesse a PEP 1 que é justamente um documento explicando o que são e o que fazem as Python Enhancement Proposals.

O 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.

Vamos analisar o código do Django Brasil (você não sabia? O site é open source!), mais especificamente o arquivo models.py da app blog:

$ pep8 src/djangobrasil/apps/blog/models.py src/djangobrasil/apps/blog/models.py:42:65: W291 trailing whitespacesrc/djangobrasil/apps/blog/models.py:62:1: E302 expected 2 blank lines, found 1src/djangobrasil/apps/blog/models.py:105:80: E501 line too long (89 characters)

Como podemos ver, a ferramenta nos mostra a linha e coluna onde o problema foi encontrado, apresentando uma breve descrição da incoerência que estamos cometendo em relação às recomendações da PEP 8.

Para obter uma resposta mais “verbose“, podemos passar alguns parâmetros para o pep8:

$ pep8 src/djangobrasil/apps/blog/models.py --show-source --show-pep8 (...)src/djangobrasil/apps/blog/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.  There are still many devices around that are limited to 80 character lines; plus, limiting windows to 80 characters makes it possible to have several windows side-by-side. The default wrapping on such devices looks ugly. Therefore, please limit all lines to a maximum of 79 characters. For flowing long blocks of text (docstrings or comments), limiting the length to 72 characters is recommended.

Viu só?! Dessa forma podemos aprender sobre a PEP 8 enquanto “ferimos” as convenções de código em nossos projetos :P

Para finalizar, podemos contar as ocorrências de problemas com a PEP 8 em determinada região do projeto:

$ pep8 src/djangobrasil/apps/blog/ --statistics -qq --filename=*.py 1 E225 missing whitespace around operator7 E302 expected 2 blank lines, found 11 E303 too many blank lines (2)11 E501 line too long (89 characters)4 W291 trailing whitespace2 W391 blank line at end of file

Nenhum problema muito grave de convenções de código na app blog do DjangoBrasil ;)

Confira: pep8 – Python style guide checker.

Nos próximos posts, vamos dar uma pincelada no pylint, pyflakes e clone digger.

Fonte: Klaus Laube

0 comments:

Post a Comment