From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
"Thomas Huth" <thuth@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"John Snow" <jsnow@redhat.com>, "Cleber Rosa" <crosa@redhat.com>,
"Alex Bennée" <alex.bennee@linaro.org>
Subject: [PATCH v4 00/46] qapi: static typing conversion, pt1
Date: Wed, 30 Sep 2020 00:31:04 -0400 [thread overview]
Message-ID: <20200930043150.1454766-1-jsnow@redhat.com> (raw)
Based-on: <20200925162316.21205-1-peter.maydell@linaro.org>
Hi, this series adds static type hints to the QAPI module.
This is part one!
Part 1: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt1
Everything: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt6
- Requires Python 3.6+
- Requires mypy 0.770 or newer (for type analysis only)
- Requires pylint 2.6.0 or newer (for lint checking only)
In general, this series tackles the cleanup of one individual QAPI
module at a time. Once it passes pylint or mypy checks, those checks are
enabled for that file.
Type hints are added in patches that add *only* type hints and change no
other behavior. Any necessary changes to behavior to accommodate typing
are split out into their own tiny patches.
Notes:
- `make sphinxdocs` should work on every commit. It begins to include
docstring content after the DO-NOT-MERGE patch 5.
- After patch 11, `isort -c` should pass 100% on this and every
future commit.
- After patch 12, `flake8 qapi/` should pass 100% on this and every
future commit.
- After patch 13, `pylint --rcfile=3Dqapi/pylintrc qapi/` should pass 100%
on this and every future commit.
- After patch 22, `mypy --config-file=3Dqapi/mypy.ini qapi/` should pass
100% on this and every future commit.
V4:
- Rebase on Peter Maydell's work;
- 05: Context differences from Peter Maydell's work
- 06: Remove qapi.doc
- 07: Remove qapi.doc, remove superfluous "if match"
- 09: Remove qapi.doc
- 13: remove qapi.doc
- 18: remove qapi.doc
- 22: remove qapi.doc
- 31: remove QAPIGenDoc changes
- Minor adjustments from list feedback;
- 01: More backticks for QAPI json files, now that they are in Sphinx-exe
- 02: Use :ref: role for the `docker-ref` cross-reference
- 04: Remove doc.py work changes; add references for start_if/end_if
- 10: Changes to accommodate isort
- 11: Added lines_after_imports=3D2
- 16: isort whitespace changes
- 24: Take Markus's docstring phrasing
- 34: add comment explaining os.open()
- 37: isort differences
Status:
(This is my stgit summary with reviewer tags visible.)
[01] do-not-merge-docs-replace #
[02] docs-repair-broken-references #
[03] docs-sphinx-change-default #
[04] qapi-modify-docstrings-to-be #
[05] do-not-merge-docs-enable #
[06] qapi-gen-separate-arg-parsing # [SOB] JS [RB] CR,EH [TB] CR
[07] qapi-move-generator-entrypoint # [SOB] JS [RB] CR,EH [TB] CR
[08] do-not-merge-more-apidoc #
[09] qapi-prefer-explicit-relative # [SOB] JS [RB] CR,EH
[10] qapi-remove-wildcard-includes # [SOB] JS [RB] CR,EH
[11] qapi-enforce-import-order # [SOB] JS [RB] CR [TB] CR
[12] qapi-delint-using-flake8 # [SOB] JS [RB] CR,EH
[13] qapi-add-pylintrc # [SOB] JS [TB] CR,EH [RB] CR
[14] qapi-common-py-remove-python # [SOB] JS [RB] CR,EH
[15] qapi-common-add-indent-manager # [SOB] JS [RB] CR,EH
[16] qapi-common-py-delint-with # [SOB] JS [RB] CR,EH
[17] replace-c-by-char # [SOB] JS [RB] CR,EH
[18] qapi-common-py-check-with # [SOB] JS [RB] CR [TB] CR,EH
[19] qapi-common-py-add-notational # [SOB] JS [RB] CR,EH
[20] qapi-common-move-comments-into # [SOB] JS [RB] CR,EH
[21] qapi-split-build_params-into # [SOB] JS [RB] CR,EH
[22] qapi-establish-mypy-type # [SOB] JS [TB] CR,EH [RB] CR
[23] qapi-events-py-add-notational # [SOB] JS [RB] CR,EH
[24] qapi-events-move-comments-into # [SOB] JS [RB] CR,EH
[25] qapi-commands-py-don-t-re-bind # [SOB] JS [RB] CR,EH
[26] qapi-commands-py-add # [SOB] JS [RB] CR,EH
[27] qapi-commands-py-enable # [SOB] JS [RB] CR,EH
[28] qapi-source-py-add-notational # [SOB] JS [RB] CR,EH [TB] CR
[29] qapi-source-py-delint-with # [SOB] JS [RB] CR,EH [TB] CR
[30] qapi-gen-py-fix-edge-case-of # [SOB] JS [RB] CR
[31] qapi-gen-py-add-notational # [SOB] JS [RB] CR,EH
[32] qapi-gen-py-enable-checking # [SOB] JS [RB] CR,EH [TB] CR
[33] qapi-gen-py-remove-unused # [SOB] JS [RB] CR,EH
[34] qapi-gen-py-update-write-to-be # [SOB] JS [RB] CR,EH
[35] qapi-gen-py-delint-with-pylint # [SOB] JS [RB] CR,EH
[36] qapi-introspect-py-assert-obj #
[37] qapi-introspect-py-create-a # [SOB] EH,JS
[38] qapi-introspect-py-add #
[39] qapi-introspect-py-unify #
[40] qapi-introspect-py-replace #
[41] qapi-introspect-py-create-a-0 #
[42] qapi-types-py-add-type-hint # [SOB] JS [RB] CR,EH
[43] qapi-types-py-remove-one # [SOB] JS [RB] CR,EH
[44] qapi-visit-py-assert # [SOB] JS [RB] CR,EH
[45] qapi-visit-py-remove-unused # [SOB] JS [RB] CR,EH [TB] CR
[46] qapi-visit-py-add-notational # [SOB] JS [RB] CR,EH [TB] CR
Changelog:
(Patches without changes elided)
001/46:[0004] [FC] '[DO-NOT-MERGE] docs: replace single backtick (`) with dou=
ble-backtick (``)'
002/46:[0002] [FC] 'docs: repair broken references'
004/46:[0014] [FC] 'qapi: modify docstrings to be sphinx-compatible'
005/46:[0015] [FC] '[DO-NOT-MERGE] docs: enable sphinx-autodoc for scripts/qa=
pi'
006/46:[0004] [FC] 'qapi-gen: Separate arg-parsing from generation'
007/46:[0008] [FC] 'qapi: move generator entrypoint into module'
009/46:[0004] [FC] 'qapi: Prefer explicit relative imports'
010/46:[0006] [FC] 'qapi: Remove wildcard includes'
011/46:[0023] [FC] 'qapi: enforce import order/styling with isort'
013/46:[0001] [FC] 'qapi: add pylintrc'
016/46:[0001] [FC] 'qapi/common.py: delint with pylint'
018/46:[0004] [FC] 'qapi/common.py: check with pylint'
022/46:[0008] [FC] 'qapi: establish mypy type-checking baseline'
024/46:[0004] [FC] 'qapi/events.py: Move comments into docstrings'
031/46:[0003] [FC] 'qapi/gen.py: add type hint annotations'
034/46:[0001] [FC] 'qapi/gen.py: update write() to be more idiomatic'
037/46:[0009] [FC] 'qapi/instrospect.py: add preliminary type hint annotation=
s'
V3:
- Use isort to enforce import consistency
- Use sphinx apidoc to check docstring format
V2:
- Removed Python3.6 patch in favor of Thomas Huth's
- Addressed (most) feedback from Markus
- Renamed type hint annotation commits
Eduardo Habkost (1):
qapi/instrospect.py: add preliminary type hint annotations
John Snow (45):
[DO-NOT-MERGE] docs: replace single backtick (`) with double-backtick
(``)
docs: repair broken references
[DO-NOT-MERGE] docs/sphinx: change default role to "any"
qapi: modify docstrings to be sphinx-compatible
[DO-NOT-MERGE] docs: enable sphinx-autodoc for scripts/qapi
qapi-gen: Separate arg-parsing from generation
qapi: move generator entrypoint into module
[DO-NOT-MERGE] docs: add scripts/qapi/main to python manual
qapi: Prefer explicit relative imports
qapi: Remove wildcard includes
qapi: enforce import order/styling with isort
qapi: delint using flake8
qapi: add pylintrc
qapi/common.py: Remove python compatibility workaround
qapi/common.py: Add indent manager
qapi/common.py: delint with pylint
qapi/common.py: Replace one-letter 'c' variable
qapi/common.py: check with pylint
qapi/common.py: add type hint annotations
qapi/common.py: Convert comments into docstrings, and elaborate
qapi/common.py: move build_params into gen.py
qapi: establish mypy type-checking baseline
qapi/events.py: add type hint annotations
qapi/events.py: Move comments into docstrings
qapi/commands.py: Don't re-bind to variable of different type
qapi/commands.py: add type hint annotations
qapi/commands.py: enable checking with mypy
qapi/source.py: add type hint annotations
qapi/source.py: delint with pylint
qapi/gen.py: Fix edge-case of _is_user_module
qapi/gen.py: add type hint annotations
qapi/gen.py: Enable checking with mypy
qapi/gen.py: Remove unused parameter
qapi/gen.py: update write() to be more idiomatic
qapi/gen.py: delint with pylint
qapi/introspect.py: assert obj is a dict when features are given
qapi/introspect.py: add _gen_features helper
qapi/introspect.py: Unify return type of _make_tree()
qapi/introspect.py: replace 'extra' dict with 'comment' argument
qapi/introspect.py: create a typed 'Node' data structure
qapi/types.py: add type hint annotations
qapi/types.py: remove one-letter variables
qapi/visit.py: assert tag_member contains a QAPISchemaEnumType
qapi/visit.py: remove unused parameters from gen_visit_object
qapi/visit.py: add type hint annotations
docs/conf.py | 6 +-
docs/devel/build-system.rst | 118 +++++++-------
docs/devel/index.rst | 1 +
docs/devel/migration.rst | 59 +++----
docs/devel/multi-thread-tcg.rst | 2 +-
docs/devel/python/index.rst | 7 +
docs/devel/python/qapi.commands.rst | 7 +
docs/devel/python/qapi.common.rst | 7 +
docs/devel/python/qapi.error.rst | 7 +
docs/devel/python/qapi.events.rst | 7 +
docs/devel/python/qapi.expr.rst | 7 +
docs/devel/python/qapi.gen.rst | 7 +
docs/devel/python/qapi.introspect.rst | 7 +
docs/devel/python/qapi.main.rst | 7 +
docs/devel/python/qapi.parser.rst | 8 +
docs/devel/python/qapi.rst | 26 +++
docs/devel/python/qapi.schema.rst | 7 +
docs/devel/python/qapi.source.rst | 7 +
docs/devel/python/qapi.types.rst | 7 +
docs/devel/python/qapi.visit.rst | 7 +
docs/devel/tcg-plugins.rst | 14 +-
docs/devel/testing.rst | 4 +-
docs/interop/live-block-operations.rst | 4 +-
docs/system/arm/cpu-features.rst | 110 ++++++-------
docs/system/arm/nuvoton.rst | 2 +-
docs/system/s390x/protvirt.rst | 10 +-
qapi/block-core.json | 4 +-
scripts/qapi-gen.py | 57 ++-----
scripts/qapi/.flake8 | 2 +
scripts/qapi/.isort.cfg | 7 +
scripts/qapi/commands.py | 87 +++++++---
scripts/qapi/common.py | 163 ++++++++++---------
scripts/qapi/events.py | 58 +++++--
scripts/qapi/expr.py | 7 +-
scripts/qapi/gen.py | 182 +++++++++++++--------
scripts/qapi/introspect.py | 210 +++++++++++++++++--------
scripts/qapi/main.py | 89 +++++++++++
scripts/qapi/mypy.ini | 25 +++
scripts/qapi/parser.py | 15 +-
scripts/qapi/pylintrc | 70 +++++++++
scripts/qapi/schema.py | 35 +++--
scripts/qapi/source.py | 34 ++--
scripts/qapi/types.py | 125 ++++++++++-----
scripts/qapi/visit.py | 116 ++++++++++----
44 files changed, 1175 insertions(+), 566 deletions(-)
create mode 100644 docs/devel/python/index.rst
create mode 100644 docs/devel/python/qapi.commands.rst
create mode 100644 docs/devel/python/qapi.common.rst
create mode 100644 docs/devel/python/qapi.error.rst
create mode 100644 docs/devel/python/qapi.events.rst
create mode 100644 docs/devel/python/qapi.expr.rst
create mode 100644 docs/devel/python/qapi.gen.rst
create mode 100644 docs/devel/python/qapi.introspect.rst
create mode 100644 docs/devel/python/qapi.main.rst
create mode 100644 docs/devel/python/qapi.parser.rst
create mode 100644 docs/devel/python/qapi.rst
create mode 100644 docs/devel/python/qapi.schema.rst
create mode 100644 docs/devel/python/qapi.source.rst
create mode 100644 docs/devel/python/qapi.types.rst
create mode 100644 docs/devel/python/qapi.visit.rst
create mode 100644 scripts/qapi/.flake8
create mode 100644 scripts/qapi/.isort.cfg
create mode 100644 scripts/qapi/main.py
create mode 100644 scripts/qapi/mypy.ini
create mode 100644 scripts/qapi/pylintrc
--=20
2.26.2
next reply other threads:[~2020-09-30 4:33 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-30 4:31 John Snow [this message]
2020-09-30 4:31 ` [PATCH v4 01/46] [DO-NOT-MERGE] docs: replace single backtick (`) with double-backtick (``) John Snow
2020-09-30 4:31 ` [PATCH v4 02/46] docs: repair broken references John Snow
2020-09-30 4:31 ` [PATCH v4 03/46] [DO-NOT-MERGE] docs/sphinx: change default role to "any" John Snow
2020-09-30 4:31 ` [PATCH v4 04/46] qapi: modify docstrings to be sphinx-compatible John Snow
2020-09-30 8:47 ` Markus Armbruster
2020-09-30 17:22 ` John Snow
2020-10-01 8:52 ` Markus Armbruster
2020-10-01 14:48 ` John Snow
2020-10-02 9:19 ` Markus Armbruster
2020-10-02 15:14 ` John Snow
2020-09-30 17:38 ` John Snow
2020-10-01 8:54 ` Markus Armbruster
2020-10-01 14:28 ` John Snow
2020-09-30 4:31 ` [PATCH v4 05/46] [DO-NOT-MERGE] docs: enable sphinx-autodoc for scripts/qapi John Snow
2020-09-30 4:31 ` [PATCH v4 06/46] qapi-gen: Separate arg-parsing from generation John Snow
2020-09-30 4:31 ` [PATCH v4 07/46] qapi: move generator entrypoint into module John Snow
2020-09-30 4:31 ` [PATCH v4 08/46] [DO-NOT-MERGE] docs: add scripts/qapi/main to python manual John Snow
2020-09-30 4:31 ` [PATCH v4 09/46] qapi: Prefer explicit relative imports John Snow
2020-09-30 4:31 ` [PATCH v4 10/46] qapi: Remove wildcard includes John Snow
2020-09-30 4:31 ` [PATCH v4 11/46] qapi: enforce import order/styling with isort John Snow
2020-09-30 4:31 ` [PATCH v4 12/46] qapi: delint using flake8 John Snow
2020-09-30 4:31 ` [PATCH v4 13/46] qapi: add pylintrc John Snow
2020-09-30 4:31 ` [PATCH v4 14/46] qapi/common.py: Remove python compatibility workaround John Snow
2020-09-30 4:31 ` [PATCH v4 15/46] qapi/common.py: Add indent manager John Snow
2020-09-30 4:31 ` [PATCH v4 16/46] qapi/common.py: delint with pylint John Snow
2020-09-30 4:31 ` [PATCH v4 17/46] qapi/common.py: Replace one-letter 'c' variable John Snow
2020-09-30 4:31 ` [PATCH v4 18/46] qapi/common.py: check with pylint John Snow
2020-09-30 4:31 ` [PATCH v4 19/46] qapi/common.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 20/46] qapi/common.py: Convert comments into docstrings, and elaborate John Snow
2020-09-30 4:31 ` [PATCH v4 21/46] qapi/common.py: move build_params into gen.py John Snow
2020-09-30 4:31 ` [PATCH v4 22/46] qapi: establish mypy type-checking baseline John Snow
2020-09-30 4:31 ` [PATCH v4 23/46] qapi/events.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 24/46] qapi/events.py: Move comments into docstrings John Snow
2020-09-30 4:31 ` [PATCH v4 25/46] qapi/commands.py: Don't re-bind to variable of different type John Snow
2020-09-30 4:31 ` [PATCH v4 26/46] qapi/commands.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 27/46] qapi/commands.py: enable checking with mypy John Snow
2020-09-30 4:31 ` [PATCH v4 28/46] qapi/source.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 29/46] qapi/source.py: delint with pylint John Snow
2020-09-30 4:31 ` [PATCH v4 30/46] qapi/gen.py: Fix edge-case of _is_user_module John Snow
2020-09-30 11:03 ` Eduardo Habkost
2020-09-30 4:31 ` [PATCH v4 31/46] qapi/gen.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 32/46] qapi/gen.py: Enable checking with mypy John Snow
2020-09-30 4:31 ` [PATCH v4 33/46] qapi/gen.py: Remove unused parameter John Snow
2020-09-30 4:31 ` [PATCH v4 34/46] qapi/gen.py: update write() to be more idiomatic John Snow
2020-09-30 4:31 ` [PATCH v4 35/46] qapi/gen.py: delint with pylint John Snow
2020-09-30 4:31 ` [PATCH v4 36/46] qapi/introspect.py: assert obj is a dict when features are given John Snow
2020-09-30 11:04 ` Eduardo Habkost
2020-09-30 4:31 ` [PATCH v4 37/46] qapi/instrospect.py: add preliminary type hint annotations John Snow
2020-09-30 18:31 ` Eduardo Habkost
2020-09-30 4:31 ` [PATCH v4 38/46] qapi/introspect.py: add _gen_features helper John Snow
2020-09-30 17:21 ` Eduardo Habkost
2020-09-30 4:31 ` [PATCH v4 39/46] qapi/introspect.py: Unify return type of _make_tree() John Snow
2020-09-30 18:24 ` Eduardo Habkost
2020-09-30 18:32 ` John Snow
2020-09-30 18:57 ` Eduardo Habkost
2020-09-30 19:02 ` John Snow
2020-09-30 4:31 ` [PATCH v4 40/46] qapi/introspect.py: replace 'extra' dict with 'comment' argument John Snow
2020-09-30 18:24 ` Eduardo Habkost
2020-09-30 4:31 ` [PATCH v4 41/46] qapi/introspect.py: create a typed 'Node' data structure John Snow
2020-09-30 18:39 ` Eduardo Habkost
2020-09-30 18:58 ` John Snow
2020-09-30 19:52 ` Eduardo Habkost
2020-10-01 17:59 ` John Snow
2020-09-30 4:31 ` [PATCH v4 42/46] qapi/types.py: add type hint annotations John Snow
2020-09-30 4:31 ` [PATCH v4 43/46] qapi/types.py: remove one-letter variables John Snow
2020-09-30 4:31 ` [PATCH v4 44/46] qapi/visit.py: assert tag_member contains a QAPISchemaEnumType John Snow
2020-09-30 4:31 ` [PATCH v4 45/46] qapi/visit.py: remove unused parameters from gen_visit_object John Snow
2020-09-30 4:31 ` [PATCH v4 46/46] qapi/visit.py: add type hint annotations 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=20200930043150.1454766-1-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=armbru@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/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).