mbox series

[00/19] qapi: statically type schema.py

Message ID 20231116014350.653792-1-jsnow@redhat.com
Headers show
Series qapi: statically type schema.py | expand

Message

John Snow Nov. 16, 2023, 1:43 a.m. UTC
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.

GitLab CI: https://gitlab.com/jsnow/qemu/-/pipelines/1074124051

Patch 1 is an actual fix,
Patch 2 is a minor patch for pylint with no runtime effect,
Patches 3-15 fix individual typing issues that have some runtime effect.
Patch 16 adds typing information,
Patch 17 removes the schema.py exemption from the mypy conf,
Patches 18-19 are optional.

Most of the patches (expect 16) are very small. I'm sure we'll need to
rework parts of this, but hey, gotta start somewhere.

--js

John Snow (19):
  qapi/schema: fix QAPISchemaEntity.__repr__()
  qapi/schema: add pylint suppressions
  qapi/schema: name QAPISchemaInclude entities
  qapi/schema: declare type for QAPISchemaObjectTypeMember.type
  qapi/schema: make c_type() and json_type() abstract methods
  qapi/schema: adjust type narrowing for mypy's benefit
  qapi/introspect: assert schema.lookup_type did not fail
  qapi/schema: add static typing and assertions to lookup_type()
  qapi/schema: assert info is present when necessary
  qapi/schema: make QAPISchemaArrayType.element_type non-Optional
  qapi/schema: fix QAPISchemaArrayType.check's call to resolve_type
  qapi/schema: split "checked" field into "checking" and "checked"
  qapi/schema: fix typing for QAPISchemaVariants.tag_member
  qapi/schema: assert QAPISchemaVariants are QAPISchemaObjectType
  qapi/parser: demote QAPIExpression to Dict[str, Any]
  qapi/schema: add type hints
  qapi/schema: turn on mypy strictness
  qapi/schema: remove unnecessary asserts
  qapi/schema: refactor entity lookup helpers

 docs/sphinx/qapidoc.py |   2 +-
 scripts/qapi/mypy.ini  |   5 -
 scripts/qapi/parser.py |   3 +-
 scripts/qapi/pylintrc  |   5 -
 scripts/qapi/schema.py | 723 ++++++++++++++++++++++++++++-------------
 5 files changed, 498 insertions(+), 240 deletions(-)