diff mbox series

[v5,18/36] qapi: establish mypy type-checking baseline

Message ID 20201005195158.2348217-19-jsnow@redhat.com
State Superseded
Headers show
Series qapi: static typing conversion, pt1 | expand

Commit Message

John Snow Oct. 5, 2020, 7:51 p.m. UTC
Fix two very minor issues, and then establish a mypy type-checking
baseline.

Like pylint, this should be run from the folder above:

 > mypy --config-file=qapi/mypy.ini qapi/

This is designed and tested for mypy 0.770 or greater.

Signed-off-by: John Snow <jsnow@redhat.com>
Tested-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
---
 scripts/qapi/mypy.ini  | 60 ++++++++++++++++++++++++++++++++++++++++++
 scripts/qapi/schema.py |  3 ++-
 2 files changed, 62 insertions(+), 1 deletion(-)
 create mode 100644 scripts/qapi/mypy.ini

Comments

Markus Armbruster Oct. 7, 2020, 9:25 a.m. UTC | #1
John Snow <jsnow@redhat.com> writes:

> Fix two very minor issues,


What are the two issues?  I'm asking because I can see only one.

>                            and then establish a mypy type-checking

> baseline.


Any particular reason this can't go before PATCH 15 "qapi/common.py: add
type hint annotations".

> Like pylint, this should be run from the folder above:

>

>  > mypy --config-file=qapi/mypy.ini qapi/

>

> This is designed and tested for mypy 0.770 or greater.

>

> Signed-off-by: John Snow <jsnow@redhat.com>

> Tested-by: Eduardo Habkost <ehabkost@redhat.com>

> Reviewed-by: Cleber Rosa <crosa@redhat.com>

> Tested-by: Cleber Rosa <crosa@redhat.com>

> ---

>  scripts/qapi/mypy.ini  | 60 ++++++++++++++++++++++++++++++++++++++++++

>  scripts/qapi/schema.py |  3 ++-

>  2 files changed, 62 insertions(+), 1 deletion(-)

>  create mode 100644 scripts/qapi/mypy.ini

>

> diff --git a/scripts/qapi/mypy.ini b/scripts/qapi/mypy.ini

> new file mode 100644

> index 00000000000..00fac15dc6e

> --- /dev/null

> +++ b/scripts/qapi/mypy.ini

> @@ -0,0 +1,60 @@

> +[mypy]

> +strict = True

> +strict_optional = False

> +disallow_untyped_calls = False

> +python_version = 3.6

> +

> +[mypy-qapi.commands]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.error]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.events]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.expr]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.gen]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.introspect]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.parser]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.schema]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.source]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.types]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> +

> +[mypy-qapi.visit]

> +disallow_untyped_defs = False

> +disallow_incomplete_defs = False

> +check_untyped_defs = False

> diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py

> index 74c6b96d391..483b4b68dff 100644

> --- a/scripts/qapi/schema.py

> +++ b/scripts/qapi/schema.py

> @@ -17,6 +17,7 @@

>  from collections import OrderedDict

>  import os

>  import re

> +from typing import Optional

>  

>  from .common import POINTER_SUFFIX, c_name

>  from .error import QAPIError, QAPISemError

> @@ -25,7 +26,7 @@

>  

>  

>  class QAPISchemaEntity:

> -    meta = None

> +    meta: Optional[str] = None

>  

>      def __init__(self, name, info, doc, ifcond=None, features=None):

>          assert name is None or isinstance(name, str)
John Snow Oct. 7, 2020, 3:33 p.m. UTC | #2
On 10/7/20 5:25 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
> 
>> Fix two very minor issues,
> 
> What are the two issues?  I'm asking because I can see only one.
> 

Bitrot! The other one got fixed elsewhere and rebase didn't conflict, so 
I didn't update the commit message.

>>                             and then establish a mypy type-checking
>> baseline.
> 
> Any particular reason this can't go before PATCH 15 "qapi/common.py: add
> type hint annotations".
> 

Just the way the chips fell. common.py does not check until this very 
commit.

Adding a mypy config can be shuffled up earlier and earlier by 
determining which checks to ignore and adding them, but I'm not sure who 
that benefits.

