mbox series

[v2,00/16] qapi: static typing conversion, pt3

Message ID 20201026213637.47087-1-jsnow@redhat.com
Headers show
Series qapi: static typing conversion, pt3 | expand

Message

John Snow Oct. 26, 2020, 9:36 p.m. UTC
based-on: <20201026194251.11075-1-jsnow@redhat.com>
          [PATCH v2 00/11] qapi: static typing conversion, pt2

Hi, this series adds static type hints to the QAPI module.
This is part three, and it focuses on expr.py.

Part 3: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt3
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:
 - flake8 qapi/
 - pylint --rcfile=qapi/pylintrc qapi/
 - mypy --config-file=qapi/mypy.ini qapi/

V2:
 - Rebased on the latest V2
002/16:[0001] [FC] 'qapi/expr.py: Check for dict instead of OrderedDict'
 - Import order differences
007/16:[0006] [FC] 'qapi/expr.py: Add casts in a few select cases'
 - Import order differences
008/16:[0006] [FC] 'qapi/expr.py: add type hint annotations'
 - Import order differents
012/16:[0066] [FC] 'qapi/expr.py: Add docstrings'
 - Various docstring changes for Sphinx
014/16:[0004] [FC] 'qapi/expr.py: Use tuples instead of lists for static data'
 - Change to accommodate new 'coroutine' key
015/16:[0006] [FC] 'qapi/expr.py: move related checks inside check_xxx functions'
 - Fix check order (ehabkost)

John Snow (16):
  qapi/expr.py: Remove 'info' argument from nested check_if_str
  qapi/expr.py: Check for dict instead of OrderedDict
  qapi/expr.py: constrain incoming expression types
  qapi/expr.py: Add assertion for union type 'check_dict'
  qapi/expr.py: move string check upwards in check_type
  qapi/expr.py: Check type of 'data' member
  qapi/expr.py: Add casts in a few select cases
  qapi/expr.py: add type hint annotations
  qapi/expr.py: rewrite check_if
  qapi/expr.py: Remove single-letter variable
  qapi/expr.py: enable pylint checks
  qapi/expr.py: Add docstrings
  qapi/expr.py: Modify check_keys to accept any Iterable
  qapi/expr.py: Use tuples instead of lists for static data
  qapi/expr.py: move related checks inside check_xxx functions
  qapi/expr.py: Use an expression checker dispatch table

 scripts/qapi/expr.py  | 447 +++++++++++++++++++++++++++++++-----------
 scripts/qapi/mypy.ini |   5 -
 scripts/qapi/pylintrc |   1 -
 3 files changed, 334 insertions(+), 119 deletions(-)

Comments

John Snow Nov. 4, 2020, 12:41 a.m. UTC | #1
On 10/26/20 5:36 PM, John Snow wrote:
> based-on: <20201026194251.11075-1-jsnow@redhat.com>
>            [PATCH v2 00/11] qapi: static typing conversion, pt2

Ping,

This series can be reviewed independently of pt2, so I encourage you to 
try if you have the time.

> 
> Hi, this series adds static type hints to the QAPI module.
> This is part three, and it focuses on expr.py.
> 
> Part 3: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt3
> 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:
>   - flake8 qapi/
>   - pylint --rcfile=qapi/pylintrc qapi/
>   - mypy --config-file=qapi/mypy.ini qapi/
> 
> V2:
>   - Rebased on the latest V2
> 002/16:[0001] [FC] 'qapi/expr.py: Check for dict instead of OrderedDict'
>   - Import order differences
> 007/16:[0006] [FC] 'qapi/expr.py: Add casts in a few select cases'
>   - Import order differences
> 008/16:[0006] [FC] 'qapi/expr.py: add type hint annotations'
>   - Import order differents
> 012/16:[0066] [FC] 'qapi/expr.py: Add docstrings'
>   - Various docstring changes for Sphinx
> 014/16:[0004] [FC] 'qapi/expr.py: Use tuples instead of lists for static data'
>   - Change to accommodate new 'coroutine' key
> 015/16:[0006] [FC] 'qapi/expr.py: move related checks inside check_xxx functions'
>   - Fix check order (ehabkost)
> 
> John Snow (16):
>    qapi/expr.py: Remove 'info' argument from nested check_if_str
>    qapi/expr.py: Check for dict instead of OrderedDict
>    qapi/expr.py: constrain incoming expression types
>    qapi/expr.py: Add assertion for union type 'check_dict'
>    qapi/expr.py: move string check upwards in check_type
>    qapi/expr.py: Check type of 'data' member
>    qapi/expr.py: Add casts in a few select cases
>    qapi/expr.py: add type hint annotations
>    qapi/expr.py: rewrite check_if
>    qapi/expr.py: Remove single-letter variable
>    qapi/expr.py: enable pylint checks
>    qapi/expr.py: Add docstrings
>    qapi/expr.py: Modify check_keys to accept any Iterable
>    qapi/expr.py: Use tuples instead of lists for static data
>    qapi/expr.py: move related checks inside check_xxx functions
>    qapi/expr.py: Use an expression checker dispatch table
> 
>   scripts/qapi/expr.py  | 447 +++++++++++++++++++++++++++++++-----------
>   scripts/qapi/mypy.ini |   5 -
>   scripts/qapi/pylintrc |   1 -
>   3 files changed, 334 insertions(+), 119 deletions(-)
>
Marc-André Lureau Nov. 4, 2020, 2:53 p.m. UTC | #2
Hi

