python / python/mypy

(🎁) multiple platform/version compatible mode

オープン
#12,286 コメント 10 件 リアクション 24 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

feature
主要言語
Python
スター
20.6k
フォーク
3.3k
PR マージ指標
PR 指標を取得中

説明

Feature

I want mypy to show errors for all platforms and versions, not just the current/selected one

import sys
if sys.version_info < (3, 11):
    print(21 + "sus")  # very funny, but is a type error 😢
if sys.platorm == "win32":
    print(21 + "sus")  # very funny, but is a type error 😢

actual:

> mypy test.py
no errors 😳

Instead I have to run mypy many times to get a comprehensive output:

> mypy --python-version 3.11 --platform lignux test.py
no errors 😳

> mypy --python-version 3.11 --platform darwin test.py
no errors 😳

> mypy --python-version 3.11 --platform win32 test.py
test.py:5: error: very funny, but that's a type error  [😳]
Found 1 error in 1 file (checked 1 source file)

> mypy --python-version 3.10 --platform lignux test.py
test.py:3: error: very funny, but that's a type error  [😳]
Found 1 error in 1 file (checked 1 source file)

> mypy --python-version 3.10 --platform win32 test.py
test.py:3: error: very funny, but that's a type error  [😳]
test.py:5: error: very funny, but that's a type error  [😳]
Found 2 errors in 1 file (checked 1 source file)

... etc, etc, etc ...

+ additional steps to curate the output into a readable format. (+ ratio?)

I would imagine that most libraries would want type checking applied for their supported python versions and platforms, and most python applications would probably want multiple platforms supported.

So almost everyone using mypy would want some level of cross support, and the current workaround includes manually building a solution involving running mypy concurrently and collecting / filtering the results. I would much rather this very common use-case be supported natively.

Perhaps some way of specifying a list of desired selections, and mypy could pass over the code with a matrix of those options. Perhaps mypy could run multiple processes to improve performance, or alternatively incorporate some complicated logic where it only does one run over the code but analyses the different paths/types correctly. The latter is the preferred solution in my mind, as it would be a lot more efficient and allow some additional benefits (#8823/#5940 comes to mind)

I would also expect mypy to show a note when an error is only detected under a diverging path, to make resolution easier.

pyproject.toml:

[tool.mypy]
platforms = ["lignux", "darwin", "win32"]
python_versions = [3.11, 3.10, 3.9, 3.8, 3.7]
> mypy test.py
test.py:3: error: very funny, but that's a type error  [😳]
test.py:3: note: error found with python-version < 3.11
test.py:5: error: very funny, but that's a type error  [😳]
test.py:5: note: error found with platform "win32"
Found 2 errors in 1 file (checked 1 source file)

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

mypy に既存の --python-version および --platform コマンドラインオプションと、issue の [tool.mypy] 設定例から始めます。実装とテストを探す前に、サポートされるバージョン/プラットフォームのマトリックスの動作と診断の集約を定義します。完了の条件は、1 回の呼び出しで、手動で繰り返し実行しなくても分岐したパスからのエラーを報告できることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
devtools
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。