Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update semanal_enum.py #8436

Closed
wants to merge 10 commits into from
2 changes: 2 additions & 0 deletions mypy/checkexpr.py
Original file line number Diff line number Diff line change
Expand Up @@ -3424,6 +3424,8 @@ def visit_super_expr(self, e: SuperExpr) -> Type:

# We have an expression like super(T, var).member

print(SuperExpr)
Arshaan-256 marked this conversation as resolved.
Show resolved Hide resolved

# First compute the types of T and var
types = self._super_arg_types(e)
if isinstance(types, tuple):
Expand Down
30 changes: 26 additions & 4 deletions mypy/semanal_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

from mypy.nodes import (
Expression, Context, TypeInfo, AssignmentStmt, NameExpr, CallExpr, RefExpr, StrExpr,
UnicodeExpr, TupleExpr, ListExpr, DictExpr, Var, SymbolTableNode, MDEF, ARG_POS,
UnicodeExpr, TupleExpr, ListExpr, DictExpr, Var, SymbolTableNode, MDEF, ARG_POS, ARG_NAMED_OPT,
EnumCallExpr, MemberExpr
)
from mypy.semanal_shared import SemanticAnalyzerInterface
Expand Down Expand Up @@ -106,10 +106,32 @@ def parse_enum_call_args(self, call: CallExpr,
args = call.args
if len(args) < 2:
return self.fail_enum_call_arg("Too few arguments for %s()" % class_name, call)
if len(args) > 2:

elif len(args) == 2:
if call.arg_kinds != [ARG_POS, ARG_POS]:
return self.fail_enum_call_arg("Unexpected arguments to %s()" % class_name, call)

elif len(args) > 2:
if len(args) == 3:
if call.arg_kinds != [ARG_POS, ARG_POS, ARG_NAMED_OPT]:
return self.fail_enum_call_arg("Too many arguments for %s()" % class_name, call)
elif len(args) == 4:
if call.arg_kinds != [ARG_POS, ARG_POS, ARG_NAMED_OPT, ARG_NAMED_OPT]:
return self.fail_enum_call_arg("Too many arguments for %s()" % class_name, call)
elif len(args) == 5:
if call.arg_kinds != [ARG_POS, ARG_POS, ARG_NAMED_OPT, ARG_NAMED_OPT, ARG_NAMED_OPT]:
return self.fail_enum_call_arg("Too many arguments for %s()" % class_name, call)
elif len(args) == 6:
if call.arg_kinds != [ARG_POS, ARG_POS, ARG_NAMED_OPT, ARG_NAMED_OPT, ARG_NAMED_OPT, ARG_NAMED_OPT]:
return self.fail_enum_call_arg("Too many arguments for %s()" % class_name, call)

for arg in args:
if arg not in ['module', 'qualname', 'type', 'start']:
return self.fail_enum_call_arg("Unexpected keyword %s arguments for %s()" % (arg, class_name), call)

else:
return self.fail_enum_call_arg("Too many arguments for %s()" % class_name, call)
if call.arg_kinds != [ARG_POS, ARG_POS]:
return self.fail_enum_call_arg("Unexpected arguments to %s()" % class_name, call)

if not isinstance(args[0], (StrExpr, UnicodeExpr)):
return self.fail_enum_call_arg(
"%s() expects a string literal as the first argument" % class_name, call)
Expand Down