diff mbox series

[10/37] qapi/common.py: delint with pylint

Message ID 20200915224027.2529813-11-jsnow@redhat.com
State New
Headers show
Series qapi: static typing conversion, pt1 | expand

Commit Message

John Snow Sept. 15, 2020, 10:40 p.m. UTC
Signed-off-by: John Snow <jsnow@redhat.com>
---
 scripts/qapi/common.py | 16 +++++++---------
 scripts/qapi/schema.py | 14 +++++++-------
 2 files changed, 14 insertions(+), 16 deletions(-)

Comments

Markus Armbruster Sept. 17, 2020, 2:15 p.m. UTC | #1
John Snow <jsnow@redhat.com> writes:

> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  scripts/qapi/common.py | 16 +++++++---------
>  scripts/qapi/schema.py | 14 +++++++-------
>  2 files changed, 14 insertions(+), 16 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 87d87b95e5..c665e67495 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -14,6 +14,11 @@
>  import re
>  
>  
> +EATSPACE = '\033EATSPACE.'
> +POINTER_SUFFIX = ' *' + EATSPACE
> +c_name_trans = str.maketrans('.-', '__')
> +
> +

You rename and move.  pylint gripes about the names, but it doesn't
actually ask for the move, as far as I can tell.  Can you explain why
you move?

>  # ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
>  # ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
>  # ENUM24_Name -> ENUM24_NAME
> @@ -42,9 +47,6 @@ def c_enum_const(type_name, const_name, prefix=None):
>      return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
>  
>  
> -c_name_trans = str.maketrans('.-', '__')
> -
> -
>  # Map @name to a valid C identifier.
>  # If @protect, avoid returning certain ticklish identifiers (like
>  # C keywords) by prepending 'q_'.
> @@ -89,10 +91,6 @@ def c_name(name, protect=True):
>      return name
>  
>  
> -eatspace = '\033EATSPACE.'
> -pointer_suffix = ' *' + eatspace
> -
> -
>  class Indent:
>      """
>      Indent-level management.
> @@ -135,12 +133,12 @@ def pop(self, amount: int = 4) -> int:
>  
>  
>  # Generate @code with @kwds interpolated.
> -# Obey indent_level, and strip eatspace.
> +# Obey INDENT level, and strip EATSPACE.

Is the change to INDENT intentional?

>  def cgen(code, **kwds):
>      raw = code % kwds
>      if INDENT:
>          raw, _ = re.subn(r'^(?!(#|$))', str(INDENT), raw, flags=re.MULTILINE)
> -    return re.sub(re.escape(eatspace) + r' *', '', raw)
> +    return re.sub(re.escape(EATSPACE) + r' *', '', raw)
>  
>  
>  def mcgen(code, **kwds):
[...]
John Snow Sept. 17, 2020, 5:48 p.m. UTC | #2
On 9/17/20 10:15 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
> 
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   scripts/qapi/common.py | 16 +++++++---------
>>   scripts/qapi/schema.py | 14 +++++++-------
>>   2 files changed, 14 insertions(+), 16 deletions(-)
>>
>> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
>> index 87d87b95e5..c665e67495 100644
>> --- a/scripts/qapi/common.py
>> +++ b/scripts/qapi/common.py
>> @@ -14,6 +14,11 @@
>>   import re
>>   
>>   
>> +EATSPACE = '\033EATSPACE.'
>> +POINTER_SUFFIX = ' *' + EATSPACE
>> +c_name_trans = str.maketrans('.-', '__')
>> +
>> +
> 
> You rename and move.  pylint gripes about the names, but it doesn't
> actually ask for the move, as far as I can tell.  Can you explain why
> you move?
> 

Preference. I like constants and globals at the top so you can audit any 
code that runs at import time in one place. Since they are externally 
visible objects, having them near other "header" style information makes 
sense to me.

>>   # ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
>>   # ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
>>   # ENUM24_Name -> ENUM24_NAME
>> @@ -42,9 +47,6 @@ def c_enum_const(type_name, const_name, prefix=None):
>>       return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
>>   
>>   
>> -c_name_trans = str.maketrans('.-', '__')

(This one winds up being a constant, so I renamed it in my v2.)

>> -
>> -
>>   # Map @name to a valid C identifier.
>>   # If @protect, avoid returning certain ticklish identifiers (like
>>   # C keywords) by prepending 'q_'.
>> @@ -89,10 +91,6 @@ def c_name(name, protect=True):
>>       return name
>>   
>>   
>> -eatspace = '\033EATSPACE.'
>> -pointer_suffix = ' *' + eatspace
>> -
>> -
>>   class Indent:
>>       """
>>       Indent-level management.
>> @@ -135,12 +133,12 @@ def pop(self, amount: int = 4) -> int:
>>   
>>   
>>   # Generate @code with @kwds interpolated.
>> -# Obey indent_level, and strip eatspace.
>> +# Obey INDENT level, and strip EATSPACE.
> 
> Is the change to INDENT intentional?
> 

