diff --git a/mypy/find_sources.py b/mypy/find_sources.py index e96dc2d617ce..e9dd9edecec5 100644 --- a/mypy/find_sources.py +++ b/mypy/find_sources.py @@ -128,6 +128,8 @@ def crawl_up_dir(self, dir: str) -> Tuple[str, str]: base_dir = dir or '.' else: # Ensure that base is a valid python module name + if base.endswith('-stubs'): + base = base[:-6] # PEP-561 stub-only directory if not base.isidentifier(): raise InvalidSourceList('{} is not a valid Python package name'.format(base)) parent, base_dir = self.crawl_up_dir(parent_dir) diff --git a/test-data/unit/cmdline.test b/test-data/unit/cmdline.test index 8fc563dce249..04f9d3f0276e 100644 --- a/test-data/unit/cmdline.test +++ b/test-data/unit/cmdline.test @@ -1176,3 +1176,39 @@ usage: mypy [-h] [-v] [-V] [more options; see below] [-m MODULE] [-p PACKAGE] [-c PROGRAM_TEXT] [files ...] mypy: error: Invalid error code(s): YOLO == Return code: 2 + +[case testStubsDirectory] +# cmd: mypy --error-summary pkg-stubs +[file pkg-stubs/__init__.pyi] +[file pkg-stubs/thing.pyi] +class Thing: ... +[out] +Success: no issues found in 2 source files +== Return code: 0 + +[case testStubsDirectoryFile] +# cmd: mypy --error-summary pkg-stubs/thing.pyi +[file pkg-stubs/__init__.pyi] +[file pkg-stubs/thing.pyi] +class Thing: ... +[out] +Success: no issues found in 1 source file +== Return code: 0 + +[case testStubsSubDirectory] +# cmd: mypy --error-summary src/pkg-stubs +[file src/pkg-stubs/__init__.pyi] +[file src/pkg-stubs/thing.pyi] +class Thing: ... +[out] +Success: no issues found in 2 source files +== Return code: 0 + +[case testStubsSubDirectoryFile] +# cmd: mypy --error-summary src/pkg-stubs/thing.pyi +[file src/pkg-stubs/__init__.pyi] +[file src/pkg-stubs/thing.pyi] +class Thing: ... +[out] +Success: no issues found in 1 source file +== Return code: 0