diff options
author | David Robertson <davidr@element.io> | 2022-05-17 17:06:45 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-17 16:06:45 +0000 |
commit | 5331fb5b478789a3ffaaeddb58f8d1cefd42a9eb (patch) | |
tree | abc584252f453004d1323b685d1c70e35a3d1194 /scripts-dev | |
parent | Add some type hints to datastore (#12717) (diff) | |
download | synapse-5331fb5b478789a3ffaaeddb58f8d1cefd42a9eb.tar.xz |
allow `on_invalidate=None` in `@cached` methods (#12769)
Diffstat (limited to 'scripts-dev')
-rw-r--r-- | scripts-dev/mypy_synapse_plugin.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/scripts-dev/mypy_synapse_plugin.py b/scripts-dev/mypy_synapse_plugin.py index c775865212..d08517a953 100644 --- a/scripts-dev/mypy_synapse_plugin.py +++ b/scripts-dev/mypy_synapse_plugin.py @@ -21,7 +21,7 @@ from typing import Callable, Optional, Type from mypy.nodes import ARG_NAMED_OPT from mypy.plugin import MethodSigContext, Plugin from mypy.typeops import bind_self -from mypy.types import CallableType, NoneType +from mypy.types import CallableType, NoneType, UnionType class SynapsePlugin(Plugin): @@ -72,13 +72,20 @@ def cached_function_method_signature(ctx: MethodSigContext) -> CallableType: # Third, we add an optional "on_invalidate" argument. # - # This is a callable which accepts no input and returns nothing. - calltyp = CallableType( - arg_types=[], - arg_kinds=[], - arg_names=[], - ret_type=NoneType(), - fallback=ctx.api.named_generic_type("builtins.function", []), + # This is a either + # - a callable which accepts no input and returns nothing, or + # - None. + calltyp = UnionType( + [ + NoneType(), + CallableType( + arg_types=[], + arg_kinds=[], + arg_names=[], + ret_type=NoneType(), + fallback=ctx.api.named_generic_type("builtins.function", []), + ), + ] ) arg_types.append(calltyp) @@ -95,7 +102,7 @@ def cached_function_method_signature(ctx: MethodSigContext) -> CallableType: def plugin(version: str) -> Type[SynapsePlugin]: - # This is the entry point of the plugin, and let's us deal with the fact + # This is the entry point of the plugin, and lets us deal with the fact # that the mypy plugin interface is *not* stable by looking at the version # string. # |