You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[1.16 regression] a cast is both needed and redundant at the same time #19170
Since 1.16, structlog's package type check fails with:
src/structlog/stdlib.py:1160: error: Redundant cast to "MutableMapping[str, Any]" [redundant-cast]
ed = p(logger, meth_name, cast(EventDict, ed))
^
Found 1 error in 1 file (checked 1 source file)
If I remove the cast, I get:
src/structlog/stdlib.py:1160: error: Argument 3 has incompatible type "Mapping[str, Any] | str | bytes | bytearray | tuple[Any, ...]"; expected
"MutableMapping[str, Any]" [arg-type]
ed = p(logger, meth_name, ed)
^~
Found 1 error in 1 file (checked 1 source file)
If I add a reveal_type, I get on both 1.15 & 1.16:
src/structlog/stdlib.py:1160: note: Revealed type is "typing.MutableMapping[builtins.str, Any]"
src/structlog/stdlib.py:1160: note: Revealed type is "Union[typing.Mapping[builtins.str, Any], builtins.str, builtins.bytes, builtins.bytearray, builtins.tuple[Any, ...]]"
So I guess Mypy got somehow smarter/confused about that?
To Reproduce
git clone git@github.com:hynek/structlog.git
git checkout d948027
run tox -e mypy-pkg
I really tried to create a minimal reproducer, but given that I don't quite understand what's going on, I've failed.
Yes, I hope we just have to handle codes.REDUNDANT_CAST the same way as codes.REDUNDANT_EXPR in #19118. Maybe there are more such candidates? (UNUSED_IGNORE or so)
Activity
hauntsaninja commentedon May 30, 2025
Thanks! Probably proximal cause is #18588
If you'd like to upgrade to 1.16,
p(logger, meth_name, cast(Any, ed))is probably a foolproof workaroundhauntsaninja commentedon May 30, 2025
Minimised repro:
I guess the cast is redundant the second time through the loop...
tyralla commentedon May 30, 2025
Yes, I hope we just have to handle
codes.REDUNDANT_CASTthe same way ascodes.REDUNDANT_EXPRin #19118. Maybe there are more such candidates? (UNUSED_IGNOREor so)Avoid false `unreachable`, `redundant-expr`, and `redundant-casts` wa…