PyCQA / PyCQA/flake8

Inconsistent exclude behaviour

Open
#1,074 4 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

bug:confirmed confirmed-by:core
Dominant language
Python
Stars
3.8k
Forks
356
PR merge metrics
No merged PRs in 30d

Description

In GitLab by @mskrajnowski on Dec 13, 2017, 05:53

Please describe how you installed Flake8

# in a virtualenv
$ pip install flake8

Please provide the exact, unmodified output of flake8 --bug-report

{
  "dependencies": [
    {
      "dependency": "setuptools",
      "version": "34.2.0"
    }
  ],
  "platform": {
    "python_implementation": "CPython",
    "python_version": "2.7.12",
    "system": "Linux"
  },
  "plugins": [
    {
      "is_local": false,
      "plugin": "mccabe",
      "version": "0.6.1"
    },
    {
      "is_local": false,
      "plugin": "pycodestyle",
      "version": "2.3.1"
    },
    {
      "is_local": false,
      "plugin": "pyflakes",
      "version": "1.6.0"
    },
    {
      "is_local": false,
      "plugin": "unicode-string-literal",
      "version": "1.1"
    }
  ],
  "version": "3.5.0"
}

Please describe the problem or feature

Explicitly specified modules are not always checked, depending on what exclude is set:

  • if the module is within an excluded directory it will be checked
  • if the module filename is excluded it will not be checked

I would expect flake8 to either:

  • always check files that are explicitly specified
  • always ignore files that are excluded and/or in an excluded directory

If this is a bug report, please explain with examples (and example code) what you expected to happen and what actually happened.

  1. Prepare a simple project for testing

    $ mkdir -p test-flake8-exclude/test
    $ cd test-flake8-exclude
    $ echo "import os" > test/module.py
    
  2. Try without exclude

    $ flake8 . && echo OK
    ./test/module.py:1:1: F401 'os' imported but unused
    $ flake8 test/module.py && echo OK
    test/module.py:1:1: F401 'os' imported but unused
    
  3. Try excluding the directory

    $ echo "[flake8]" > .flake8
    $ echo "exclude = test" >> .flake8
    
    $ flake8 . && echo OK
    OK
    $ flake8 test/module.py && echo OK
    test/module.py:1:1: F401 'os' imported but unused
    
  4. Try excluding the module

    $ echo "[flake8]" > .flake8
    $ echo "exclude = module.py" >> .flake8
    
    $ flake8 . && echo OK
    OK
    $ flake8 test/module.py && echo OK
    OK
    

I'd expect results in 3. and 4. to be the same.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the three command-line cases from the issue using a virtualenv, test/module.py, and .flake8 with directory and filename exclusions. Compare explicit-file checks with recursive checks and trace the exclude handling from the flake8 command entry point. Done means the behavior is consistent for explicitly specified files and recursively discovered files, with tests covering both exclusion forms.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli, tooling
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.