python / typeshed

Collection of library stubs for Python, with static types
Other
4.32k stars 1.73k forks source link

Preventing code quality regressions #11769

Open srittau opened 5 months ago

srittau commented 5 months ago

For some time now we've used pyright's stricter configuration to prevent code quality regressions. Unless a stubs package is mentioned in the config file, it's expected to have annotations for all its fields. While this has served us well for a while, it has become unsuitable since the introduction of _typeshed.Incomplete:

To improve the situation, I propose to move to a custom solution:

  1. Add an incomplete marker to METADATA.toml (defaulting to false).
  2. Add a custom script to CI that checks that a stub package marked as complete can't have any incomplete (unannotated or using Incomplete) fields. Alternatively, we could add a disabled-by-default check to flake8-pyi and use that instead.
  3. At a later date, we could also add a PR CI script that add a PR comment warning a user if the amount of incomplete increases due to a PR.

(See also https://alexwaygood.github.io/typeshed-stats/.)

Daverball commented 5 months ago

I think it might still be nice to have some support for stricter type checker configs on a per distribution basis on the CI side, but I agree that the current solution for detecting completeness is insufficient.

It has kind of bothered me for a while now, that there's no way to e.g. enforce mypy --strict for a third party stub, even if you use those flags locally for initial development, regressions become inevitable since the stricter checks will not be enforced by the CI.