[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 07/25] qapi/schema: declare type for QAPISchemaArrayType.eleme
From: |
Markus Armbruster |
Subject: |
[PATCH v5 07/25] qapi/schema: declare type for QAPISchemaArrayType.element_type |
Date: |
Fri, 15 Mar 2024 16:22:43 +0100 |
From: John Snow <jsnow@redhat.com>
A QAPISchemaArrayType's element type gets resolved only during .check().
We have QAPISchemaArrayType.__init__() initialize self.element_type =
None, and .check() assign the actual type. Using .element_type before
.check() is wrong, and hopefully crashes due to the value being None.
Works.
However, it makes for awkward typing. With .element_type:
Optional[QAPISchemaType], mypy is of course unable to see that it's None
before .check(), and a QAPISchemaType after. To help it over the hump,
we'd have to assert self.element_type is not None before all the (valid)
uses. The assertion catches invalid uses, but only at run time; mypy
can't flag them.
Instead, declare .element_type in .__init__() as QAPISchemaType
*without* initializing it. Using .element_type before .check() now
certainly crashes, which is an improvement. Mypy still can't flag
invalid uses, but that's okay.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
scripts/qapi/schema.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 307f8af01a..48f157fb91 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -381,7 +381,7 @@ def __init__(self, name, info, element_type):
super().__init__(name, info, None)
assert isinstance(element_type, str)
self._element_type_name = element_type
- self.element_type = None
+ self.element_type: QAPISchemaType
def need_has_if_optional(self):
# When FOO is an array, we still need has_FOO to distinguish
--
2.44.0
- [PATCH v5 17/25] qapi/schema: fix typing for QAPISchemaVariants.tag_member, (continued)
- [PATCH v5 17/25] qapi/schema: fix typing for QAPISchemaVariants.tag_member, Markus Armbruster, 2024/03/15
- [PATCH v5 25/25] qapi: Dumb down QAPISchema.lookup_entity(), Markus Armbruster, 2024/03/15
- [PATCH v5 11/25] qapi/schema: assert resolve_type has 'info' and 'what' args on error, Markus Armbruster, 2024/03/15
- [PATCH v5 18/25] qapi/schema: assert inner type of QAPISchemaVariants in check_clash(), Markus Armbruster, 2024/03/15
- [PATCH v5 21/25] qapi/schema: add type hints, Markus Armbruster, 2024/03/15
- [PATCH v5 23/25] qapi/schema: remove unnecessary asserts, Markus Armbruster, 2024/03/15
- [PATCH v5 05/25] qapi: create QAPISchemaDefinition, Markus Armbruster, 2024/03/15
- [PATCH v5 01/25] qapi/parser: fix typo - self.returns.info => self.errors.info, Markus Armbruster, 2024/03/15
- [PATCH v5 07/25] qapi/schema: declare type for QAPISchemaArrayType.element_type,
Markus Armbruster <=
- [PATCH v5 02/25] qapi/parser: shush up pylint, Markus Armbruster, 2024/03/15
- [PATCH v5 24/25] qapi: Tighten check whether implicit object type already exists, Markus Armbruster, 2024/03/15
- Re: [PATCH v5 00/25] qapi: statically type schema.py, Markus Armbruster, 2024/03/19