From: Markus Armbruster <armbru@redhat.com>
To: John Snow <jsnow@redhat.com>
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Cleber Rosa" <crosa@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
qemu-devel@nongnu.org, "Eduardo Habkost" <ehabkost@redhat.com>
Subject: Re: [PATCH 13/37] qapi/common.py: add notational type hints
Date: Thu, 17 Sep 2020 16:32:02 +0200 [thread overview]
Message-ID: <87h7rwpj8d.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20200915224027.2529813-14-jsnow@redhat.com> (John Snow's message of "Tue, 15 Sep 2020 18:40:03 -0400")
Question on the subject line: what makes a type hint notational?
John Snow <jsnow@redhat.com> writes:
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> scripts/qapi/common.py | 27 ++++++++++++++++-----------
> 1 file changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 4c079755d3..af01348b35 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -12,6 +12,7 @@
> # See the COPYING file in the top-level directory.
>
> import re
> +from typing import Optional, Union, Sequence
>
>
> EATSPACE = '\033EATSPACE.'
> @@ -22,7 +23,7 @@
> # ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
> # ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
> # ENUM24_Name -> ENUM24_NAME
> -def camel_to_upper(value):
> +def camel_to_upper(value: str) -> str:
> c_fun_str = c_name(value, False)
> if value.isupper():
> return c_fun_str
> @@ -41,7 +42,9 @@ def camel_to_upper(value):
> return new_name.lstrip('_').upper()
>
>
> -def c_enum_const(type_name, const_name, prefix=None):
> +def c_enum_const(type_name: str,
> + const_name: str,
> + prefix: Optional[str] = None) -> str:
> if prefix is not None:
> type_name = prefix
> return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
> @@ -56,7 +59,7 @@ def c_enum_const(type_name, const_name, prefix=None):
> # into substrings of a generated C function name.
> # '__a.b_c' -> '__a_b_c', 'x-foo' -> 'x_foo'
> # protect=True: 'int' -> 'q_int'; protect=False: 'int' -> 'int'
> -def c_name(name, protect=True):
> +def c_name(name: str, protect: bool = True) -> str:
> # ANSI X3J11/88-090, 3.1.1
> c89_words = set(['auto', 'break', 'case', 'char', 'const', 'continue',
> 'default', 'do', 'double', 'else', 'enum', 'extern',
> @@ -134,24 +137,24 @@ def pop(self, amount: int = 4) -> int:
>
> # Generate @code with @kwds interpolated.
> # Obey INDENT level, and strip EATSPACE.
> -def cgen(code, **kwds):
> +def cgen(code: str, **kwds: Union[str, int]) -> str:
Hmm.
The @kwds values can be anything, provided they match the conversion
specifiers in @code:
> raw = code % kwds
Your type hint adds a restriction that wasn't there before.
Is there a better way?
> if INDENT:
> raw, _ = re.subn(r'^(?!(#|$))', str(INDENT), raw, flags=re.MULTILINE)
> return re.sub(re.escape(EATSPACE) + r' *', '', raw)
>
>
> -def mcgen(code, **kwds):
> +def mcgen(code: str, **kwds: Union[str, int]) -> str:
Likewise.
> if code[0] == '\n':
> code = code[1:]
> return cgen(code, **kwds)
>
>
> -def c_fname(filename):
> +def c_fname(filename: str) -> str:
> return re.sub(r'[^A-Za-z0-9_]', '_', filename)
>
>
> -def guardstart(name):
> +def guardstart(name: str) -> str:
> return mcgen('''
> #ifndef %(name)s
> #define %(name)s
> @@ -160,7 +163,7 @@ def guardstart(name):
> name=c_fname(name).upper())
>
>
> -def guardend(name):
> +def guardend(name: str) -> str:
> return mcgen('''
>
> #endif /* %(name)s */
> @@ -168,7 +171,7 @@ def guardend(name):
> name=c_fname(name).upper())
>
>
> -def gen_if(ifcond):
> +def gen_if(ifcond: Sequence[str]) -> str:
> ret = ''
> for ifc in ifcond:
> ret += mcgen('''
> @@ -177,7 +180,7 @@ def gen_if(ifcond):
> return ret
>
>
> -def gen_endif(ifcond):
> +def gen_endif(ifcond: Sequence[str]) -> str:
> ret = ''
> for ifc in reversed(ifcond):
> ret += mcgen('''
> @@ -186,7 +189,9 @@ def gen_endif(ifcond):
> return ret
>
>
> -def build_params(arg_type, boxed, extra=None):
> +def build_params(arg_type,
> + boxed: bool,
> + extra: Optional[str] = None) -> str:
> ret = ''
> sep = ''
> if boxed:
next prev parent reply other threads:[~2020-09-17 14:34 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-15 22:39 [PATCH 00/37] qapi: static typing conversion, pt1 John Snow
2020-09-15 22:39 ` [PATCH 01/37] python: Require 3.6+ John Snow
2020-09-16 8:42 ` Markus Armbruster
2020-09-16 8:51 ` Daniel P. Berrangé
2020-09-15 22:39 ` [PATCH 02/37] [DO-NOT-MERGE] qapi: add debugging tools John Snow
2020-09-15 22:39 ` [PATCH 03/37] qapi-gen: Separate arg-parsing from generation John Snow
2020-09-15 22:39 ` [PATCH 04/37] qapi: move generator entrypoint into module John Snow
2020-09-16 11:54 ` Markus Armbruster
2020-09-16 14:24 ` John Snow
2020-09-17 7:46 ` Markus Armbruster
2020-09-15 22:39 ` [PATCH 05/37] qapi: Remove wildcard includes John Snow
2020-09-15 22:39 ` [PATCH 06/37] qapi: delint using flake8 John Snow
2020-09-16 12:12 ` Markus Armbruster
2020-09-16 14:29 ` John Snow
2020-09-17 7:54 ` Markus Armbruster
2020-09-17 16:57 ` John Snow
2020-09-18 10:33 ` Markus Armbruster
2020-09-18 18:13 ` John Snow
2020-09-21 7:31 ` Markus Armbruster
2020-09-21 14:50 ` John Snow
2020-09-15 22:39 ` [PATCH 07/37] qapi: add pylintrc John Snow
2020-09-16 12:30 ` Markus Armbruster
2020-09-16 14:37 ` John Snow
2020-09-17 7:58 ` Markus Armbruster
2020-09-17 17:06 ` John Snow
2020-09-15 22:39 ` [PATCH 08/37] qapi/common.py: Remove python compatibility workaround John Snow
2020-09-16 12:34 ` Markus Armbruster
2020-09-16 14:38 ` John Snow
2020-09-15 22:39 ` [PATCH 09/37] qapi/common.py: Add indent manager John Snow
2020-09-16 15:13 ` Markus Armbruster
2020-09-16 22:25 ` John Snow
2020-09-17 8:07 ` Markus Armbruster
2020-09-17 17:18 ` John Snow
2020-09-18 10:55 ` Markus Armbruster
2020-09-18 16:08 ` John Snow
2020-09-21 7:43 ` Markus Armbruster
2020-09-15 22:40 ` [PATCH 10/37] qapi/common.py: delint with pylint John Snow
2020-09-17 14:15 ` Markus Armbruster
2020-09-17 17:48 ` John Snow
2020-09-18 11:03 ` Markus Armbruster
2020-09-15 22:40 ` [PATCH 11/37] qapi/common.py: Replace one-letter 'c' variable John Snow
2020-09-17 14:17 ` Markus Armbruster
2020-09-17 17:51 ` John Snow
2020-09-15 22:40 ` [PATCH 12/37] qapi/common.py: check with pylint John Snow
2020-09-15 22:40 ` [PATCH 13/37] qapi/common.py: add notational type hints John Snow
2020-09-17 14:32 ` Markus Armbruster [this message]
2020-09-17 18:18 ` John Snow
2020-09-17 20:06 ` John Snow
2020-09-18 11:14 ` Markus Armbruster
2020-09-18 15:24 ` John Snow
2020-09-15 22:40 ` [PATCH 14/37] qapi/common.py: Move comments into docstrings John Snow
2020-09-17 14:37 ` Markus Armbruster
2020-09-17 18:44 ` John Snow
2020-09-17 19:14 ` Eduardo Habkost
2020-09-17 19:31 ` John Snow
2020-09-24 15:06 ` Markus Armbruster
2020-09-24 16:31 ` John Snow
2020-09-25 7:49 ` Markus Armbruster
2020-09-25 14:07 ` John Snow
2020-09-15 22:40 ` [PATCH 15/37] qapi/common.py: split build_params into new file John Snow
2020-09-17 14:42 ` Markus Armbruster
2020-09-17 18:53 ` John Snow
2020-09-17 19:40 ` John Snow
2020-09-15 22:40 ` [PATCH 16/37] qapi: establish mypy type-checking baseline John Snow
2020-09-18 11:55 ` Markus Armbruster
2020-09-18 14:27 ` John Snow
2020-09-21 8:05 ` Markus Armbruster
2020-09-21 14:41 ` John Snow
2020-09-25 1:18 ` Eduardo Habkost
2020-09-18 19:03 ` John Snow
2020-09-21 8:05 ` Markus Armbruster
2020-09-21 14:46 ` John Snow
2020-09-15 22:40 ` [PATCH 17/37] qapi/events.py: add notational type hints John Snow
2020-09-15 22:40 ` [PATCH 18/37] qapi/events.py: Move comments into docstrings John Snow
2020-09-15 22:40 ` [PATCH 19/37] qapi/commands.py: Don't re-bind to variable of different type John Snow
2020-09-15 22:40 ` [PATCH 20/37] qapi/commands.py: add notational type hints John Snow
2020-09-15 22:40 ` [PATCH 21/37] qapi/commands.py: enable checking with mypy John Snow
2020-09-15 22:40 ` [PATCH 22/37] qapi/source.py: add notational type hints John Snow
2020-09-15 22:40 ` [PATCH 23/37] qapi/source.py: delint with pylint John Snow
2020-09-15 22:40 ` [PATCH 24/37] qapi/gen.py: Fix edge-case of _is_user_module John Snow
2020-09-15 22:40 ` [PATCH 25/37] qapi/gen.py: add notational type hints John Snow
2020-09-15 22:40 ` [PATCH 26/37] qapi/gen.py: Enable checking with mypy John Snow
2020-09-15 22:40 ` [PATCH 27/37] qapi/gen.py: Remove unused parameter John Snow
2020-09-15 22:40 ` [PATCH 28/37] qapi/gen.py: update write() to be more idiomatic John Snow
2020-09-15 22:40 ` [PATCH 29/37] qapi/gen.py: delint with pylint John Snow
2020-09-15 22:40 ` [PATCH 30/37] qapi/introspect.py: Add a typed 'extra' structure John Snow
2020-09-15 22:40 ` [PATCH 31/37] qapi/introspect.py: add _gen_features helper John Snow
2020-09-15 22:40 ` [PATCH 32/37] qapi/introspect.py: create a typed 'Node' data structure John Snow
2020-09-15 22:40 ` [PATCH 33/37] qapi/introspect.py: add notational type hints John Snow
2020-09-15 22:40 ` [PATCH 34/37] qapi/types.py: " John Snow
2020-09-15 22:40 ` [PATCH 35/37] qapi/types.py: remove one-letter variables John Snow
2020-09-15 22:40 ` [PATCH 36/37] qapi/visit.py: remove unused parameters from gen_visit_object John Snow
2020-09-15 22:40 ` [PATCH 37/37] qapi/visit.py: add notational type hints John Snow
2020-09-16 22:33 ` [PATCH 00/37] qapi: static typing conversion, pt1 John Snow
2020-09-17 20:22 ` John Snow
2020-09-18 7:50 ` Markus Armbruster
2020-09-18 13:07 ` Philippe Mathieu-Daudé
2020-09-18 14:30 ` 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=87h7rwpj8d.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jsnow@redhat.com \
--cc=peter.maydell@linaro.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.