All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/38] qapi: static typing conversion, pt1
@ 2020-09-22 21:00 John Snow
  2020-09-22 21:00 ` [PATCH v2 01/38] [DO-NOT-MERGE] qapi: add debugging tools John Snow
                   ` (38 more replies)
  0 siblings, 39 replies; 190+ messages in thread
From: John Snow @ 2020-09-22 21:00 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel
  Cc: Peter Maydell, Eduardo Habkost, Alex Bennée, Michael Roth,
	Cleber Rosa, John Snow

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.

- Patches 1-7: generic, qapi-wide cleanups, flake8 and pylint support
- Patches 8-16: common.py cleanup (with mypy support added at the end)
- Patches 17-18: events.py cleanup
- Patches 19-21: commands.py cleanup
- Patches 22-23: source.py cleanup
- Patches 24-29: gen.py cleanup
- Patches 30-33: introspect.py cleanup
- Patches 34-35: types.py cleanup
- Patches 36-37: visit.py cleanup

Notes:
- After patch 6, `flake8 qapi/` should pass 100% on this and every
  future commit.

- After patch 7, `pylint --rcfile=3Dqapi/pylintrc qapi/` should pass 100%
  on this and every future commit.

- After patch 16, `mypy --config-file=3Dqapi/mypy.ini qapi/` should pass
  100% on this and every future commit.

V2:
 - Removed Python3.6 patch in favor of Thomas Huth's
 - Addressed (most) feedback from Markus
 - Renamed type hint annotation commits

Changelog:

003/38:[0082] [FC] 'qapi: move generator entrypoint into module'
004/38:[down] 'qapi: Prefer explicit relative imports'
006/38:[0027] [FC] 'qapi: delint using flake8'
007/38:[0006] [FC] 'qapi: add pylintrc'
008/38:[0002] [FC] 'qapi/common.py: Remove python compatibility workaround'
009/38:[0037] [FC] 'qapi/common.py: Add indent manager'
010/38:[0008] [FC] 'qapi/common.py: delint with pylint'
011/38:[0002] [FC] 'qapi/common.py: Replace one-letter 'c' variable'
012/38:[----] [-C] 'qapi/common.py: check with pylint'
013/38:[down] 'qapi/common.py: add type hint annotations'
014/38:[down] 'qapi/common.py: Convert comments into docstrings, and elaborat=
e'
015/38:[down] 'qapi/common.py: move build_params into gen.py'
017/38:[down] 'qapi/events.py: add type hint annotations'
020/38:[0006] [FC] 'qapi/commands.py: add notational type hints'
022/38:[down] 'qapi/source.py: add type hint annotations'
025/38:[down] 'qapi/gen.py: add type hint annotations'
033/38:[down] 'qapi/introspect.py: add type hint annotations'
034/38:[down] 'qapi/types.py: add type hint annotations'
036/38:[down] 'qapi/visit.py: assert tag_member contains a QAPISchemaEnumType'
037/38:[----] [-C] 'qapi/visit.py: remove unused parameters from gen_visit_ob=
ject'
038/38:[down] 'qapi/visit.py: add type hint annotations'

John Snow (38):
  [DO-NOT-MERGE] qapi: add debugging tools
  qapi-gen: Separate arg-parsing from generation
  qapi: move generator entrypoint into module
  qapi: Prefer explicit relative imports
  qapi: Remove wildcard includes
  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 notational type hints
  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: Add a typed 'extra' structure
  qapi/introspect.py: add _gen_features helper
  qapi/introspect.py: create a typed 'Node' data structure
  qapi/introspect.py: add type hint annotations
  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

 scripts/qapi-gen.py        |  59 ++---------
 scripts/qapi/.flake8       |   2 +
 scripts/qapi/commands.py   |  85 +++++++++++----
 scripts/qapi/common.py     | 163 +++++++++++++++-------------
 scripts/qapi/debug.py      |  78 ++++++++++++++
 scripts/qapi/doc.py        |   3 +-
 scripts/qapi/events.py     |  64 ++++++++---
 scripts/qapi/expr.py       |   4 +-
 scripts/qapi/gen.py        | 176 ++++++++++++++++++------------
 scripts/qapi/introspect.py | 212 +++++++++++++++++++++++++------------
 scripts/qapi/main.py       |  91 ++++++++++++++++
 scripts/qapi/mypy.ini      |  30 ++++++
 scripts/qapi/parser.py     |   4 +-
 scripts/qapi/pylintrc      |  71 +++++++++++++
 scripts/qapi/schema.py     |  33 +++---
 scripts/qapi/source.py     |  34 +++---
 scripts/qapi/types.py      | 125 +++++++++++++++-------
 scripts/qapi/visit.py      | 116 ++++++++++++++------
 18 files changed, 952 insertions(+), 398 deletions(-)
 create mode 100644 scripts/qapi/.flake8
 create mode 100644 scripts/qapi/debug.py
 create mode 100644 scripts/qapi/main.py
 create mode 100644 scripts/qapi/mypy.ini
 create mode 100644 scripts/qapi/pylintrc

