python / mypy

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

mypy should search parent directories for `pyproject.toml` config file #10613

Open benburk opened 3 years ago

benburk commented 3 years ago

Bug Report

First of all, thank you for supporting the highly requested pyproject.toml config format https://github.com/python/mypy/issues/5205

I'm hoping we can resolve an issue to bring mypy inline with several others including but not limited to isort, black, and pylint. I think mypy should search parent directories for pyproject.toml config file. I think mypy should search up until the user's home directory (or ~25 directories, whichever comes first) for config files.

To Reproduce

Prepare a project such as this

outer/
    inner/
        main.py
    pyproject.toml

From inside the inner directory, run mypy main.py

Expected Behavior

I expect mypy to use the settings defined in the pyproject.toml file found in the parent directory outer. I'm guessing mypy only checks the directory it is invoked from.

Actual Behavior

The settings inside pyproject.toml are not used.

Your Environment

yeputons commented 2 years ago

A four-year old related discussion about setup.cfg is available at https://github.com/python/mypy/issues/3377#issuecomment-302308046

Felixoid commented 1 year ago

Hello.

As far as I understand the meaning of pyproject.toml it's supposed to be a global project configuration.

Why should one set the config file manually or have meaningless symlinks everywhere when working in subdirectories?

Another good approach would be to set a stop for a project directory like it's done in black

zyxkad commented 1 year ago

I saw the comment at https://github.com/python/mypy/issues/3377#issuecomment-302308046. It's a good point of view. I suggest mypy should stop search the configs when find .git directory or others VCS cache. Will that help? @gvanrossum

Edit: I reviewed this comment, and I found I misunderstood you. You think the config will affect the subdirectories, that's true, but we actually want that affect subdirs. You don't need worried about different act about check parents or not (probably you can add a flag on the pyproject.toml to enable parent search if you really worried about it). If people want specific check, they should always write a config in that dir, or always add flags to their check command.

Felixoid commented 8 months ago

Dear @hauntsaninja, @ilevkivskyi, @AlexWaygood and @JukkaL, mentioning you as top 4

If I'd try to implement it somewhere around this line, would you consider reviewing the PR?

It could have the same fuse as pylint, so won't leave the repository in case of .git or .hg directory is presented

ilevkivskyi commented 8 months ago

I can't guarantee I will have time to review the PR, but if it is straightforward, there is high chance that either me or someone else will review it.

Felixoid commented 8 months ago

Ok, here's the first shot #16965

It's exactly how it's done in the pylint, but with os.path instead of pathlibPath

Felixoid commented 5 months ago

It's already three months since the PR is created =(

And, coincidentally, it's my birthday today. It would be a good present to review the code ^_^