-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Open
Labels
bugmypy got something wrongmypy got something wrongtopic-enumtopic-inferenceWhen to infer types or require explicit annotationsWhen to infer types or require explicit annotationstopic-literal-types
Description
Followup to the advice at #19280 (comment) :)
from enum import Enum
import typing as T
class DependencyMethods(Enum):
# Auto means to use whatever dependency checking mechanisms in whatever order meson thinks is best.
AUTO = 'auto'
PKGCONFIG = 'pkg-config'
CMAKE = 'cmake'
# The dependency is provided by the standard library and does not need to be linked
BUILTIN = 'builtin'
# Just specify the standard link arguments, assuming the operating system provides the library.
SYSTEM = 'system'
# This is only supported on OSX - search the frameworks directory by name.
EXTRAFRAMEWORK = 'extraframework'
# Detect using the sysconfig module.
SYSCONFIG = 'sysconfig'
# Specify using a "program"-config style tool
CONFIG_TOOL = 'config-tool'
# For backwards compatibility
SDLCONFIG = 'sdlconfig'
CUPSCONFIG = 'cups-config'
PCAPCONFIG = 'pcap-config'
LIBWMFCONFIG = 'libwmf-config'
QMAKE = 'qmake'
# Misc
DUB = 'dub'
def process_method_kw(possible: T.Iterable[DependencyMethods], kwargs: T.Dict[str, T.Any]) -> T.List[DependencyMethods]:
method: T.Union[DependencyMethods, str] = kwargs.get('method', 'auto')
method = DependencyMethods(method)
# handle renames...
# Set the detection method. If the method is set to auto, use any available method.
# If method is set to a specific string, allow only that detection method.
if method == DependencyMethods.AUTO:
methods = list(possible)
elif method in possible:
methods = [method]
else:
raise Exception('argh')
return methodsExpected Behavior
Passes type checking.
Actual Behavior
$ mypy --local-partial-types --allow-redefinition-new foo.py
foo.py:43: error: Incompatible return value type (got "list[DependencyMethods] | list[Literal[DependencyMethods.PKGCONFIG, DependencyMethods.CMAKE, DependencyMethods.BUILTIN, DependencyMethods.SYSTEM, DependencyMethods.EXTRAFRAMEWORK, DependencyMethods.SYSCONFIG, DependencyMethods.CONFIG_TOOL, DependencyMethods.SDLCONFIG, DependencyMethods.CUPSCONFIG, DependencyMethods.PCAPCONFIG, DependencyMethods.LIBWMFCONFIG, DependencyMethods.QMAKE, DependencyMethods.DUB]]", expected "list[DependencyMethods]") [return-value]
Found 1 error in 1 file (checked 1 source file)
It is being redefined as "Literal for every possible enum value". If I annotate the first assignment as T.List[DependencyMethods] then it works (the second assignment fits into the first!), but I feel like I ought not need this.
Your Environment
- Mypy version used: mypy 1.18.2 (compiled: yes)
- Mypy command-line flags: --local-partial-types --allow-redefinition-new
Metadata
Metadata
Assignees
Labels
bugmypy got something wrongmypy got something wrongtopic-enumtopic-inferenceWhen to infer types or require explicit annotationsWhen to infer types or require explicit annotationstopic-literal-types