Kind of, but it's either late (should have been with the indent manager 
patch) or early (Should be with the patch that moves comments into 
docstrings.)

When this comment becomes a docstring, I use `INDENT` to indicate it as 
a proper object. This in and of itself is prescient, as we are not using 
sphinx/apidoc to generate any documentation about the QAPI package yet.

(The pending v2 uses `indent` after you pointed out that it was not a 
constant.)

>>   def cgen(code, **kwds):
>>       raw = code % kwds
>>       if INDENT:
>>           raw, _ = re.subn(r'^(?!(#|$))', str(INDENT), raw, flags=re.MULTILINE)
>> -    return re.sub(re.escape(eatspace) + r' *', '', raw)
>> +    return re.sub(re.escape(EATSPACE) + r' *', '', raw)
>>   
>>   
>>   def mcgen(code, **kwds):
> [...]
>
Markus Armbruster Sept. 18, 2020, 11:03 a.m. UTC | #3
John Snow <jsnow@redhat.com> writes:

> On 9/17/20 10:15 AM, Markus Armbruster wrote:
>> John Snow <jsnow@redhat.com> writes:
>> 
>>> Signed-off-by: John Snow <jsnow@redhat.com>
>>> ---
>>>   scripts/qapi/common.py | 16 +++++++---------
>>>   scripts/qapi/schema.py | 14 +++++++-------
>>>   2 files changed, 14 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
>>> index 87d87b95e5..c665e67495 100644
>>> --- a/scripts/qapi/common.py
>>> +++ b/scripts/qapi/common.py
>>> @@ -14,6 +14,11 @@
>>>   import re
>>>     
>>> +EATSPACE = '\033EATSPACE.'
>>> +POINTER_SUFFIX = ' *' + EATSPACE
>>> +c_name_trans = str.maketrans('.-', '__')
>>> +
>>> +
>> You rename and move.  pylint gripes about the names, but it doesn't
>> actually ask for the move, as far as I can tell.  Can you explain why
>> you move?
>> 
>
> Preference. I like constants and globals at the top so you can audit
> any code that runs at import time in one place.

I can buy this argument.

>                                                 Since they are
> externally visible objects, having them near other "header" style
> information makes sense to me.

This one I find unconvincing.  Functions and classes are just as
visible.

Mention the move in the commit message, along with the (convincing part
of the) rationale.

Aside: EATSPACE and c_name_trans are actually local to common.py.
EATSPACE sort of leaks out only via the contract of mcgen().  The
contract could be rephrased in terms of POINTER_SUFFIX.  Not sure it's
worthwhile.

>>>   # ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
>>>   # ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
>>>   # ENUM24_Name -> ENUM24_NAME
>>> @@ -42,9 +47,6 @@ def c_enum_const(type_name, const_name, prefix=None):
>>>       return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
>>>     
>>> -c_name_trans = str.maketrans('.-', '__')
>
> (This one winds up being a constant, so I renamed it in my v2.)
>
>>> -
>>> -
>>>   # Map @name to a valid C identifier.
>>>   # If @protect, avoid returning certain ticklish identifiers (like
>>>   # C keywords) by prepending 'q_'.
>>> @@ -89,10 +91,6 @@ def c_name(name, protect=True):
>>>       return name
>>>     
>>> -eatspace = '\033EATSPACE.'
>>> -pointer_suffix = ' *' + eatspace
>>> -
>>> -
>>>   class Indent:
>>>       """
>>>       Indent-level management.
>>> @@ -135,12 +133,12 @@ def pop(self, amount: int = 4) -> int:
>>>     
>>>   # Generate @code with @kwds interpolated.
>>> -# Obey indent_level, and strip eatspace.
>>> +# Obey INDENT level, and strip EATSPACE.
>> Is the change to INDENT intentional?
>> 
>
> Kind of, but it's either late (should have been with the indent
> manager patch) or early (Should be with the patch that moves comments
> into docstrings.)
>
> When this comment becomes a docstring, I use `INDENT` to indicate it
> as a proper object. This in and of itself is prescient, as we are not
> using sphinx/apidoc to generate any documentation about the QAPI
> package yet.
>
> (The pending v2 uses `indent` after you pointed out that it was not a
> constant.)
>
>>>   def cgen(code, **kwds):
>>>       raw = code % kwds
>>>       if INDENT:
>>>           raw, _ = re.subn(r'^(?!(#|$))', str(INDENT), raw, flags=re.MULTILINE)
>>> -    return re.sub(re.escape(eatspace) + r' *', '', raw)
>>> +    return re.sub(re.escape(EATSPACE) + r' *', '', raw)
>>>     
>>>   def mcgen(code, **kwds):
>> [...]
>>
diff mbox series

Patch

diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 87d87b95e5..c665e67495 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -14,6 +14,11 @@ 
 import re
 
 
+EATSPACE = '\033EATSPACE.'
+POINTER_SUFFIX = ' *' + EATSPACE
+c_name_trans = str.maketrans('.-', '__')
+
+
 # ENUMName -> ENUM_NAME, EnumName1 -> ENUM_NAME1
 # ENUM_NAME -> ENUM_NAME, ENUM_NAME1 -> ENUM_NAME1, ENUM_Name2 -> ENUM_NAME2
 # ENUM24_Name -> ENUM24_NAME
@@ -42,9 +47,6 @@  def c_enum_const(type_name, const_name, prefix=None):
     return camel_to_upper(type_name) + '_' + c_name(const_name, False).upper()
 
 
-c_name_trans = str.maketrans('.-', '__')
-
-
 # Map @name to a valid C identifier.
 # If @protect, avoid returning certain ticklish identifiers (like
 # C keywords) by prepending 'q_'.
@@ -89,10 +91,6 @@  def c_name(name, protect=True):
     return name
 
 
-eatspace = '\033EATSPACE.'
-pointer_suffix = ' *' + eatspace
-
-
 class Indent:
     """
     Indent-level management.
