[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 00/38] qapi: static typing conversion, pt1
From: |
John Snow |
Subject: |
[PATCH v2 00/38] qapi: static typing conversion, pt1 |
Date: |
Tue, 22 Sep 2020 17:00:23 -0400 |
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
- [PATCH v2 00/38] qapi: static typing conversion, pt1,
John Snow <=