--=20
2.26.2




^ permalink raw reply	[flat|nested] 190+ messages in thread

end of thread, other threads:[~2020-09-28 15:05 UTC | newest]

Thread overview: 190+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-22 21:00 [PATCH v2 00/38] qapi: static typing conversion, pt1 John Snow
2020-09-22 21:00 ` [PATCH v2 01/38] [DO-NOT-MERGE] qapi: add debugging tools John Snow
2020-09-22 23:43   ` Cleber Rosa
2020-09-23 16:48     ` John Snow
2020-09-22 21:00 ` [PATCH v2 02/38] qapi-gen: Separate arg-parsing from generation John Snow
2020-09-22 21:19   ` Eduardo Habkost
2020-09-23  0:00   ` Cleber Rosa
2020-09-23 17:05     ` John Snow
2020-09-24 19:24       ` Cleber Rosa
2020-09-25 11:34     ` Markus Armbruster
2020-09-25 15:37       ` John Snow
2020-09-28 11:45         ` Markus Armbruster
2020-09-22 21:00 ` [PATCH v2 03/38] qapi: move generator entrypoint into module John Snow
2020-09-22 21:23   ` Eduardo Habkost
2020-09-23 17:09     ` John Snow
2020-09-23  0:29   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 04/38] qapi: Prefer explicit relative imports John Snow
2020-09-22 21:25   ` Eduardo Habkost
2020-09-23 13:18   ` Cleber Rosa
2020-09-23 17:12     ` John Snow
2020-09-24 19:25       ` Cleber Rosa
2020-09-24 22:17         ` Beraldo Leal
2020-09-24 22:36           ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 05/38] qapi: Remove wildcard includes John Snow
2020-09-22 21:37   ` Eduardo Habkost
2020-09-23 13:27   ` Cleber Rosa
2020-09-23 17:21     ` John Snow
2020-09-24 19:27       ` Cleber Rosa
2020-09-24 20:04       ` John Snow
2020-09-22 21:00 ` [PATCH v2 06/38] qapi: delint using flake8 John Snow
2020-09-22 21:43   ` Eduardo Habkost
2020-09-23 13:37   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 07/38] qapi: add pylintrc John Snow
2020-09-22 21:54   ` Eduardo Habkost
2020-09-23 13:42   ` Cleber Rosa
2020-09-23 17:23     ` John Snow
2020-09-24 19:29       ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 08/38] qapi/common.py: Remove python compatibility workaround John Snow
2020-09-22 22:05   ` Eduardo Habkost
2020-09-23 14:37   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 09/38] qapi/common.py: Add indent manager John Snow
2020-09-22 22:22   ` Eduardo Habkost
2020-09-23 17:29     ` John Snow
2020-09-25 11:51       ` Markus Armbruster
2020-09-25 13:13         ` Eduardo Habkost
2020-09-25 13:47           ` Markus Armbruster
2020-09-25 14:42         ` John Snow
2020-09-23 14:55   ` Cleber Rosa
2020-09-23 17:30     ` John Snow
2020-09-25 11:55       ` Markus Armbruster
2020-09-25 15:41         ` John Snow
2020-09-22 21:00 ` [PATCH v2 10/38] qapi/common.py: delint with pylint John Snow
2020-09-22 21:46   ` Eduardo Habkost
2020-09-23 16:01   ` Cleber Rosa
2020-09-23 17:37     ` John Snow
2020-09-24 19:30       ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 11/38] qapi/common.py: Replace one-letter 'c' variable John Snow
2020-09-22 22:24   ` Eduardo Habkost
2020-09-23 16:15   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 12/38] qapi/common.py: check with pylint John Snow
2020-09-22 22:26   ` Eduardo Habkost
2020-09-23 16:18   ` Cleber Rosa
2020-09-23 16:30     ` John Snow
2020-09-22 21:00 ` [PATCH v2 13/38] qapi/common.py: add type hint annotations John Snow
2020-09-22 22:44   ` Eduardo Habkost
2020-09-23 17:57     ` John Snow
2020-09-23 18:19       ` Eduardo Habkost
2020-09-23 19:28   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 14/38] qapi/common.py: Convert comments into docstrings, and elaborate John Snow
2020-09-23 14:22   ` Eduardo Habkost
2020-09-23 19:38   ` Cleber Rosa
2020-09-23 21:18     ` John Snow
2020-09-25 17:02       ` Cleber Rosa
2020-09-25 17:13         ` John Snow
2020-09-22 21:00 ` [PATCH v2 15/38] qapi/common.py: move build_params into gen.py John Snow
2020-09-23 14:26   ` Eduardo Habkost
2020-09-23 20:04   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 16/38] qapi: establish mypy type-checking baseline John Snow
2020-09-23 14:29   ` Eduardo Habkost
2020-09-23 20:11   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 17/38] qapi/events.py: add type hint annotations John Snow
2020-09-23 14:31   ` Eduardo Habkost
2020-09-23 20:18   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 18/38] qapi/events.py: Move comments into docstrings John Snow
2020-09-23 14:48   ` Eduardo Habkost
2020-09-23 18:21     ` John Snow
2020-09-25 12:19     ` Markus Armbruster
2020-09-25 15:55       ` John Snow
2020-09-28 11:49         ` Markus Armbruster
2020-09-28 15:04           ` John Snow
2020-09-23 20:19   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 19/38] qapi/commands.py: Don't re-bind to variable of different type John Snow
2020-09-23 14:48   ` Eduardo Habkost
2020-09-23 20:21   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 20/38] qapi/commands.py: add notational type hints John Snow
2020-09-23 14:50   ` Eduardo Habkost
2020-09-23 18:23     ` John Snow
2020-09-23 22:17   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 21/38] qapi/commands.py: enable checking with mypy John Snow
2020-09-23 14:51   ` Eduardo Habkost
2020-09-23 22:21   ` Cleber Rosa
2020-09-23 23:50     ` John Snow
2020-09-22 21:00 ` [PATCH v2 22/38] qapi/source.py: add type hint annotations John Snow
2020-09-23 14:52   ` Eduardo Habkost
2020-09-23 22:36   ` Cleber Rosa
2020-09-23 23:55     ` John Snow
2020-09-25 12:22       ` Markus Armbruster
2020-09-25 16:20         ` John Snow
2020-09-25 17:05       ` Cleber Rosa
2020-09-25 17:20         ` John Snow
2020-09-22 21:00 ` [PATCH v2 23/38] qapi/source.py: delint with pylint John Snow
2020-09-23 14:59   ` Eduardo Habkost
2020-09-23 22:41   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 24/38] qapi/gen.py: Fix edge-case of _is_user_module John Snow
2020-09-23 15:17   ` Eduardo Habkost
2020-09-23 18:29     ` John Snow
2020-09-23 18:33       ` Eduardo Habkost
2020-09-23 23:10         ` Cleber Rosa
2020-09-23 23:13           ` Cleber Rosa
2020-09-25 13:00     ` Markus Armbruster
2020-09-25 15:15       ` Eduardo Habkost
2020-09-25 15:50         ` Eduardo Habkost
2020-09-28 12:04           ` Markus Armbruster
2020-09-25 16:29       ` John Snow
2020-09-23 23:08   ` Cleber Rosa
2020-09-23 23:13     ` Cleber Rosa
2020-09-23 23:57     ` John Snow
2020-09-22 21:00 ` [PATCH v2 25/38] qapi/gen.py: add type hint annotations John Snow
2020-09-23 15:18   ` Eduardo Habkost
2020-09-23 23:51   ` Cleber Rosa
2020-09-24  0:29     ` John Snow
2020-09-24  1:29       ` Eduardo Habkost
2020-09-22 21:00 ` [PATCH v2 26/38] qapi/gen.py: Enable checking with mypy John Snow
2020-09-23 15:18   ` Eduardo Habkost
2020-09-23 23:59   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 27/38] qapi/gen.py: Remove unused parameter John Snow
2020-09-23 15:19   ` Eduardo Habkost
2020-09-24  0:00   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 28/38] qapi/gen.py: update write() to be more idiomatic John Snow
2020-09-23 15:26   ` Eduardo Habkost
2020-09-23 18:37     ` John Snow
2020-09-24 15:59       ` Cleber Rosa
2020-09-25 13:15         ` Markus Armbruster
2020-09-25 13:24           ` Daniel P. Berrangé
2020-09-25 13:34             ` Eric Blake
2020-09-25 13:52             ` Markus Armbruster
2020-09-25 15:47               ` Eric Blake
2020-09-28 12:09                 ` Markus Armbruster
2020-09-28 14:08                   ` John Snow
2020-09-25 13:26           ` Eduardo Habkost
2020-09-25 16:33             ` John Snow
2020-09-24 16:01   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 29/38] qapi/gen.py: delint with pylint John Snow
2020-09-23 15:44   ` Eduardo Habkost
2020-09-23 18:38     ` John Snow
2020-09-24 18:44   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 30/38] qapi/introspect.py: Add a typed 'extra' structure John Snow
2020-09-23 16:13   ` Eduardo Habkost
2020-09-23 21:34     ` John Snow
2020-09-22 21:00 ` [PATCH v2 31/38] qapi/introspect.py: add _gen_features helper John Snow
2020-09-23 16:35   ` Eduardo Habkost
2020-09-23 21:43     ` John Snow
2020-09-23 21:54       ` Eduardo Habkost
2020-09-22 21:00 ` [PATCH v2 32/38] qapi/introspect.py: create a typed 'Node' data structure John Snow
2020-09-23 18:41   ` Eduardo Habkost
2020-09-23 21:48     ` John Snow
2020-09-23 22:44     ` John Snow
2020-09-22 21:00 ` [PATCH v2 33/38] qapi/introspect.py: add type hint annotations John Snow
2020-09-22 21:00 ` [PATCH v2 34/38] qapi/types.py: " John Snow
2020-09-23 19:11   ` Eduardo Habkost
2020-09-24 18:50   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 35/38] qapi/types.py: remove one-letter variables John Snow
2020-09-23 19:14   ` Eduardo Habkost
2020-09-23 22:11     ` John Snow
2020-09-24 20:54       ` Eduardo Habkost
2020-09-24 18:53   ` Cleber Rosa
2020-09-22 21:00 ` [PATCH v2 36/38] qapi/visit.py: assert tag_member contains a QAPISchemaEnumType John Snow
2020-09-23 19:15   ` Eduardo Habkost
2020-09-23 22:13     ` John Snow
2020-09-24 19:12       ` Cleber Rosa
2020-09-24 19:10   ` Cleber Rosa
2020-09-24 19:36     ` John Snow
2020-09-24 23:52       ` Cleber Rosa
2020-09-22 21:01 ` [PATCH v2 37/38] qapi/visit.py: remove unused parameters from gen_visit_object John Snow
2020-09-23 19:16   ` Eduardo Habkost
2020-09-24 19:13   ` Cleber Rosa
2020-09-22 21:01 ` [PATCH v2 38/38] qapi/visit.py: add type hint annotations John Snow
2020-09-23 19:17   ` Eduardo Habkost
2020-09-24 19:15   ` Cleber Rosa
2020-09-24 20:37 ` [PATCH v2 00/38] qapi: static typing conversion, pt1 John Snow

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.