diff mbox series

[v3,41/50] qapi: add a 'unit' pragma

Message ID 20170911110623.24981-42-marcandre.lureau@redhat.com
State New
Headers show
Series Hi, | expand

Commit Message

Marc-André Lureau Sept. 11, 2017, 11:06 a.m. UTC
Add a pragma that allows to tag the following expressions with a unit
name. By default, an expression has no unit name.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 scripts/qapi.py              | 9 ++++++++-
 docs/devel/qapi-code-gen.txt | 3 +++
 2 files changed, 11 insertions(+), 1 deletion(-)

Comments

Markus Armbruster Dec. 14, 2017, 1:54 p.m. UTC | #1
Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> Add a pragma that allows to tag the following expressions with a unit
> name. By default, an expression has no unit name.

Please explain the unit name's intended purpose.

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  scripts/qapi.py              | 9 ++++++++-
>  docs/devel/qapi-code-gen.txt | 3 +++
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qapi.py b/scripts/qapi.py
> index eb4ffdc06d..1d0defd638 100644
> --- a/scripts/qapi.py
> +++ b/scripts/qapi.py
> @@ -279,10 +279,12 @@ class QAPISchemaParser(object):
>          self.docs = []
>          self.cur_doc = None
>          self.accept()
> +        self.unit = None
>  
>          while self.tok is not None:
>              info = {'file': fname, 'line': self.line,
> -                    'parent': self.incl_info}
> +                    'parent': self.incl_info,
> +                    'unit': self.unit}
>              if self.tok == '#':
>                  self.reject_expr_doc()
>                  self.cur_doc = self.get_doc(info)
> @@ -371,6 +373,11 @@ class QAPISchemaParser(object):
>                                     "Pragma name-case-whitelist must be"
>                                     " a list of strings")
>              name_case_whitelist = value
> +        elif name == 'unit':
> +            if not isinstance(value, str):
> +                raise QAPISemError(info,
> +                                   "Pragma 'unit' must be string")
> +            self.unit = value
>          else:
>              raise QAPISemError(info, "Unknown pragma '%s'" % name)
>  
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index 24fc6f74ee..37a27cd9d7 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -326,6 +326,9 @@ violate the rules on permitted return types.  Default is none.
>  Pragma 'name-case-whitelist' takes a list of names that may violate
>  rules on use of upper- vs. lower-case letters.  Default is none.
>  
> +Pragma 'unit' takes a string value. It will set the unit name for the
> +following expressions in the schema. Most code generator can filter
> +based on a unit name. Default is none.

Do you mean "most code generators"?

What does "filtering" mean?

>  
>  === Struct types ===

Humor me: put two spaces after a sentence-ending period.
Marc-André Lureau Dec. 14, 2017, 2 p.m. UTC | #2
Hi

On Thu, Dec 14, 2017 at 2:54 PM, Markus Armbruster <armbru@redhat.com> wrote:
> Marc-André Lureau <marcandre.lureau@redhat.com> writes:
>
>> Add a pragma that allows to tag the following expressions with a unit
>> name. By default, an expression has no unit name.
>
> Please explain the unit name's intended purpose.
>

It's syccintly explained in the doc.

>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>> ---
>>  scripts/qapi.py              | 9 ++++++++-
>>  docs/devel/qapi-code-gen.txt | 3 +++
>>  2 files changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/scripts/qapi.py b/scripts/qapi.py
>> index eb4ffdc06d..1d0defd638 100644
>> --- a/scripts/qapi.py
>> +++ b/scripts/qapi.py
>> @@ -279,10 +279,12 @@ class QAPISchemaParser(object):
>>          self.docs = []
>>          self.cur_doc = None
>>          self.accept()
>> +        self.unit = None
>>
>>          while self.tok is not None:
>>              info = {'file': fname, 'line': self.line,
>> -                    'parent': self.incl_info}
>> +                    'parent': self.incl_info,
>> +                    'unit': self.unit}
>>              if self.tok == '#':
>>                  self.reject_expr_doc()
>>                  self.cur_doc = self.get_doc(info)
>> @@ -371,6 +373,11 @@ class QAPISchemaParser(object):
>>                                     "Pragma name-case-whitelist must be"
>>                                     " a list of strings")
>>              name_case_whitelist = value
>> +        elif name == 'unit':
>> +            if not isinstance(value, str):
>> +                raise QAPISemError(info,
>> +                                   "Pragma 'unit' must be string")
>> +            self.unit = value
>>          else:
>>              raise QAPISemError(info, "Unknown pragma '%s'" % name)
>>
>> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
>> index 24fc6f74ee..37a27cd9d7 100644
>> --- a/docs/devel/qapi-code-gen.txt
>> +++ b/docs/devel/qapi-code-gen.txt
>> @@ -326,6 +326,9 @@ violate the rules on permitted return types.  Default is none.
>>  Pragma 'name-case-whitelist' takes a list of names that may violate
>>  rules on use of upper- vs. lower-case letters.  Default is none.
>>
>> +Pragma 'unit' takes a string value. It will set the unit name for the
>> +following expressions in the schema. Most code generator can filter
>> +based on a unit name. Default is none.
>
> Do you mean "most code generators"?