@@ -135,12 +133,12 @@  def pop(self, amount: int = 4) -> int:
 
 
 # Generate @code with @kwds interpolated.
-# Obey indent_level, and strip eatspace.
+# Obey INDENT level, and strip EATSPACE.
 def cgen(code, **kwds):
     raw = code % kwds
     if INDENT:
         raw, _ = re.subn(r'^(?!(#|$))', str(INDENT), raw, flags=re.MULTILINE)
-    return re.sub(re.escape(eatspace) + r' *', '', raw)
+    return re.sub(re.escape(EATSPACE) + r' *', '', raw)
 
 
 def mcgen(code, **kwds):
diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
index b77e0e56b2..b4921b46c9 100644
--- a/scripts/qapi/schema.py
+++ b/scripts/qapi/schema.py
@@ -18,7 +18,7 @@ 
 import re
 from collections import OrderedDict
 
-from .common import c_name, pointer_suffix
+from .common import c_name, POINTER_SUFFIX
 from .error import QAPIError, QAPISemError
 from .expr import check_exprs
 from .parser import QAPISchemaParser
@@ -309,7 +309,7 @@  def is_implicit(self):
         return True
 
     def c_type(self):
-        return c_name(self.name) + pointer_suffix
+        return c_name(self.name) + POINTER_SUFFIX
 
     def json_type(self):
         return 'array'
@@ -430,7 +430,7 @@  def c_name(self):
 
     def c_type(self):
         assert not self.is_implicit()
-        return c_name(self.name) + pointer_suffix
+        return c_name(self.name) + POINTER_SUFFIX
 
     def c_unboxed_type(self):
         return c_name(self.name)
@@ -504,7 +504,7 @@  def connect_doc(self, doc=None):
             v.connect_doc(doc)
 
     def c_type(self):
-        return c_name(self.name) + pointer_suffix
+        return c_name(self.name) + POINTER_SUFFIX
 
     def json_type(self):
         return 'value'
@@ -896,7 +896,7 @@  def _def_builtin_type(self, name, json_type, c_type):
         self._make_array_type(name, None)
 
     def _def_predefineds(self):
-        for t in [('str',    'string',  'char' + pointer_suffix),
+        for t in [('str',    'string',  'char' + POINTER_SUFFIX),
                   ('number', 'number',  'double'),
                   ('int',    'int',     'int64_t'),
                   ('int8',   'int',     'int8_t'),
@@ -909,8 +909,8 @@  def _def_predefineds(self):
                   ('uint64', 'int',     'uint64_t'),
                   ('size',   'int',     'uint64_t'),
                   ('bool',   'boolean', 'bool'),
-                  ('any',    'value',   'QObject' + pointer_suffix),
-                  ('null',   'null',    'QNull' + pointer_suffix)]:
+                  ('any',    'value',   'QObject' + POINTER_SUFFIX),
+                  ('null',   'null',    'QNull' + POINTER_SUFFIX)]:
             self._def_builtin_type(*t)
         self.the_empty_object_type = QAPISchemaObjectType(
             'q_empty', None, None, None, None, None, [], None)