qemu-devel
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]