From ba0e9d6427fa15a2c3420d4427e88b99514d22f9 Mon Sep 17 00:00:00 2001 From: Matt Bogosian Date: Tue, 4 Jan 2022 11:08:06 -0600 Subject: [PATCH] Revert to treating exclude in .ini as single string (#11881) Partially reverts #11329 (with respect to `.ini` documentation). Modifies existing unit tests. Fixes #11830. Co-authored-by: Matthew W --- docs/source/config_file.rst | 20 +++++++++++++++----- mypy/config_parser.py | 2 +- test-data/unit/cmdline.test | 7 ++++--- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/docs/source/config_file.rst b/docs/source/config_file.rst index fcd9caede309..26589e71e86b 100644 --- a/docs/source/config_file.rst +++ b/docs/source/config_file.rst @@ -197,18 +197,28 @@ section of the command line docs. .. confval:: exclude - :type: newline separated list of regular expressions + :type: regular expression - A newline list of regular expression that matches file names, directory names and paths + A regular expression that matches file names, directory names and paths which mypy should ignore while recursively discovering files to check. Use forward slashes on all platforms. .. code-block:: ini [mypy] - exclude = - ^file1\.py$ - ^file2\.py$ + exclude = (?x)( + ^one\.py$ # files named "one.py" + | two\.pyi$ # or files ending with "two.pyi" + | ^three\. # or files starting with "three." + ) + + Crafting a single regular expression that excludes multiple files while remaining + human-readable can be a challenge. The above example demonstrates one approach. + ``(?x)`` enables the ``VERBOSE`` flag for the subsequent regular expression, which + `ignores most whitespace and supports comments`__. The above is equivalent to: + ``(^one\.py$|two\.pyi$|^three\.)``. + + .. __: https://docs.python.org/3/library/re.html#re.X For more details, see :option:`--exclude `. diff --git a/mypy/config_parser.py b/mypy/config_parser.py index 4185179605c9..fa57caee14a4 100644 --- a/mypy/config_parser.py +++ b/mypy/config_parser.py @@ -132,7 +132,7 @@ def check_follow_imports(choice: str) -> str: 'cache_dir': expand_path, 'python_executable': expand_path, 'strict': bool, - 'exclude': lambda s: [p.strip() for p in s.split('\n') if p.strip()], + 'exclude': lambda s: [s.strip()], } # Reuse the ini_config_types and overwrite the diff diff --git a/test-data/unit/cmdline.test b/test-data/unit/cmdline.test index 6fa4d210a826..690b0cc06709 100644 --- a/test-data/unit/cmdline.test +++ b/test-data/unit/cmdline.test @@ -1354,9 +1354,10 @@ b/bpkg.py:1: error: "int" not callable # cmd: mypy . [file mypy.ini] \[mypy] -exclude = - abc - b +exclude = (?x)( + ^abc/ + |^b/ + ) [file abc/apkg.py] 1() [file b/bpkg.py]