Hi, this series adds static type hints to the QAPI module. This is part two, and covers introspect.py.
Part 2: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt2 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) 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. Every commit should pass with (from ./scripts): - flake8 qapi/ - pylint --rcfile=qapi/pylintrc qapi/ - mypy --config-file=qapi/mypy.ini qapi/ - isort -c qapi/ V5: 001/15:[----] [--] 'qapi/introspect.py: assert schema is not None' 002/15:[----] [--] 'qapi/introspect.py: use _make_tree for features nodes' 003/15:[----] [--] 'qapi/introspect.py: add _gen_features helper' 004/15:[0006] [FC] 'qapi/introspect.py: guard against ifcond/comment misuse' 005/15:[----] [-C] 'qapi/introspect.py: Unify return type of _make_tree()' 006/15:[0009] [FC] 'qapi/introspect.py: replace 'extra' dict with 'comment' argument' 007/15:[down] 'qapi/introspect.py: Always define all 'extra' dict keys' 008/15:[0002] [FC] 'qapi/introspect.py: Introduce preliminary tree typing' 009/15:[0018] [FC] 'qapi/introspect.py: create a typed 'Annotated' data strutcure' 010/15:[----] [--] 'qapi/introspect.py: improve _tree_to_qlit error message' 011/15:[0002] [FC] 'qapi/introspect.py: improve readability of _tree_to_qlit' 012/15:[0008] [FC] 'qapi/introspect.py: add type hint annotations' 013/15:[0006] [FC] 'qapi/introspect.py: add introspect.json dummy types' 014/15:[0003] [FC] 'qapi/introspect.py: Add docstring to _tree_to_qlit' 015/15:[0002] [FC] 'qapi/introspect.py: Update copyright and authors list' 004: - Rename 'suppress_first_indent' to 'dict_value' (Docstring added in 014.) 006: - Avoid changing the output structure of _make_tree 007: - Chance the structure of _make_tree 8-) 008: - Change commented TreeValue to include a TODO instead. 009: - Change NodeT bound to _value instead of TreeValue - Change "Remove in 3.7" text to include "TODO: " - Remove forwarding suppress_first_indent/dict_value in recursive cases - Change spacing in visit_alternate_type() 011: - Consequence of suppress_first_value/dict_value change 012: - Commit message note added - Changed _DObject comment 013: - Commit notes adjusted - _DObject stuff: Comment near SchemaInfo et al adjusted 014: - Changed docstring to reflect dict_value change 015: - Updated copyright year for 2021 :~) V4: - Rebased on "pt1.5" v4 - signatures updated to use Optional[QAPISourceInfo] - Changelog from V3 still relevant (That series went unreviewed.) V3: - Dropped all the R-Bs again... - Re-re-ordered to put type annotations last again. - Rebased on top of "pt1.5". - Ensured compliance with strict-optional typing. - Forgive me if I missed a specific critique; I probably just lost it in the shuffle. V2: - Dropped all R-B from previous series; enough has changed. - pt2 is now introspect.py, expr.py is pushed to pt3. - Reworked again to have less confusing (?) type names - Added an assertion to prevent future accidental breakage John Snow (15): qapi/introspect.py: assert schema is not None qapi/introspect.py: use _make_tree for features nodes qapi/introspect.py: add _gen_features helper qapi/introspect.py: guard against ifcond/comment misuse qapi/introspect.py: Unify return type of _make_tree() qapi/introspect.py: replace 'extra' dict with 'comment' argument qapi/introspect.py: Always define all 'extra' dict keys qapi/introspect.py: Introduce preliminary tree typing qapi/introspect.py: create a typed 'Annotated' data strutcure qapi/introspect.py: improve _tree_to_qlit error message qapi/introspect.py: improve readability of _tree_to_qlit qapi/introspect.py: add type hint annotations qapi/introspect.py: add introspect.json dummy types qapi/introspect.py: Add docstring to _tree_to_qlit qapi/introspect.py: Update copyright and authors list scripts/qapi/introspect.py | 314 ++++++++++++++++++++++++++----------- scripts/qapi/mypy.ini | 5 - scripts/qapi/schema.py | 2 +- 3 files changed, 223 insertions(+), 98 deletions(-) -- 2.29.2