python / mypy

Optional static typing for Python
https://www.mypy-lang.org/
Other
18.22k stars 2.78k forks source link

Support glob patterns when configuring `mypy_path` #9965

Open gustavgransbo opened 3 years ago

gustavgransbo commented 3 years ago

Feature

Support the glob patterns * and ** in the mypy_path configuration.

Should work the same way as it does for the files configuration.

Pitch I have a monorepo, with a bunch of python libraries located in a directory called libs. All packages are namespace packages with the same namespace, but they are kept in their own directory inside of the libs directory:

repository_root
│
└───libs
│   └───pkg-a
│   |    └───namespace
│   |
│   └───pkg-b
│   |    └───namespace
│   |
│   └───pkg-c
│        └───namespace
│
└───mypy.ini

The mypy_path declaration in my mypy.ini looks something like this (but with dozens of packages):

mypy_path = $MYPY_CONFIG_FILE_DIR/libs/pkg-a:
    $MYPY_CONFIG_FILE_DIR/libs/pkg-b:
    $MYPY_CONFIG_FILE_DIR/libs/pkg-c:

It would be very convenient to use a glob pattern like this instead:

mypy_path = $MYPY_CONFIG_FILE_DIR/libs/*

It's more concise, and would avoid potential problems with forgetting to include a newly added package in mypy_path.

Thanks for a great tool!

gustavgransbo commented 3 years ago

I could have a go at implementing this, unless someone opposes the feature.

DavidVujic commented 1 year ago

This would be a great feature! I am trying to figure out how to set the mypy_path with a wildcard, to avoid specifying all paths, also a monorepo.

DavidVujic commented 1 year ago

I don't fully understand why, but mypy seems to recognize the packages when putting a py.typed file in the top namespace (such as in pkg-a in your example).

Do you think this is a good enough workaround until the feature would be added @gustavgransbo?

EDIT: maybe I went a little bit too fast here. The code editor is happy, but when running the mypy cli I get a new set of errors such as ...Source file found twice under different module names...