Hi! This branch has some comical name like python-qapi-cleanup-pt6-v2
but, simply, it finishes what I started and statically types all of the
QAPI generator code.
Patches 1-16 fix minor nits or typing issues,
Patch 17 adds type hints with no runtime changes,
Patch 18 turns on type checking with mypy,
Patch 19 drops auxiliary asserts that are no longer needed.
v2:
- dropped the resolve_type refactoring patch
- added QAPISchemaDefinition
- misc bits and pieces.
001/19:[down] 'qapi: sort pylint suppressions'
New, Markus's suggestion.
002/19:[0001] [FC] 'qapi/schema: add pylint suppressions'
Added newline, Markus's RB
003/19:[down] 'qapi: create QAPISchemaDefinition'
New, Markus's suggestion.
004/19:[0002] [FC] 'qapi/schema: declare type for QAPISchemaObjectTypeMember.type'
Adjusted commit message and comment.
005/19:[down] 'qapi/schema: declare type for QAPISchemaArrayType.element_type'
Patch renamed; removed @property trick in favor of static type declaration
006/19:[0009] [FC] 'qapi/schema: make c_type() and json_type() abstract methods'
Use abc.ABC and @abstractmethod
007/19:[0001] [FC] 'qapi/schema: adjust type narrowing for mypy's benefit'
Adjusted commit message; left in an assertion that is removed later instead.
008/19:[down] 'qapi/schema: add type narrowing to lookup_type()'
Renamed
removed type hints which get added later in the series instead
simplified logic.
009/19:[down] 'qapi/schema: allow resolve_type to be used for built-in types'
New patch. (Types are added later.)
010/19:[down] 'qapi: use schema.resolve_type instead of schema.lookup_type'
New patch, replaces old 07/19 "assert schema.lookup_type did not fail"
011/19:[0011] [FC] 'qapi/schema: fix QAPISchemaArrayType.check's call to resolve_type'
Dramatically simplified.
012/19:[----] [--] 'qapi/schema: assert info is present when necessary'
013/19:[----] [--] 'qapi/schema: split "checked" field into "checking" and "checked"'
Changed the commit message, but actually struggled finding anything simpler
than what I already had, owing to the fact that q_empty is a valid construct
and I can't seem to avoid adding a new state variable here.
014/19:[----] [-C] 'qapi/schema: fix typing for QAPISchemaVariants.tag_member'
Also unchanged from review, I think this is simplest still...
015/19:[down] 'qapi/schema: assert inner type of QAPISchemaVariants in check_clash()'
Renamed, changed commit message and comment.
016/19:[----] [--] 'qapi/parser: demote QAPIExpression to Dict[str, Any]'
017/19:[0042] [FC] 'qapi/schema: add type hints'
Mostly contextual changes.
018/19:[----] [--] 'qapi/schema: turn on mypy strictness'
019/19:[0006] [FC] 'qapi/schema: remove unnecessary asserts'
Zapped a few more.
John Snow (19):
qapi: sort pylint suppressions
qapi/schema: add pylint suppressions
qapi: create QAPISchemaDefinition
qapi/schema: declare type for QAPISchemaObjectTypeMember.type
qapi/schema: declare type for QAPISchemaArrayType.element_type
qapi/schema: make c_type() and json_type() abstract methods
qapi/schema: adjust type narrowing for mypy's benefit
qapi/schema: add type narrowing to lookup_type()
qapi/schema: allow resolve_type to be used for built-in types
qapi: use schema.resolve_type instead of schema.lookup_type
qapi/schema: fix QAPISchemaArrayType.check's call to resolve_type
qapi/schema: assert info is present when necessary
qapi/schema: split "checked" field into "checking" and "checked"
qapi/schema: fix typing for QAPISchemaVariants.tag_member
qapi/schema: assert inner type of QAPISchemaVariants in check_clash()
qapi/parser: demote QAPIExpression to Dict[str, Any]
qapi/schema: add type hints
qapi/schema: turn on mypy strictness
qapi/schema: remove unnecessary asserts
scripts/qapi/introspect.py | 4 +-
scripts/qapi/mypy.ini | 5 -
scripts/qapi/parser.py | 3 +-
scripts/qapi/pylintrc | 11 +-
scripts/qapi/schema.py | 773 +++++++++++++++++++++++++------------
5 files changed, 523 insertions(+), 273 deletions(-)
--
2.43.0