On Wed, Nov 4, 2020 at 5:16 AM John Snow <jsnow@redhat.com> wrote:

> On 10/26/20 5:36 PM, John Snow wrote:
> > based-on: <20201026194251.11075-1-jsnow@redhat.com>
> >            [PATCH v2 00/11] qapi: static typing conversion, pt2
>
> Ping,
>
> This series can be reviewed independently of pt2, so I encourage you to
> try if you have the time.
>
> >
> > Hi, this series adds static type hints to the QAPI module.
> > This is part three, and it focuses on expr.py.
> >
> > Part 3: https://gitlab.com/jsnow/qemu/-/tree/python-qapi-cleanup-pt3
> > 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:
> >   - flake8 qapi/
> >   - pylint --rcfile=qapi/pylintrc qapi/
> >   - mypy --config-file=qapi/mypy.ini qapi/
> >
> > V2:
> >   - Rebased on the latest V2
> > 002/16:[0001] [FC] 'qapi/expr.py: Check for dict instead of OrderedDict'
> >   - Import order differences
> > 007/16:[0006] [FC] 'qapi/expr.py: Add casts in a few select cases'
> >   - Import order differences
> > 008/16:[0006] [FC] 'qapi/expr.py: add type hint annotations'
> >   - Import order differents
> > 012/16:[0066] [FC] 'qapi/expr.py: Add docstrings'
> >   - Various docstring changes for Sphinx
> > 014/16:[0004] [FC] 'qapi/expr.py: Use tuples instead of lists for static
> data'
> >   - Change to accommodate new 'coroutine' key
> > 015/16:[0006] [FC] 'qapi/expr.py: move related checks inside check_xxx
> functions'
> >   - Fix check order (ehabkost)
> >
> > John Snow (16):
> >    qapi/expr.py: Remove 'info' argument from nested check_if_str
> >    qapi/expr.py: Check for dict instead of OrderedDict
> >    qapi/expr.py: constrain incoming expression types
> >    qapi/expr.py: Add assertion for union type 'check_dict'
> >    qapi/expr.py: move string check upwards in check_type
> >    qapi/expr.py: Check type of 'data' member
> >    qapi/expr.py: Add casts in a few select cases
> >    qapi/expr.py: add type hint annotations
> >    qapi/expr.py: rewrite check_if
> >    qapi/expr.py: Remove single-letter variable
> >    qapi/expr.py: enable pylint checks
> >    qapi/expr.py: Add docstrings
> >    qapi/expr.py: Modify check_keys to accept any Iterable
> >    qapi/expr.py: Use tuples instead of lists for static data
> >    qapi/expr.py: move related checks inside check_xxx functions
> >    qapi/expr.py: Use an expression checker dispatch table
> >
> >   scripts/qapi/expr.py  | 447 +++++++++++++++++++++++++++++++-----------
> >   scripts/qapi/mypy.ini |   5 -
> >   scripts/qapi/pylintrc |   1 -
> >   3 files changed, 334 insertions(+), 119 deletions(-)
> >
>
>
>
Looks all good to me. And you have already reviewed-by on all patches.
Given that it's hardening the current code, I would suggest to merge it
during the freeze. Unless Markus can maintain a qapi-next branch where we
can base our work on?

thanks