From 5a579280a3b253580bbbe9a4e3872fb5a23649cf Mon Sep 17 00:00:00 2001 From: wyattscarpenter Date: Sun, 1 Feb 2026 03:00:08 -0600 Subject: [PATCH 1/2] add test for 19918: our example code --- test-data/unit/check-redefine.test | 9 +++++++++ test-data/unit/check-redefine2.test | 8 ++++++++ test-data/unit/fixtures/primitives.pyi | 2 ++ 3 files changed, 19 insertions(+) diff --git a/test-data/unit/check-redefine.test b/test-data/unit/check-redefine.test index f760d0582a448..9cc692f03c89f 100644 --- a/test-data/unit/check-redefine.test +++ b/test-data/unit/check-redefine.test @@ -636,3 +636,12 @@ def _(arg: str) -> str: # E: Name "_" already defined (possibly by an import) [file a.py] def f(s: str) -> str: return s + +[case testRedefineListComprehension] +# flags: --allow-redefinition +def process(items: list[str]) -> None: + reveal_type(items) # N: Revealed type is "builtins.list[builtins.str]" + items = [item.split() for item in items] + reveal_type(items) # N: Revealed type is "builtins.list[builtins.list[builtins.str]]" +[builtins fixtures/primitives.pyi] + diff --git a/test-data/unit/check-redefine2.test b/test-data/unit/check-redefine2.test index 6e9441151c935..8a6b871ce1279 100644 --- a/test-data/unit/check-redefine2.test +++ b/test-data/unit/check-redefine2.test @@ -1197,3 +1197,11 @@ x = 0 if int(): x = "" reveal_type(x) # N: Revealed type is "builtins.int | builtins.str" + +[case testNewRedefineListComprehension] +# flags: --allow-redefinition-new --local-partial-types +def process(items: list[str]) -> None: + reveal_type(items) # N: Revealed type is "builtins.list[builtins.str]" + items = [item.split() for item in items] + reveal_type(items) # N: Revealed type is "builtins.list[builtins.list[builtins.str]]" +[builtins fixtures/primitives.pyi] diff --git a/test-data/unit/fixtures/primitives.pyi b/test-data/unit/fixtures/primitives.pyi index fae4576639207..43ab5c90fd7a0 100644 --- a/test-data/unit/fixtures/primitives.pyi +++ b/test-data/unit/fixtures/primitives.pyi @@ -35,6 +35,8 @@ class str(Sequence[str]): def __contains__(self, other: object) -> bool: pass def __getitem__(self, item: int) -> str: pass def format(self, *args: object, **kwargs: object) -> str: pass + # Note: this is a simplification of the actual signature + def split(self, sep: str | None = None) -> list[str]: pass class bytes(Sequence[int]): def __iter__(self) -> Iterator[int]: pass def __contains__(self, other: object) -> bool: pass From 6cf99bd854d853b4b2d5a9c5adcb1eebbf0ab880 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 09:07:53 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- test-data/unit/check-redefine.test | 1 - 1 file changed, 1 deletion(-) diff --git a/test-data/unit/check-redefine.test b/test-data/unit/check-redefine.test index 9cc692f03c89f..2f2b7bad72069 100644 --- a/test-data/unit/check-redefine.test +++ b/test-data/unit/check-redefine.test @@ -644,4 +644,3 @@ def process(items: list[str]) -> None: items = [item.split() for item in items] reveal_type(items) # N: Revealed type is "builtins.list[builtins.list[builtins.str]]" [builtins fixtures/primitives.pyi] -