[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 37/37] qapi/visit.py: add notational type hints
From: |
John Snow |
Subject: |
[PATCH 37/37] qapi/visit.py: add notational type hints |
Date: |
Tue, 15 Sep 2020 18:40:27 -0400 |
Signed-off-by: John Snow <jsnow@redhat.com>
---
scripts/qapi/mypy.ini | 5 ---
scripts/qapi/visit.py | 72 +++++++++++++++++++++++++++++++++----------
2 files changed, 55 insertions(+), 22 deletions(-)
diff --git a/scripts/qapi/mypy.ini b/scripts/qapi/mypy.ini
index 3babc380a8..5ab3433c5f 100644
--- a/scripts/qapi/mypy.ini
+++ b/scripts/qapi/mypy.ini
@@ -28,8 +28,3 @@ check_untyped_defs = False
disallow_untyped_defs = False
disallow_incomplete_defs = False
check_untyped_defs = False
-
-[mypy-qapi.visit]
-disallow_untyped_defs = False
-disallow_incomplete_defs = False
-check_untyped_defs = False
diff --git a/scripts/qapi/visit.py b/scripts/qapi/visit.py
index ce71659a03..035521476f 100644
--- a/scripts/qapi/visit.py
+++ b/scripts/qapi/visit.py
@@ -13,6 +13,8 @@
See the COPYING file in the top-level directory.
"""
+from typing import List, Optional
+
from .common import (
c_enum_const,
c_name,
@@ -22,10 +24,19 @@
INDENT,
)
from .gen import QAPISchemaModularCVisitor, ifcontext
-from .schema import QAPISchemaObjectType
+from .schema import (
+ QAPISchema,
+ QAPISchemaEnumMember,
+ QAPISchemaFeature,
+ QAPISchemaObjectType,
+ QAPISchemaObjectTypeMember,
+ QAPISchemaVariants,
+ QAPISchemaType,
+)
+from .source import QAPISourceInfo
-def gen_visit_decl(name, scalar=False):
+def gen_visit_decl(name: str, scalar: bool = False) -> str:
c_type = c_name(name) + ' *'
if not scalar:
c_type += '*'
@@ -36,7 +47,7 @@ def gen_visit_decl(name, scalar=False):
c_name=c_name(name), c_type=c_type)
-def gen_visit_members_decl(name):
+def gen_visit_members_decl(name: str) -> str:
return mcgen('''
bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp);
@@ -44,7 +55,10 @@ def gen_visit_members_decl(name):
c_name=c_name(name))
-def gen_visit_object_members(name, base, members, variants):
+def gen_visit_object_members(name: str,
+ base: Optional[QAPISchemaObjectType],
+ members: List[QAPISchemaObjectTypeMember],
+ variants: Optional[QAPISchemaVariants]) -> str:
ret = mcgen('''
bool visit_type_%(c_name)s_members(Visitor *v, %(c_name)s *obj, Error **errp)
@@ -122,7 +136,7 @@ def gen_visit_object_members(name, base, members, variants):
return ret
-def gen_visit_list(name, element_type):
+def gen_visit_list(name: str, element_type: QAPISchemaType) -> str:
return mcgen('''
bool visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj,
@@ -156,7 +170,7 @@ def gen_visit_list(name, element_type):
c_name=c_name(name), c_elt_type=element_type.c_name())
-def gen_visit_enum(name):
+def gen_visit_enum(name: str) -> str:
return mcgen('''
bool visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s *obj,
@@ -171,7 +185,7 @@ def gen_visit_enum(name):
c_name=c_name(name))
-def gen_visit_alternate(name, variants):
+def gen_visit_alternate(name: str, variants: QAPISchemaVariants) -> str:
ret = mcgen('''
bool visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj,
@@ -247,7 +261,7 @@ def gen_visit_alternate(name, variants):
return ret
-def gen_visit_object(name):
+def gen_visit_object(name: str) -> str:
return mcgen('''
bool visit_type_%(c_name)s(Visitor *v, const char *name, %(c_name)s **obj,
@@ -282,12 +296,12 @@ def gen_visit_object(name):
class QAPISchemaGenVisitVisitor(QAPISchemaModularCVisitor):
- def __init__(self, prefix):
+ def __init__(self, prefix: str):
super().__init__(
prefix, 'qapi-visit', ' * Schema-defined QAPI visitors',
' * Built-in QAPI visitors', __doc__)
- def _begin_system_module(self, name):
+ def _begin_system_module(self, name: None) -> None:
self._genc.preamble_add(mcgen('''
#include "qemu/osdep.h"
#include "qapi/error.h"
@@ -299,7 +313,7 @@ def _begin_system_module(self, name):
'''))
- def _begin_user_module(self, name):
+ def _begin_user_module(self, name: str) -> None:
types = self._module_basename('qapi-types', name)
visit = self._module_basename('qapi-visit', name)
self._genc.preamble_add(mcgen('''
@@ -316,18 +330,34 @@ def _begin_user_module(self, name):
''',
types=types))
- def visit_enum_type(self, name, info, ifcond, features, members, prefix):
+ def visit_enum_type(self,
+ name: str,
+ info: QAPISourceInfo,
+ ifcond: List[str],
+ features: List[QAPISchemaFeature],
+ members: List[QAPISchemaEnumMember],
+ prefix: Optional[str]) -> None:
with ifcontext(ifcond, self._genh, self._genc):
self._genh.add(gen_visit_decl(name, scalar=True))
self._genc.add(gen_visit_enum(name))
- def visit_array_type(self, name, info, ifcond, element_type):
+ def visit_array_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: List[str],
+ element_type: QAPISchemaType) -> None:
with ifcontext(ifcond, self._genh, self._genc):
self._genh.add(gen_visit_decl(name))
self._genc.add(gen_visit_list(name, element_type))
- def visit_object_type(self, name, info, ifcond, features,
- base, members, variants):
+ def visit_object_type(self,
+ name: str,
+ info: Optional[QAPISourceInfo],
+ ifcond: List[str],
+ features: List[QAPISchemaFeature],
+ base: Optional[QAPISchemaObjectType],
+ members: List[QAPISchemaObjectTypeMember],
+ variants: Optional[QAPISchemaVariants]) -> None:
# Nothing to do for the special empty builtin
if name == 'q_empty':
return
@@ -342,13 +372,21 @@ def visit_object_type(self, name, info, ifcond, features,
self._genh.add(gen_visit_decl(name))
self._genc.add(gen_visit_object(name))
- def visit_alternate_type(self, name, info, ifcond, features, variants):
+ def visit_alternate_type(self,
+ name: str,
+ info: QAPISourceInfo,
+ ifcond: List[str],
+ features: List[QAPISchemaFeature],
+ variants: QAPISchemaVariants) -> None:
with ifcontext(ifcond, self._genh, self._genc):
self._genh.add(gen_visit_decl(name))
self._genc.add(gen_visit_alternate(name, variants))
-def gen_visit(schema, output_dir, prefix, opt_builtins):
+def gen_visit(schema: QAPISchema,
+ output_dir: str,
+ prefix: str,
+ opt_builtins: bool) -> None:
vis = QAPISchemaGenVisitVisitor(prefix)
schema.visit(vis)
vis.write(output_dir, opt_builtins)
--
2.26.2
- [PATCH 20/37] qapi/commands.py: add notational type hints, (continued)
- [PATCH 20/37] qapi/commands.py: add notational type hints, John Snow, 2020/09/15
- [PATCH 23/37] qapi/source.py: delint with pylint, John Snow, 2020/09/15
- [PATCH 28/37] qapi/gen.py: update write() to be more idiomatic, John Snow, 2020/09/15
- [PATCH 29/37] qapi/gen.py: delint with pylint, John Snow, 2020/09/15
- [PATCH 27/37] qapi/gen.py: Remove unused parameter, John Snow, 2020/09/15
- [PATCH 26/37] qapi/gen.py: Enable checking with mypy, John Snow, 2020/09/15
- [PATCH 30/37] qapi/introspect.py: Add a typed 'extra' structure, John Snow, 2020/09/15
- [PATCH 25/37] qapi/gen.py: add notational type hints, John Snow, 2020/09/15
- [PATCH 34/37] qapi/types.py: add notational type hints, John Snow, 2020/09/15
- [PATCH 36/37] qapi/visit.py: remove unused parameters from gen_visit_object, John Snow, 2020/09/15
- [PATCH 37/37] qapi/visit.py: add notational type hints,
John Snow <=
- [PATCH 31/37] qapi/introspect.py: add _gen_features helper, John Snow, 2020/09/15
- [PATCH 32/37] qapi/introspect.py: create a typed 'Node' data structure, John Snow, 2020/09/15
- [PATCH 35/37] qapi/types.py: remove one-letter variables, John Snow, 2020/09/15
- [PATCH 33/37] qapi/introspect.py: add notational type hints, John Snow, 2020/09/15
- Re: [PATCH 00/37] qapi: static typing conversion, pt1, John Snow, 2020/09/16
- Re: [PATCH 00/37] qapi: static typing conversion, pt1, John Snow, 2020/09/17
- Re: [PATCH 00/37] qapi: static typing conversion, pt1, Philippe Mathieu-Daudé, 2020/09/18