The qapi code/doc generators.

>
> What does "filtering" mean?

To be able to select a subset of expressions based on the unit name.

>>
>>  === Struct types ===
>
> Humor me: put two spaces after a sentence-ending period.
>

I don't get what you mean.

thanks
Markus Armbruster Dec. 14, 2017, 2:33 p.m. UTC | #3
Marc-André Lureau <marcandre.lureau@gmail.com> writes:

> Hi
>
> On Thu, Dec 14, 2017 at 2:54 PM, Markus Armbruster <armbru@redhat.com> wrote:
>> Marc-André Lureau <marcandre.lureau@redhat.com> writes:
>>
>>> Add a pragma that allows to tag the following expressions with a unit
>>> name. By default, an expression has no unit name.
>>
>> Please explain the unit name's intended purpose.
>>
>
> It's syccintly explained in the doc.

The commit message should state the patch's purpose.  When the patch
adds documentation, and you'd rather not duplicate it in the commit
message, a short summary plus a pointer there may do.

>>> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
>>> ---
>>>  scripts/qapi.py              | 9 ++++++++-
>>>  docs/devel/qapi-code-gen.txt | 3 +++
>>>  2 files changed, 11 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/scripts/qapi.py b/scripts/qapi.py
>>> index eb4ffdc06d..1d0defd638 100644
>>> --- a/scripts/qapi.py
>>> +++ b/scripts/qapi.py
>>> @@ -279,10 +279,12 @@ class QAPISchemaParser(object):
>>>          self.docs = []
>>>          self.cur_doc = None
>>>          self.accept()
>>> +        self.unit = None
>>>
>>>          while self.tok is not None:
>>>              info = {'file': fname, 'line': self.line,
>>> -                    'parent': self.incl_info}
>>> +                    'parent': self.incl_info,
>>> +                    'unit': self.unit}
>>>              if self.tok == '#':
>>>                  self.reject_expr_doc()
>>>                  self.cur_doc = self.get_doc(info)
>>> @@ -371,6 +373,11 @@ class QAPISchemaParser(object):
>>>                                     "Pragma name-case-whitelist must be"
>>>                                     " a list of strings")
>>>              name_case_whitelist = value
>>> +        elif name == 'unit':
>>> +            if not isinstance(value, str):
>>> +                raise QAPISemError(info,
>>> +                                   "Pragma 'unit' must be string")
>>> +            self.unit = value
>>>          else:
>>>              raise QAPISemError(info, "Unknown pragma '%s'" % name)
>>>
>>> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
>>> index 24fc6f74ee..37a27cd9d7 100644
>>> --- a/docs/devel/qapi-code-gen.txt
>>> +++ b/docs/devel/qapi-code-gen.txt
>>> @@ -326,6 +326,9 @@ violate the rules on permitted return types.  Default is none.
>>>  Pragma 'name-case-whitelist' takes a list of names that may violate
>>>  rules on use of upper- vs. lower-case letters.  Default is none.
>>>
>>> +Pragma 'unit' takes a string value. It will set the unit name for the
>>> +following expressions in the schema. Most code generator can filter
>>> +based on a unit name. Default is none.
>>
>> Do you mean "most code generators"?
>
> The qapi code/doc generators.

