[code-quality] flake8 config file usage

Ian Cordasco graffatcolmingov at gmail.com
Fri Jan 9 18:01:58 CET 2015


On Thu, Jan 8, 2015 at 2:55 PM, Jason Killen <jsnklln at gmail.com> wrote:
> Thanks again Ian.  I think I've tracked down the problem in the pep8 code.
> I realize you're not the pep8 developer but I could use a second set of
> eyes.  If you don't mind can you verify that what I'm seeing is the same as
> what you have.  In pep8.py in the fuction read_config near line 1852.  I've
> got this:
>     user_conf = options.config
>     if user_conf and os.path.isfile(user_conf):
>         if options.verbose:
>             print('user configuration: %s' % user_conf)
>         config.read(user_conf)
>
>     local_dir = os.curdir
>     parent = tail = args and os.path.abspath(os.path.commonprefix(args))
>     while tail:
>         if config.read([os.path.join(parent, fn) for fn in PROJECT_CONFIG]):
>             local_dir = parent
>             if options.verbose:
>                 print('local configuration: in %s' % parent)
>             break
>         (parent, tail) = os.path.split(parent)
>
> What's happening here is it's reading my defined config file then
> over-reading it with files found further up the directory tree.  I started
> playing with flake8 on a project level then took a left turn and started
> wanting to define config files on the command line, so I've got a setup.cfg
> a few directories up.  I did some tests after adding an else after the if so
> pep8 only looks for files in the tree if the user defined file doesn't
> exist.  That seems to be working much better.

I saw you filed an issue and pull request against pep8. I'll respond
there when I have a chance to look at them.

