From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: John Snow <jsnow@redhat.com>,
Markus Armbruster <armbru@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Cleber Rosa <crosa@redhat.com>
Subject: [PATCH v3 27/47] qapi/commands.py: add type hint annotations
Date: Thu, 24 Sep 2020 20:28:40 -0400 [thread overview]
Message-ID: <20200925002900.465855-28-jsnow@redhat.com> (raw)
In-Reply-To: <20200925002900.465855-1-jsnow@redhat.com>
Annotations do not change runtime behavior.
This commit *only* adds annotations.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
---
scripts/qapi/commands.py | 71 ++++++++++++++++++++++++++++++----------
1 file changed, 54 insertions(+), 17 deletions(-)
diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
index 586774a23c..24f347a3f1 100644
--- a/scripts/qapi/commands.py
+++ b/scripts/qapi/commands.py
@@ -13,16 +13,34 @@
See the COPYING file in the top-level directory.
"""
+from typing import (
+ Dict,
+ List,
+ Optional,
+ Set,
+)
+
from .common import c_name, mcgen
from .gen import (
+ QAPIGenC,
QAPIGenCCode,
QAPISchemaModularCVisitor,
build_params,
ifcontext,
)
+from .schema import (
+ QAPISchema,
+ QAPISchemaFeature,
+ QAPISchemaObjectType,
+ QAPISchemaType,
+)
+from .source import QAPISourceInfo
-def gen_command_decl(name, arg_type, boxed, ret_type):
+def gen_command_decl(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
return mcgen('''
%(c_type)s qmp_%(c_name)s(%(params)s);
''',
@@ -31,7 +49,10 @@ def gen_command_decl(name, arg_type, boxed, ret_type):
params=build_params(arg_type, boxed, 'Error **errp'))
-def gen_call(name, arg_type, boxed, ret_type):
+def gen_call(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
ret = ''
argstr = ''
@@ -67,7 +88,7 @@ def gen_call(name, arg_type, boxed, ret_type):
return ret
-def gen_marshal_output(ret_type):
+def gen_marshal_output(ret_type: QAPISchemaType) -> str:
return mcgen('''
static void qmp_marshal_output_%(c_name)s(%(c_type)s ret_in,
@@ -88,19 +109,22 @@ def gen_marshal_output(ret_type):
c_type=ret_type.c_type(), c_name=ret_type.c_name())
-def build_marshal_proto(name):
+def build_marshal_proto(name: str) -> str:
return ('void qmp_marshal_%s(QDict *args, QObject **ret, Error **errp)'
% c_name(name))
-def gen_marshal_decl(name):
+def gen_marshal_decl(name: str) -> str:
return mcgen('''
%(proto)s;
''',
proto=build_marshal_proto(name))
-def gen_marshal(name, arg_type, boxed, ret_type):
+def gen_marshal(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
have_args = boxed or (arg_type and not arg_type.is_empty())
ret = mcgen('''
@@ -182,7 +206,10 @@ def gen_marshal(name, arg_type, boxed, ret_type):
return ret
-def gen_register_command(name, success_response, allow_oob, allow_preconfig):
+def gen_register_command(name: str,
+ success_response: bool,
+ allow_oob: bool,
+ allow_preconfig: bool) -> str:
options = []
if not success_response:
@@ -204,7 +231,7 @@ def gen_register_command(name, success_response, allow_oob, allow_preconfig):
return ret
-def gen_registry(registry, prefix):
+def gen_registry(registry: str, prefix: str) -> str:
ret = mcgen('''
void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds)
@@ -221,15 +248,14 @@ def gen_registry(registry, prefix):
class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
-
- def __init__(self, prefix):
+ def __init__(self, prefix: str):
super().__init__(
prefix, 'qapi-commands',
' * Schema-defined QAPI/QMP commands', None, __doc__)
self._regy = QAPIGenCCode(None)
- self._visited_ret_types = {}
+ self._visited_ret_types: Dict[QAPIGenC, Set[QAPISchemaType]] = {}
- def _begin_user_module(self, name):
+ def _begin_user_module(self, name: str) -> None:
self._visited_ret_types[self._genc] = set()
commands = self._module_basename('qapi-commands', name)
types = self._module_basename('qapi-types', name)
@@ -253,7 +279,7 @@ def _begin_user_module(self, name):
''',
types=types))
- def visit_end(self):
+ def visit_end(self) -> None:
self._add_system_module('init', ' * QAPI Commands initialization')
self._genh.add(mcgen('''
#include "qapi/qmp/dispatch.h"
@@ -269,9 +295,18 @@ def visit_end(self):
prefix=self._prefix))
self._genc.add(gen_registry(self._regy.get_content(), self._prefix))
- def visit_command(self, name, info, ifcond, features,
- arg_type, ret_type, gen, success_response, boxed,
- allow_oob, allow_preconfig):
+ def visit_command(self,
+ name: str,
+ info: QAPISourceInfo,
+ ifcond: List[str],
+ features: List[QAPISchemaFeature],
+ arg_type: Optional[QAPISchemaObjectType],
+ ret_type: Optional[QAPISchemaType],
+ gen: bool,
+ success_response: bool,
+ boxed: bool,
+ allow_oob: bool,
+ allow_preconfig: bool) -> None:
if not gen:
return
# FIXME: If T is a user-defined type, the user is responsible
@@ -292,7 +327,9 @@ def visit_command(self, name, info, ifcond, features,
allow_oob, allow_preconfig))
-def gen_commands(schema, output_dir, prefix):
+def gen_commands(schema: QAPISchema,
+ output_dir: str,
+ prefix: str) -> None:
vis = QAPISchemaGenCommandVisitor(prefix)
schema.visit(vis)
vis.write(output_dir)
--
2.26.2
next prev parent reply other threads:[~2020-09-25 0:48 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-25 0:28 [PATCH v3 00/47] qapi: static typing conversion, pt1 John Snow
2020-09-25 0:28 ` [PATCH v3 01/47] [DO-NOT-MERGE] docs: replace single backtick (`) with double-backtick (``) John Snow
2020-09-29 2:47 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 02/47] [DO-NOT-MERGE] docs: repair broken references John Snow
2020-09-29 2:48 ` Cleber Rosa
2020-09-29 3:14 ` Cleber Rosa
2020-09-29 15:30 ` John Snow
2020-09-29 18:16 ` John Snow
2020-09-25 0:28 ` [PATCH v3 03/47] [DO-NOT-MERGE] docs/sphinx: change default role to "any" John Snow
2020-09-29 3:30 ` Cleber Rosa
2020-09-29 15:33 ` John Snow
2020-09-29 18:20 ` John Snow
2020-09-25 0:28 ` [PATCH v3 04/47] qapi: modify docstrings to be sphinx-compatible John Snow
2020-09-29 3:39 ` Cleber Rosa
2020-09-29 15:37 ` John Snow
2020-09-25 0:28 ` [PATCH v3 05/47] qapi/doc.py: Change code templates from function to string John Snow
2020-09-25 8:59 ` Markus Armbruster
2020-09-25 14:23 ` John Snow
2020-09-29 3:51 ` Cleber Rosa
2020-09-29 18:25 ` John Snow
2020-09-25 0:28 ` [PATCH v3 06/47] [DO-NOT-MERGE] docs: enable sphinx-autodoc for scripts/qapi John Snow
2020-09-29 4:00 ` Cleber Rosa
2020-09-29 18:30 ` John Snow
2020-09-25 0:28 ` [PATCH v3 07/47] qapi-gen: Separate arg-parsing from generation John Snow
2020-09-29 4:02 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 08/47] qapi: move generator entrypoint into module John Snow
2020-09-25 0:28 ` [PATCH v3 09/47] [DO-NOT-MERGE] docs: add scripts/qapi/main to python manual John Snow
2020-09-25 0:28 ` [PATCH v3 10/47] qapi: Prefer explicit relative imports John Snow
2020-09-25 0:28 ` [PATCH v3 11/47] qapi: Remove wildcard includes John Snow
2020-09-25 0:28 ` [PATCH v3 12/47] qapi: enforce import order/styling with isort John Snow
2020-09-25 9:20 ` Markus Armbruster
2020-09-25 15:26 ` John Snow
2020-09-28 12:13 ` Markus Armbruster
2020-09-28 14:34 ` John Snow
2020-09-29 4:13 ` Cleber Rosa
2020-09-29 4:15 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 13/47] qapi: delint using flake8 John Snow
2020-09-25 0:28 ` [PATCH v3 14/47] qapi: add pylintrc John Snow
2020-09-25 0:28 ` [PATCH v3 15/47] qapi/common.py: Remove python compatibility workaround John Snow
2020-09-25 0:28 ` [PATCH v3 16/47] qapi/common.py: Add indent manager John Snow
2020-09-25 0:28 ` [PATCH v3 17/47] qapi/common.py: delint with pylint John Snow
2020-09-25 0:28 ` [PATCH v3 18/47] qapi/common.py: Replace one-letter 'c' variable John Snow
2020-09-25 0:28 ` [PATCH v3 19/47] qapi/common.py: check with pylint John Snow
2020-09-25 0:28 ` [PATCH v3 20/47] qapi/common.py: add type hint annotations John Snow
2020-09-25 0:28 ` [PATCH v3 21/47] qapi/common.py: Convert comments into docstrings, and elaborate John Snow
2020-09-25 0:28 ` [PATCH v3 22/47] qapi/common.py: move build_params into gen.py John Snow
2020-09-25 0:28 ` [PATCH v3 23/47] qapi: establish mypy type-checking baseline John Snow
2020-09-29 4:17 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 24/47] qapi/events.py: add type hint annotations John Snow
2020-09-25 0:28 ` [PATCH v3 25/47] qapi/events.py: Move comments into docstrings John Snow
2020-09-25 0:28 ` [PATCH v3 26/47] qapi/commands.py: Don't re-bind to variable of different type John Snow
2020-09-25 0:28 ` John Snow [this message]
2020-09-25 0:28 ` [PATCH v3 28/47] qapi/commands.py: enable checking with mypy John Snow
2020-09-25 0:28 ` [PATCH v3 29/47] qapi/source.py: add type hint annotations John Snow
2020-09-29 4:18 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 30/47] qapi/source.py: delint with pylint John Snow
2020-09-25 0:28 ` [PATCH v3 31/47] qapi/gen.py: Fix edge-case of _is_user_module John Snow
2020-09-29 4:22 ` Cleber Rosa
2020-09-25 0:28 ` [PATCH v3 32/47] qapi/gen.py: add type hint annotations John Snow
2020-09-25 0:28 ` [PATCH v3 33/47] qapi/gen.py: Enable checking with mypy John Snow
2020-09-25 0:28 ` [PATCH v3 34/47] qapi/gen.py: Remove unused parameter John Snow
2020-09-25 0:28 ` [PATCH v3 35/47] qapi/gen.py: update write() to be more idiomatic John Snow
2020-09-25 0:28 ` [PATCH v3 36/47] qapi/gen.py: delint with pylint John Snow
2020-09-25 0:28 ` [PATCH v3 37/47] qapi/introspect.py: assert obj is a dict when features are given John Snow
2020-09-25 0:28 ` [PATCH v3 38/47] qapi/instrospect.py: add preliminary type hint annotations John Snow
2020-09-25 0:28 ` [PATCH v3 39/47] qapi/introspect.py: add _gen_features helper John Snow
2020-09-25 0:28 ` [PATCH v3 40/47] qapi/introspect.py: Unify return type of _make_tree() John Snow
2020-09-25 0:28 ` [PATCH v3 41/47] qapi/introspect.py: replace 'extra' dict with 'comment' argument John Snow
2020-09-25 0:28 ` [PATCH v3 42/47] qapi/introspect.py: create a typed 'Node' data structure John Snow
2020-09-25 0:28 ` [PATCH v3 43/47] qapi/types.py: add type hint annotations John Snow
2020-09-25 0:28 ` [PATCH v3 44/47] qapi/types.py: remove one-letter variables John Snow
2020-09-25 0:28 ` [PATCH v3 45/47] qapi/visit.py: assert tag_member contains a QAPISchemaEnumType John Snow
2020-09-25 0:28 ` [PATCH v3 46/47] qapi/visit.py: remove unused parameters from gen_visit_object John Snow
2020-09-25 0:29 ` [PATCH v3 47/47] qapi/visit.py: add type hint annotations John Snow
2020-09-28 15:17 ` [PATCH v3 00/47] qapi: static typing conversion, pt1 John Snow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200925002900.465855-28-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).