MCPcopy Index your code
hub / github.com/python/mypy / check_enum

Method check_enum

mypy/checker.py:2934–2961  ·  view source on GitHub ↗
(self, defn: ClassDef)

Source from the content-addressed store, hash-verified

2932 self.fail("TypeVar default must be one of the constraint types", tv)
2933
2934 def check_enum(self, defn: ClassDef) -> None:
2935 assert defn.info.is_enum
2936 if defn.info.fullname not in ENUM_BASES and "__members__" in defn.info.names:
2937 sym = defn.info.names["__members__"]
2938 if isinstance(sym.node, Var) and sym.node.has_explicit_value:
2939 # `__members__` will always be overwritten by `Enum` and is considered
2940 # read-only, so we disallow assigning a value to it
2941 self.fail(message_registry.ENUM_MEMBERS_ATTR_WILL_BE_OVERRIDDEN, sym.node)
2942 for base in defn.info.mro[1:-1]: # we don't need self and `object`
2943 if base.is_enum and base.fullname not in ENUM_BASES:
2944 self.check_final_enum(defn, base)
2945
2946 if self.is_stub and self.tree.fullname not in {"enum", "_typeshed"}:
2947 if not defn.info.enum_members:
2948 self.fail(
2949 f'Detected enum "{defn.info.fullname}" in a type stub with zero members. '
2950 "There is a chance this is due to a recent change in the semantics of "
2951 "enum membership. If so, use `member = value` to mark an enum member, "
2952 "instead of `member: type`",
2953 defn,
2954 )
2955 self.note(
2956 "See https://typing.readthedocs.io/en/latest/spec/enums.html#defining-members",
2957 defn,
2958 )
2959
2960 self.check_enum_bases(defn)
2961 self.check_enum_new(defn)
2962
2963 def check_final_enum(self, defn: ClassDef, base: TypeInfo) -> None:
2964 if base.enum_members:

Callers 1

visit_class_defMethod · 0.95

Calls 6

failMethod · 0.95
check_final_enumMethod · 0.95
noteMethod · 0.95
check_enum_basesMethod · 0.95
check_enum_newMethod · 0.95
isinstanceFunction · 0.85

Tested by

no test coverage detected