[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 00/46] qapi: static typing conversion, pt1
From: |
John Snow |
Subject: |
[PATCH v4 00/46] qapi: static typing conversion, pt1 |
Date: |
Wed, 30 Sep 2020 00:31:04 -0400 |
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
- [PATCH v4 00/46] qapi: static typing conversion, pt1,
John Snow <=
- [PATCH v4 02/46] docs: repair broken references, John Snow, 2020/09/30
- [PATCH v4 03/46] [DO-NOT-MERGE] docs/sphinx: change default role to "any", John Snow, 2020/09/30
- [PATCH v4 04/46] qapi: modify docstrings to be sphinx-compatible, John Snow, 2020/09/30
- [PATCH v4 01/46] [DO-NOT-MERGE] docs: replace single backtick (`) with double-backtick (``), John Snow, 2020/09/30
- [PATCH v4 05/46] [DO-NOT-MERGE] docs: enable sphinx-autodoc for scripts/qapi, John Snow, 2020/09/30
- [PATCH v4 07/46] qapi: move generator entrypoint into module, John Snow, 2020/09/30
- [PATCH v4 09/46] qapi: Prefer explicit relative imports, John Snow, 2020/09/30