John Snow <js...@redhat.com> writes: > We already take care to perform some type narrowing for arg_type and > ret_type, but not in a way where mypy can utilize the result. A simple > change to use a temporary variable helps the medicine go down. > > Signed-off-by: John Snow <js...@redhat.com> > --- > scripts/qapi/schema.py | 17 +++++++++-------- > 1 file changed, 9 insertions(+), 8 deletions(-) > > diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py > index 4600a566005..a1094283828 100644 > --- a/scripts/qapi/schema.py > +++ b/scripts/qapi/schema.py > @@ -825,13 +825,14 @@ def __init__(self, name, info, doc, ifcond, features, > def check(self, schema): > super().check(schema) > if self._arg_type_name: > - self.arg_type = schema.resolve_type( > + arg_type = schema.resolve_type( > self._arg_type_name, self.info, "command's 'data'") > - if not isinstance(self.arg_type, QAPISchemaObjectType): > + if not isinstance(arg_type, QAPISchemaObjectType): > raise QAPISemError( > self.info, > "command's 'data' cannot take %s" > - % self.arg_type.describe()) > + % arg_type.describe()) > + self.arg_type = arg_type > if self.arg_type.variants and not self.boxed: > raise QAPISemError( > self.info, > @@ -848,8 +849,7 @@ def check(self, schema): > if self.name not in self.info.pragma.command_returns_exceptions: > typ = self.ret_type > if isinstance(typ, QAPISchemaArrayType): > - typ = self.ret_type.element_type > - assert typ > + typ = typ.element_type > if not isinstance(typ, QAPISchemaObjectType): > raise QAPISemError( > self.info, > @@ -885,13 +885,14 @@ def __init__(self, name, info, doc, ifcond, features, > arg_type, boxed): > def check(self, schema): > super().check(schema) > if self._arg_type_name: > - self.arg_type = schema.resolve_type( > + typ = schema.resolve_type( > self._arg_type_name, self.info, "event's 'data'") > - if not isinstance(self.arg_type, QAPISchemaObjectType): > + if not isinstance(typ, QAPISchemaObjectType): > raise QAPISemError( > self.info, > "event's 'data' cannot take %s" > - % self.arg_type.describe()) > + % typ.describe()) > + self.arg_type = typ > if self.arg_type.variants and not self.boxed: > raise QAPISemError( > self.info,
Harmless enough. I can't quite see the mypy problem, though. Care to elaborate a bit?