python / python/mypy

exclude does not work when file contains invalid syntax?

Open
#14,670 1 comment 5 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug topic-configuration
Dominant language
Python
Stars
20.6k
Forks
3.3k
PR merge metrics
PR metrics pending

Description

Bug Report

I'm having an issue with exclude. Basically, I exclude my tests/fixtures folder because it contains code with syntax that is only supported by Python 3.8, 3.9, etc, while my project supports Python 3.7. So the files in tests/fixtures contain invalid syntax on Python 3.7.

When I run mypy on Python 3.7, it errors with this:

tests/fixtures/validation_38.py:1: error: invalid syntax [syntax]
Found 1 error in 1 file (errors prevented further checking)

I exclude the folder with exclude = tests/fixtures in mypy.ini.
I tried excluding the file name directly, for example with exclude = validation_38\.py but it still fails the same way.

To Reproduce

# tests/fixtures/validation_38.py
def full(ctx, a: int, /, b: int, *c: int, d: int, e: int = 0, **f: int):
    pass

Checking only the parent folder, I'm able to exclude it:

% python3.7 -m mypy --exclude validation_38.py --ignore-missing-imports tests/fixtures/
Success: no issues found in 8 source files

Any other way fails:

% python3.7 -m mypy --exclude validation_38.py --ignore-missing-imports tests          
tests/fixtures/validation_38.py:1: error: invalid syntax  [syntax]
Found 1 error in 1 file (errors prevented further checking)
% python3.7 -m mypy --exclude fixtures/validation_38.py --ignore-missing-imports tests
tests/fixtures/validation_38.py:1: error: invalid syntax  [syntax]
Found 1 error in 1 file (errors prevented further checking)
% python3.7 -m mypy --exclude '.*/validation_38\.py' --ignore-missing-imports tests
tests/fixtures/validation_38.py:1: error: invalid syntax  [syntax]
Found 1 error in 1 file (errors prevented further checking)
% python3.7 -m mypy --exclude tests/fixtures --ignore-missing-imports tests
tests/fixtures/validation_38.py:4: error: invalid syntax  [syntax]
Found 1 error in 1 file (errors prevented further checking)
% python3.7 -m mypy --exclude fixtures --ignore-missing-imports tests 
tests/fixtures/validation_38.py:4: error: invalid syntax  [syntax]
Found 1 error in 1 file (errors prevented further checking)

Expected Behavior

Invalid syntax errors should be ignored if the file in question is excluded.
It seemed to work previously (before 1.0.0?).

Actual Behavior

An excluded file with invalid syntax makes mypy terminate with an error.

Your Environment

  • Python version used: 3.7
  • Mypy version used: 1.0.0
  • Mypy command-line flags: see above
  • Mypy configuration options from mypy.ini (not used in the examples above):
[mypy]
ignore_missing_imports = true
exclude = tests/fixtures
warn_unused_ignores = true
show_error_codes = true

Possibly related to https://github.com/python/mypy/issues/9981 and https://github.com/python/mypy/issues/6897.

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

Start by reproducing the reported commands with Python 3.7 and mypy 1.0.0, then trace how the CLI applies --exclude and mypy.ini exclude while discovering files under tests. Done means excluded files containing unsupported syntax produce no syntax errors, while non-excluded files are still checked and the relevant regression is covered by a test.

Written by the indexing model from the issue text.

Assessment

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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.