>> Like pylint, this should be run from the folder above:
>>
>>   > mypy --config-file=qapi/mypy.ini qapi/
>>
>> This is designed and tested for mypy 0.770 or greater.
>>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> Tested-by: Eduardo Habkost <ehabkost@redhat.com>
>> Reviewed-by: Cleber Rosa <crosa@redhat.com>
>> Tested-by: Cleber Rosa <crosa@redhat.com>
>> ---
>>   scripts/qapi/mypy.ini  | 60 ++++++++++++++++++++++++++++++++++++++++++
>>   scripts/qapi/schema.py |  3 ++-
>>   2 files changed, 62 insertions(+), 1 deletion(-)
>>   create mode 100644 scripts/qapi/mypy.ini
>>
>> diff --git a/scripts/qapi/mypy.ini b/scripts/qapi/mypy.ini
>> new file mode 100644
>> index 00000000000..00fac15dc6e
>> --- /dev/null
>> +++ b/scripts/qapi/mypy.ini
>> @@ -0,0 +1,60 @@
>> +[mypy]
>> +strict = True
>> +strict_optional = False
>> +disallow_untyped_calls = False
>> +python_version = 3.6
>> +
>> +[mypy-qapi.commands]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.error]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.events]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.expr]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.gen]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.introspect]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.parser]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.schema]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.source]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.types]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> +
>> +[mypy-qapi.visit]
>> +disallow_untyped_defs = False
>> +disallow_incomplete_defs = False
>> +check_untyped_defs = False
>> diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
>> index 74c6b96d391..483b4b68dff 100644
>> --- a/scripts/qapi/schema.py
>> +++ b/scripts/qapi/schema.py
>> @@ -17,6 +17,7 @@
>>   from collections import OrderedDict
>>   import os
>>   import re
>> +from typing import Optional
>>   
>>   from .common import POINTER_SUFFIX, c_name
>>   from .error import QAPIError, QAPISemError
>> @@ -25,7 +26,7 @@
>>   
>>   
>>   class QAPISchemaEntity:
>> -    meta = None
>> +    meta: Optional[str] = None
>>   
>>       def __init__(self, name, info, doc, ifcond=None, features=None):
>>           assert name is None or isinstance(name, str)
Markus Armbruster Oct. 8, 2020, 7:29 a.m. UTC | #3
John Snow <jsnow@redhat.com> writes:

> On 10/7/20 5:25 AM, Markus Armbruster wrote:

>> John Snow <jsnow@redhat.com> writes:

>> 

>>> Fix two very minor issues,

>> What are the two issues?  I'm asking because I can see only one.

>> 

>

> Bitrot! The other one got fixed elsewhere and rebase didn't conflict,

> so I didn't update the commit message.

>

>>>                             and then establish a mypy type-checking

>>> baseline.

>> Any particular reason this can't go before PATCH 15 "qapi/common.py: add

>> type hint annotations".

>> 

>

> Just the way the chips fell. common.py does not check until this very

> commit.

>

> Adding a mypy config can be shuffled up earlier and earlier by

> determining which checks to ignore and adding them, but I'm not sure

> who that benefits.


I like symmetry, but it's okay as is.  I asked to make sure I'm not
missing something more subtle.

[...]
diff mbox series

Patch

diff --git a/scripts/qapi/mypy.ini b/scripts/qapi/mypy.ini
new file mode 100644
index 00000000000..00fac15dc6e
--- /dev/null
+++ b/scripts/qapi/mypy.ini
@@ -0,0 +1,60 @@ 
+[mypy]
+strict = True
+strict_optional = False
+disallow_untyped_calls = False
+python_version = 3.6
+
+[mypy-qapi.commands]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.error]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.events]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.expr]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.gen]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.introspect]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.parser]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.schema]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.source]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.types]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
+
+[mypy-qapi.visit]
+disallow_untyped_defs = False
+disallow_incomplete_defs = False
+check_untyped_defs = False
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index 74c6b96d391..483b4b68dff 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -17,6 +17,7 @@ 
 from collections import OrderedDict
 import os
 import re
+from typing import Optional
 
 from .common import POINTER_SUFFIX, c_name
 from .error import QAPIError, QAPISemError
@@ -25,7 +26,7 @@ 
 
 
 class QAPISchemaEntity:
-    meta = None
+    meta: Optional[str] = None
 
     def __init__(self, name, info, doc, ifcond=None, features=None):
         assert name is None or isinstance(name, str)