All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ricardo Martincoski <ricardo.martincoski@gmail.com>
To: buildroot@busybox.net
Subject: [Buildroot] [RFC] Adopt a coding style for Python scripts
Date: Thu, 20 Apr 2017 03:56:48 -0300	[thread overview]
Message-ID: <58f85bb0cb8f7_991ae0a6021685@ultri3.mail> (raw)
In-Reply-To: CAAXf6LXga+ixXCgk_+66vMyxxvYnLbZN32-iXrCY76j84e4--w@mail.gmail.com

Thomas,

I have a local patch for the docs for option D, but I will hold it for few more
days to see if we get more input.

On Wed, Apr 19, 2017 at 04:34 PM, Thomas De Schampheleire wrote:

> 2017-04-14 19:14 GMT+02:00 Arnout Vandecappelle <arnout@mind.be>:
>> On 14-04-17 01:44, Ricardo Martincoski wrote:
[snip]
>>> D) adopt the recommendation PEP8 [1] as coding style and the tool pep8 [2] as
>>>    automatic checker for coding style before submitting patches;
>>>    It checks for a subset of the recommendation (e.g. file naming is not
>>>    checked).
>>
>>  For me, option D is great. It can also be added to the checkpackage script.
>>
> 
> I'm not against this either. However, sometimes I feel that pep8 is
> being too pedantic. For example, there is a minimum variable name
> length of 3. However, for regex searches, it is common to use the
> variable 'm' to hold the match, and then use 'if m' or 'm.group(3)' or
> whatever, which I feel is perfectly fine.

It seems more people think like you because pep8 tool does not check for that
specifically (it's a subset from the recommendation), see my tests at the end.

> I haven't used pep8 so don't know if it can be tweaked.

The warnings can be suppressed by type.
pep8 --ignore E302 1.py
But AFAIK it can't be configured i.e. to check for 1 or 3 empty lines instead
of 2. It's "check for 2" or "don't check for empty lines".

> There also exist other tools btw, like flake8, which also check other
> items than style. They too can be useful, but they too can be 'too
> much'.

I haven't used flake8. I installed it after your e-mail.
I usually use pep8 for style, pyflakes for common errors (i.e. unused import),
and pyflakes3 for Python 3 compatibility (i.e. print without parenthesis).

Last year pep8 got renamed to pycodestyle to reduce confusion with PEP8.

So looking at [4] I had a nice surprise ...   
 pycodestyle >= 2.0.0, < 2.1.0
 pyflakes >= 0.8.0, != 1.2.0, != 1.2.1, != 1.2.2, < 1.3.0
 mccabe >= 0.5.0, < 0.6.0
If you use flake8 you already use pep8 = pycodestyle!

The only thing that worries me a bit is this warning from [5]:
"In many ways, Flake8 is tied to the version of Python on which it runs."


Do you (or somebody else) know if it can be a concern in our use case?


Other than that I am OK to adopt PEP8 + flake8 instead of PEP8 + pep8.
Let's call it option E.
E) PEP8 + flake8
Let's see what others think.


Here is the output for all current Python scripts in Buildroot:
$ flake8 --statistics $(find support/ -type f | xargs file | grep Python \
  | sed -e 's,:.*,,g')
4     E101 indentation contains mixed spaces and tabs
2     E122 continuation line missing indentation or outdented
2     E127 continuation line over-indented for visual indent
2     E128 continuation line under-indented for visual indent
1     E129 visually indented line with same indent as next logical line
5     E201 whitespace after '['
7     E202 whitespace before ']'
3     E203 whitespace before ':'
1     E221 multiple spaces before operator
1     E225 missing whitespace around operator
16    E231 missing whitespace after ','
3     E261 at least two spaces before inline comment
54    E302 expected 2 blank lines, found 1
12    E305 expected 2 blank lines after class or function definition, found 1
6     E402 module level import not@top of file
41    E501 line too long (80 > 79 characters)
6     E502 the backslash is redundant between brackets
2     E711 comparison to None should be 'if cond is None:'
2     E713 test for membership should be 'not in'
15    F401 'checkpackagelib.ConsecutiveEmptyLines' imported but unused
1     F821 undefined name 'sys'
2     W191 indentation contains tabs
2     W391 blank line at end of file
3     W601 .has_key() is deprecated, use 'in'
Only the F[0-9]* warnings are added compared to pep8 --statistics.

And here some comparison among the output of individual commands:
-----------------------------
$ cat 1.py
import os
a = 1
print "a"

def function1():
    b = 1
$ pep8 1.py 
1.py:5:1: E302 expected 2 blank lines, found 1

$ pep8 --ignore E302 1.py

$ pycodestyle 1.py 
1.py:5:1: E302 expected 2 blank lines, found 1

$ pycodestyle --ignore E302 1.py

$ pyflakes 1.py 
1.py:1: 'os' imported but unused
1.py:6: local variable 'b' is assigned to but never used

$ pyflakes3 1.py 
1.py:3:9: invalid syntax
print "a"
        ^

$ flake8 1.py 
1.py:1:1: F401 'os' imported but unused
1.py:5:1: E302 expected 2 blank lines, found 1
1.py:6:5: F841 local variable 'b' is assigned to but never used

$ flake8 --ignore E302 1.py 
1.py:1:1: F401 'os' imported but unused
1.py:6:5: F841 local variable 'b' is assigned to but never used
-----------------------------

(my original e-mail used [3], so I incremented the number to avoid confusion)
[4] http://flake8.pycqa.org/en/latest/faq.html#why-does-flake8-use-ranges-for-its-dependencies
[5] http://flake8.pycqa.org/en/latest/

Regards,
Ricardo

  reply	other threads:[~2017-04-20  6:56 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-13 23:44 [Buildroot] [RFC] Adopt a coding style for Python scripts Ricardo Martincoski
2017-04-14 17:14 ` Arnout Vandecappelle
2017-04-19 17:00   ` Ricardo Martincoski
2017-04-20  7:17     ` Thomas Petazzoni
2017-04-23 21:34       ` Arnout Vandecappelle
2017-04-24  1:25         ` Ricardo Martincoski
2017-04-19 19:34   ` Thomas De Schampheleire
2017-04-20  6:56     ` Ricardo Martincoski [this message]
2017-04-23 21:41       ` Arnout Vandecappelle
2017-04-24  1:28         ` Ricardo Martincoski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=58f85bb0cb8f7_991ae0a6021685@ultri3.mail \
    --to=ricardo.martincoski@gmail.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.