> On Fri, Jan 2, 2015 at 10:55 AM, Ian Cordasco <graffatcolmingov at gmail.com>
> wrote:
>>
>> I'm beginning to think this is a problem with the ConfigParser module
>> on Python 2.7.1. Can you upgrade your system installation of Python?
>>
>> ~ mktmpenv
>> New python executable in tmp-e6c7d5624589670b/bin/python2.7
>> Also creating executable in tmp-e6c7d5624589670b/bin/python
>> Installing setuptools, pip...done.
>> This is a temporary environment. It will be deleted when you run
>> 'deactivate'.
>> (tmp-e6c7d5624589670b)~/virtualenv/tmp-e6c7d5624589670b vl ex.py
>> (tmp-e6c7d5624589670b)~/virtualenv/tmp-e6c7d5624589670b pip install
>> flake8
>> Collecting flake8
>>   Using cached flake8-2.2.5.tar.gz
>> Collecting pyflakes>=0.8.1 (from flake8)
>>   Using cached pyflakes-0.8.1-py2.py3-none-any.whl
>> Collecting pep8>=1.5.7 (from flake8)
>>   Using cached pep8-1.5.7-py2.py3-none-any.whl
>> Collecting mccabe>=0.2.1 (from flake8)
>>   Using cached mccabe-0.3-py2.py3-none-any.whl
>> Installing collected packages: mccabe, pep8, pyflakes, flake8
>>
>>
>>
>>   Running setup.py install for flake8
>>     Installing flake8 script to ~/virtualenv/tmp-e6c7d5624589670b/bin
>> Successfully installed flake8-2.2.5 mccabe-0.3 pep8-1.5.7 pyflakes-0.8.1
>> (tmp-e6c7d5624589670b)~/virtualenv/tmp-e6c7d5624589670b vl config.cfg
>> (tmp-e6c7d5624589670b)~/virtualenv/tmp-e6c7d5624589670b flake8
>> --config config.cfg ex.py
>> ex.py:1:21: W291 trailing whitespace
>> ex.py:3:4: F821 undefined name 'x'
>> ex.py:3:9: F821 undefined name 'y'
>> ex.py:6:4: F821 undefined name 'j'
>> ex.py:6:6: E711 comparison to None should be 'if cond is None:'
>> (tmp-e6c7d5624589670b)~/virtualenv/tmp-e6c7d5624589670b flake8 --version
>> 2.2.5 (pep8: 1.5.7, pyflakes: 0.8.1, mccabe: 0.3) CPython 2.7.9 on Darwin
>>
>> (output https://gist.github.com/sigmavirus24/bb5ff3b11de0d40bc7c2 in
>> the event it's easier to read for some people)
>>
>> On Fri, Jan 2, 2015 at 9:41 AM, Jason Killen <jsnklln at gmail.com> wrote:
>> > Thanks for you help.  Couple of things:
>> > 1) The --help for flake8 says config files should go in flake8:
>> >     --config=path       user config file location (default:
>> >                                 /Users/jkillen/.config/flake8)
>> > My reading of your first reply is that they should go in ~/.config/pep8.
>> > I
>> > don't care where they go it's just confusing.
>> > Also, I find the help text a little confusing, I'm not sure if I'm
>> > defining
>> > the directory to search for setup.cfg or tox.ini or an actual file
>> > itself.
>> > It looks like you're defining the actual file so I'll go with that.
>> > That's
>> > good because that's what I wanted in the first place.
>> >
>> > 2) Here are some more details, and weirdness, for the code I'm testing
>> > with,
>> > I've removed flake8-debugger:
>> > $ flake8 --version
>> > 2.2.5 (pep8: 1.5.7, pyflakes: 0.8.1, mccabe: 0.3) CPython 2.7.1 on
>> > Darwin
>> >
>> > The actual code:
>> > $ cat ex.py
>> > print("hello world")
>> > #comment
>> > if x == y:
>> >   print("x")
>> >
>> > if j == None:
>> >     print("It's None")
>> >
>> > My config file:
>> > $ cat config.cfg
>> > [flake8]
>> > ignore = E265,E111
>> >
>> > Running with a specified config file, doesn't seem to ignore E265,E111:
>> > $ flake8 --config config.cfg ex.py
>> > ex.py:2:1: E265 block comment should start with '# '
>> > ex.py:3:4: F821 undefined name 'x'
>> > ex.py:3:9: F821 undefined name 'y'
>> > ex.py:4:3: E111 indentation is not a multiple of four
>> > ex.py:6:4: F821 undefined name 'j'
>> >
>> > Running with --ignore, ignores E111,E265 but includes errors not seen
>> > before:
>> > $ flake8 --ignore=E111,E265 ex.py
>> > ex.py:1:21: W291 trailing whitespace
>> > ex.py:3:4: F821 undefined name 'x'
>> > ex.py:3:9: F821 undefined name 'y'
>> > ex.py:6:4: F821 undefined name 'j'
>> > ex.py:6:6: E711 comparison to None should be 'if cond is None:'
>> >
>> > I did step through flake8 looking for where it opened the config file
>> > and
>> > got completely lost a few lines in.  I'm pretty new to python.  Since
>> > you
>> > mention that's handled by pep8 I'll take another stab at it
>> > concentrating on
>> > the pep8 code.
>> >
>> > Thanks for your help.
>> >
>> > On Mon, Dec 29, 2014 at 4:27 PM, Ian Cordasco
>> > <graffatcolmingov at gmail.com>
>> > wrote:
>> >>
>> >> On Mon, Dec 29, 2014 at 3:08 PM, Ian Cordasco
>> >> <graffatcolmingov at gmail.com> wrote:
>> >> > On Mon, Dec 29, 2014 at 1:57 PM, Jason Killen <jsnklln at gmail.com>
>> >> > wrote:
>> >> >> I've just started using flake8.  I'm using 2.2.5 (pep8: 1.5.7,
>> >> >> pyflakes:
>> >> >> 0.8.1, mccabe: 0.3, flake8-debugger: 1.3.2) CPython 2.7.1 on Darwin
>> >> >>
>> >> >> Config files don't seem to be being read in.  I've tried defining it
>> >> >> (config.cfg) using --config, putting it in ., putting it in
>> >> >> everything
>> >> >> up
>> >> >> from ., and putting it in ~/.config/flake8.  No matter what I try
>> >> >> flake8
>> >> >> doesn't seem to be picking them up.  Using --ignore works fine.
>> >> >>
>> >> >> Here's my config file:
>> >> >> [flake8]
>> >> >> max-line-length = 200
>> >> >> # E251 unexpected spaces around keyword / parameter equals
>> >> >> # E711 comparison to None should be if cond is not None
>> >> >> # E501 line too long (203 > 200 characters)
>> >> >> # E303 too many blank lines (2)
>> >> >> # E712 comparison to True should be 'if cond is not True:' or 'if
>> >> >> not
>> >> >> cond:'
>> >> >> # E302 expected 2 blank lines, found 1
>> >> >> # E226 missing whitespace around arithmetic operator
>> >> >> # W291 trailing whitespace
>> >> >> # W293 blank line contains whitespace
>> >> >> # W391 blank line at end of file
>> >> >> # E111 indentation is not a multiple of four
>> >> >> # E702 multiple statements on one line (semicolon)
>> >> >> ignore =
>> >> >> E251,E711,E501,E303,E712,E302,E226,W291,W293,W391,E111,E702,E265
>> >> >>
>> >> >> Help please?
>> >> >
>> >> > Hey Jason,
>> >> >
>> >> > pep8 handles discovery and parsing of config files for flake8.
>> >> > Looking
>> >> > at what pep8 tries to find, your options are ~/.config/pep8,
>> >> > ./tox.ini, and ./setup.cfg. As for why using --config doesn't work, I
>> >> > haven't tried that but that would also be a bug found in pep8. I'll
>> >> > see if I can reproduce that though.
>> >> >
>> >> > Cheers,
>> >> > Ian
>> >> > flake8 maintainer
>> >>
>> >> So I just did the following:
>> >>
>> >> $ mktmpenv
>> >> $ pip install flake8 flake8-docstrings
>> >> $ flake8 --version
>> >> 2.2.5 (pep8: 1.5.7, pyflakes: 0.8.1, pep257: 0.2.1, mccabe: 0.3)
>> >> CPython 2.7.9 on Darwin
>> >> $ cd ~/sandbox/github3.py
>> >>
>> >> I know my project has a lot of docstring (pep257) violations and that
>> >> one of the common ones is D100 so I wrote
>> >>
>> >> [flake8]
>> >> ignore = D100
>> >>
>> >> In test.cfg and did
>> >>
>> >> $ flake8 | wc -l
>> >>      881
>> >> $ flake8 --config test.cfg | wc -l
>> >>      868
>> >>
>> >> So I think that --config is working just fine.
>> >>
>> >> If I update test.cfg to
>> >>
>> >> [flake8]
>> >> ignore = D100,D101,D102
>> >>
>> >> $ flake8 --config test.cfg | wc -l
>> >>      422
>> >>
>> >>
>> >> My final iteration of test.cfg is
>> >>
>> >> [flake8]
>> >> max-line-length = 100
>> >> # Comment
>> >> ignore = D100,D101,D102
>> >>
>> >> And that also works just fine.
>> >>
>> >> Can you share the exact commands you're running? Perhaps this is some
>> >> weird side-effect of flake8-debugger.
>> >
>> >
>> >
>> >
>> > --
>> > Jason Killen   jsnklln at gmail.com
>> > Pain is inevitable, misery is optional.
>
>
>
>
> --
> Jason Killen   jsnklln at gmail.com
> Pain is inevitable, misery is optional.


More information about the code-quality mailing list