So plural is intended.  Easy enough to fix.

>>
>> What does "filtering" mean?
>
> To be able to select a subset of expressions based on the unit name.

Let's spell that out.

>>>
>>>  === Struct types ===
>>
>> Humor me: put two spaces after a sentence-ending period.
>>
>
> I don't get what you mean.

This sentence ends with a period, which is followed by two spaces.  This
sentence is followed by just one space. I prefer two.  A few
inconsistencies have crept into this file over time, let's not add more.
All clear now?
Markus Armbruster Dec. 14, 2017, 4:08 p.m. UTC | #4
Marc-André Lureau <marcandre.lureau@redhat.com> writes:

> Add a pragma that allows to tag the following expressions with a unit
> name. By default, an expression has no unit name.
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  scripts/qapi.py              | 9 ++++++++-
>  docs/devel/qapi-code-gen.txt | 3 +++
>  2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/qapi.py b/scripts/qapi.py
> index eb4ffdc06d..1d0defd638 100644
> --- a/scripts/qapi.py
> +++ b/scripts/qapi.py
> @@ -279,10 +279,12 @@ class QAPISchemaParser(object):
>          self.docs = []
>          self.cur_doc = None
>          self.accept()
> +        self.unit = None
>  
>          while self.tok is not None:
>              info = {'file': fname, 'line': self.line,
> -                    'parent': self.incl_info}
> +                    'parent': self.incl_info,
> +                    'unit': self.unit}
>              if self.tok == '#':
>                  self.reject_expr_doc()
>                  self.cur_doc = self.get_doc(info)
> @@ -371,6 +373,11 @@ class QAPISchemaParser(object):
>                                     "Pragma name-case-whitelist must be"
>                                     " a list of strings")
>              name_case_whitelist = value
> +        elif name == 'unit':
> +            if not isinstance(value, str):
> +                raise QAPISemError(info,
> +                                   "Pragma 'unit' must be string")
> +            self.unit = value
>          else:
>              raise QAPISemError(info, "Unknown pragma '%s'" % name)
>  
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index 24fc6f74ee..37a27cd9d7 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -326,6 +326,9 @@ violate the rules on permitted return types.  Default is none.
>  Pragma 'name-case-whitelist' takes a list of names that may violate
>  rules on use of upper- vs. lower-case letters.  Default is none.
>  
> +Pragma 'unit' takes a string value. It will set the unit name for the
> +following expressions in the schema. Most code generator can filter
> +based on a unit name. Default is none.
>  
>  === Struct types ===

Test coverage?
diff mbox series

Patch

diff --git a/scripts/qapi.py b/scripts/qapi.py
index eb4ffdc06d..1d0defd638 100644
--- a/scripts/qapi.py
+++ b/scripts/qapi.py
@@ -279,10 +279,12 @@  class QAPISchemaParser(object):
         self.docs = []
         self.cur_doc = None
         self.accept()
+        self.unit = None
 
         while self.tok is not None:
             info = {'file': fname, 'line': self.line,
-                    'parent': self.incl_info}
+                    'parent': self.incl_info,
+                    'unit': self.unit}
             if self.tok == '#':
                 self.reject_expr_doc()
                 self.cur_doc = self.get_doc(info)
@@ -371,6 +373,11 @@  class QAPISchemaParser(object):
                                    "Pragma name-case-whitelist must be"
                                    " a list of strings")
             name_case_whitelist = value
+        elif name == 'unit':
+            if not isinstance(value, str):
+                raise QAPISemError(info,
+                                   "Pragma 'unit' must be string")
+            self.unit = value
         else:
             raise QAPISemError(info, "Unknown pragma '%s'" % name)
 
diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
index 24fc6f74ee..37a27cd9d7 100644
--- a/docs/devel/qapi-code-gen.txt
+++ b/docs/devel/qapi-code-gen.txt
@@ -326,6 +326,9 @@  violate the rules on permitted return types.  Default is none.
 Pragma 'name-case-whitelist' takes a list of names that may violate
 rules on use of upper- vs. lower-case letters.  Default is none.
 
+Pragma 'unit' takes a string value. It will set the unit name for the
+following expressions in the schema. Most code generator can filter
+based on a unit name. Default is none.
 
 === Struct types ===