`--strict-equality` flag not working with membership operator and `Literal` types
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 20.6k
- フォーク
- 3.3k
- PR マージ指標
- PR 指標を取得中
説明
Bug Report
When using any container (set, frozenset, list, tuples...) containing Literal based types, the --strict-equality is not detecting any issues when I use the membership operator in a non-overlapping check.
To Reproduce
from typing import Literal
OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if "c" in var: # MYPY OK
pass
Expected Behavior
When the flag --strict-equality is set, I would expect that mypy raises an erorr here. Same as it does when I do a non-overlapping equality check:
from typing import Literal
OPTIONS = Literal["a", "b"]
var: list[OPTIONS] = ["a"]
if var[0] == "c": # error: Non-overlapping equality check (left operand type: "Literal['a', 'b']", right operand type: "Literal['c']") [comparison-overlap]
pass
Actual Behavior
No errors are raised
Your Environment
Using Mypy version 1.9.0
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、報告された Python の再現コードを --strict-equality 付きで実行し、その membership check と indexed equality check を比較します。strict-equality と membership-analysis のエントリポイントを特定し、Literal 値のコンテナを対象とする regression test を追加します。mypy が membership expression に対して non-overlapping check を報告し、valid な membership check にリグレッションが発生しなければ完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- devtools
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 48/100