-
-
Notifications
You must be signed in to change notification settings - Fork 3k
Open
Labels
bugmypy got something wrongmypy got something wrongtopic-pluginsThe plugin API and ideas for new pluginsThe plugin API and ideas for new plugins
Description
Bug Report
I wrote a plugin to replace types, but Mypy fails to typecheck after my changes. I start off trying to fix the type error in this signature with a plugin:
def almost_id(a: str) -> str:
return int(a)
almost_id("6")
with my plugin:
def replace_str(self, ctx: FunctionSigContext) -> FunctionLike:
api = ctx.api
new_signature = ctx.default_signature.copy_modified(
ret_type=api.named_type('builtins.int')
)
un_anal = new_signature.definition.unanalyzed_type.copy_modified(
ret_type = api.named_type('builtins.int')
)
new_signature.definition.unanalyzed_type = un_anal
typ = new_signature.definition.type.copy_modified(
ret_type = api.named_type('builtins.int')
)
new_signature.definition.type = typ
return new_signature
I have tried going through the attrs of the functionsigcontext, api and the expr_checker but can't seem to find some other functionality to either:
- force mypy to proceed with type checking
- modify the existing type analysis or map
- delay type checking until the plugin mods have been completed, something like defer() in the semantic analyzer.
To Reproduce
gist: https://gist.github.com/dibrinsofor/bddcbd2eedbb233b131bb1b8d562369a
mypy tests/str_int.py
Expected Behavior
I expect mypy to pass
Actual Behavior
tests/str_int.py:2: error: Incompatible return value type (got "int", expected "str") [return-value]
even though printing the new signature returns:
def (a: builtins.str) -> builtins.int
Your Environment
- Mypy version used:
1.14.0+dev.8c7db13f71098a6facea66ab165b6bc3ef688bdf
- Mypy command-line flags:
--show-traceback
- Python version used:
Python 3.11.5
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrongtopic-pluginsThe plugin API and ideas for new pluginsThe plugin API and ideas for new plugins