From 886b1397820d0755ba4694d2b87b668b5571476a Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sat, 27 Jun 2026 23:35:23 -0500 Subject: [PATCH 1/3] fnmatch calls os.path.normcase(arg) --- stdlib/fnmatch.pyi | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/stdlib/fnmatch.pyi b/stdlib/fnmatch.pyi index 345c4576497d..23815c57604f 100644 --- a/stdlib/fnmatch.pyi +++ b/stdlib/fnmatch.pyi @@ -1,15 +1,24 @@ import sys +from _typeshed import AnyOrLiteralStr from collections.abc import Iterable -from typing import AnyStr +from os import PathLike +from typing import AnyStr, overload __all__ = ["filter", "fnmatch", "fnmatchcase", "translate"] if sys.version_info >= (3, 14): __all__ += ["filterfalse"] -def fnmatch(name: AnyStr, pat: AnyStr) -> bool: ... +def fnmatch(name: AnyOrLiteralStr | PathLike[AnyStr], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> bool: ... def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ... -def filter(names: Iterable[AnyStr], pat: AnyStr) -> list[AnyStr]: ... +@overload +def filter(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... +@overload +def filter(names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> list[AnyStr]: ... def translate(pat: str) -> str: ... if sys.version_info >= (3, 14): - def filterfalse(names: Iterable[AnyStr], pat: AnyStr) -> list[AnyStr]: ... + @overload + def filterfalse(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... + @overload + def filterfalse(names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> list[AnyStr]: + ... From 28290a9f00b8b187e9a6e88959691047f013c449 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sun, 28 Jun 2026 05:03:48 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks --- stdlib/fnmatch.pyi | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stdlib/fnmatch.pyi b/stdlib/fnmatch.pyi index 23815c57604f..bfca1e07f11c 100644 --- a/stdlib/fnmatch.pyi +++ b/stdlib/fnmatch.pyi @@ -10,15 +10,18 @@ if sys.version_info >= (3, 14): def fnmatch(name: AnyOrLiteralStr | PathLike[AnyStr], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> bool: ... def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ... + @overload def filter(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... @overload def filter(names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> list[AnyStr]: ... + def translate(pat: str) -> str: ... if sys.version_info >= (3, 14): @overload def filterfalse(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... @overload - def filterfalse(names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> list[AnyStr]: - ... + def filterfalse( + names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr] + ) -> list[AnyStr]: ... From 61110264e1583bd675b64d5ba1bfaaef30f8a7f9 Mon Sep 17 00:00:00 2001 From: Hunter Hogan Date: Sun, 28 Jun 2026 05:10:43 -0500 Subject: [PATCH 3/3] drop overload definitions. use narrow return. --- stdlib/fnmatch.pyi | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/stdlib/fnmatch.pyi b/stdlib/fnmatch.pyi index bfca1e07f11c..1543813c114e 100644 --- a/stdlib/fnmatch.pyi +++ b/stdlib/fnmatch.pyi @@ -2,7 +2,7 @@ import sys from _typeshed import AnyOrLiteralStr from collections.abc import Iterable from os import PathLike -from typing import AnyStr, overload +from typing import AnyStr __all__ = ["filter", "fnmatch", "fnmatchcase", "translate"] if sys.version_info >= (3, 14): @@ -10,18 +10,10 @@ if sys.version_info >= (3, 14): def fnmatch(name: AnyOrLiteralStr | PathLike[AnyStr], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> bool: ... def fnmatchcase(name: AnyStr, pat: AnyStr) -> bool: ... - -@overload -def filter(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... -@overload def filter(names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr]) -> list[AnyStr]: ... - def translate(pat: str) -> str: ... if sys.version_info >= (3, 14): - @overload - def filterfalse(names: Iterable[AnyOrLiteralStr], pat: AnyOrLiteralStr) -> list[AnyOrLiteralStr]: ... - @overload def filterfalse( names: Iterable[AnyOrLiteralStr | PathLike[AnyStr]], pat: AnyOrLiteralStr | PathLike[AnyStr] ) -> list[AnyStr]: ...