qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: John Snow <jsnow@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Michael Roth <michael.roth@amd.com>,
	Cleber Rosa <crosa@redhat.com>,
	qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [PATCH v3 04/16] qapi/expr.py: Add assertion for union type 'check_dict'
Date: Thu, 25 Mar 2021 15:42:30 -0400	[thread overview]
Message-ID: <dbae4ad0-1d29-a635-8142-84bd104f8907@redhat.com> (raw)
In-Reply-To: <87wntvaips.fsf@dusky.pond.sub.org>

On 3/25/21 1:46 AM, Markus Armbruster wrote:
> John Snow <jsnow@redhat.com> writes:
> 
>> On 2/24/21 5:35 AM, Markus Armbruster wrote:
>>> John Snow <jsnow@redhat.com> writes:
>>>
>>>> mypy isn't fond of allowing you to check for bool membership in a
>>>> collection of str elements. Guard this lookup for precisely when we were
>>>> given a name.
>>>>
>>>> Signed-off-by: John Snow <jsnow@redhat.com>
>>>> Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
>>>> Reviewed-by: Cleber Rosa <crosa@redhat.com>
>>>> ---
>>>>    scripts/qapi/expr.py | 4 +++-
>>>>    1 file changed, 3 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
>>>> index 783282b53ce..138fab0711f 100644
>>>> --- a/scripts/qapi/expr.py
>>>> +++ b/scripts/qapi/expr.py
>>>> @@ -173,7 +173,9 @@ def check_type(value, info, source,
>>>>            raise QAPISemError(info,
>>>>                               "%s should be an object or type name" % source)
>>>>    -    permit_upper = allow_dict in info.pragma.name_case_whitelist
>>>> +    permit_upper = False
>>>> +    if isinstance(allow_dict, str):
>>>> +        permit_upper = allow_dict in info.pragma.name_case_whitelist
>>>>          # value is a dictionary, check that each member is okay
>>>>        for (key, arg) in value.items():
>>>
>>> Busy-work like this can make me doubt typing is worth the notational
>>> overhead.
>>> There must a less awkward way to plumb "upper case okay" through
>>> check_type() to check_name_is_str().  But we're typing what we have.
>>
>> Leaving this as-is for now. There's something I'd like to do about it,
>> but it has to happen later.
>>
>> (I think all the pragma checks should happen in schema.py, and not in
>> expr.py. They are by their essence not context-free, since they depend
>> on the context of the pragma.)
> 
> True.
> 
> Pragmas other than doc-required are an ugly consequence of us having
> made a a bit of a mess in the schema.  The oldest parts of the schema
> were set in stone before we decided on certain rules, and then we kept
> failing at manually enforcing these rules.  To get automatic
> enforcement, we needed a way to give a pass to existing rule breakers.
> Preferably without rearchitecting the frontend.  Pragmas solve that
> problem.  The solution is as ugly as the problem.
> 
> Without pragmas, the name checks are context-free.  That's why they are
> where they are.
> 

It's not a judgment in the sense that I am disappointed it isn't already 
like that, but I am giving you the opportunity to explicitly reject my 
proposal of how I'd like to eventually fix it.

I want to decouple it from QAPISourceInfo and do the checks in schema.py 
instead. This may mean less restrictive checks in expr.py as an 
acknowledgment of what the "actual" grammar is.

In exchange, schema.py has to apply some of these checks itself, but it 
now has the semantic context of the Pragma and the benefit of a fully 
normalized structure to work against.

Over time, semantic restrictions that have exceptions that we remove can 
be transported back to the grammatical validation layer.

--js



  reply	other threads:[~2021-03-25 19:44 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-23  0:33 [PATCH v3 00/16] qapi: static typing conversion, pt3 John Snow
2021-02-23  0:33 ` [PATCH v3 01/16] qapi/expr.py: Remove 'info' argument from nested check_if_str John Snow
2021-02-23  0:33 ` [PATCH v3 02/16] qapi/expr.py: Check for dict instead of OrderedDict John Snow
2021-02-24  9:30   ` Markus Armbruster
2021-02-24 21:23     ` John Snow
2021-02-25 10:40       ` Markus Armbruster
2021-02-25 20:04         ` John Snow
2021-03-01 16:48           ` Markus Armbruster
2021-02-23  0:33 ` [PATCH v3 03/16] qapi/expr.py: constrain incoming expression types John Snow
2021-02-24 10:01   ` Markus Armbruster
2021-02-24 21:46     ` John Snow
2021-02-25 11:56       ` Markus Armbruster
2021-02-25 20:43         ` John Snow
2021-03-02  5:23           ` Markus Armbruster
2021-02-23  0:33 ` [PATCH v3 04/16] qapi/expr.py: Add assertion for union type 'check_dict' John Snow
2021-02-24 10:35   ` Markus Armbruster
2021-02-24 21:54     ` John Snow
2021-03-24 21:09     ` John Snow
2021-03-25  5:46       ` Markus Armbruster
2021-03-25 19:42         ` John Snow [this message]
2021-02-23  0:33 ` [PATCH v3 05/16] qapi/expr.py: move string check upwards in check_type John Snow
2021-02-23  0:33 ` [PATCH v3 06/16] qapi/expr.py: Check type of 'data' member John Snow
2021-02-24 10:39   ` Markus Armbruster
2021-02-24 22:06     ` John Snow
2021-02-25 12:02       ` Markus Armbruster
2021-02-23  0:33 ` [PATCH v3 07/16] qapi/expr.py: Add casts in a few select cases John Snow
2021-02-24 12:32   ` Markus Armbruster
2021-02-24 22:24     ` John Snow
2021-02-25 12:07       ` Markus Armbruster
2021-02-25 22:10         ` John Snow
2021-02-23  0:34 ` [PATCH v3 08/16] qapi/expr.py: add type hint annotations John Snow
2021-02-24 15:27   ` Markus Armbruster
2021-02-24 22:30     ` John Snow
2021-02-25 12:08       ` Markus Armbruster
2021-02-25 13:56   ` Markus Armbruster
2021-02-25 20:54     ` John Snow
2021-03-02  5:29       ` Markus Armbruster
2021-02-23  0:34 ` [PATCH v3 09/16] qapi/expr.py: Consolidate check_if_str calls in check_if John Snow
2021-02-25 14:23   ` Markus Armbruster
2021-02-25 21:34     ` John Snow
2021-03-02  5:57       ` Markus Armbruster
2021-02-23  0:34 ` [PATCH v3 10/16] qapi/expr.py: Remove single-letter variable John Snow
2021-02-25 14:03   ` Markus Armbruster
2021-02-25 21:56     ` John Snow
2021-02-23  0:34 ` [PATCH v3 11/16] qapi/expr.py: enable pylint checks John Snow
2021-02-23  0:34 ` [PATCH v3 12/16] qapi/expr.py: Add docstrings John Snow
2021-02-23  0:34 ` [PATCH v3 13/16] qapi/expr.py: Modify check_keys to accept any Collection John Snow
2021-02-25 15:41   ` Markus Armbruster
2021-02-23  0:34 ` [PATCH v3 14/16] qapi/expr.py: Use tuples instead of lists for static data John Snow
2021-02-23  0:34 ` [PATCH v3 15/16] qapi/expr.py: move related checks inside check_xxx functions John Snow
2021-02-25 15:28   ` Markus Armbruster
2021-03-25  5:17     ` John Snow
2021-03-25 13:28       ` Markus Armbruster
2021-02-23  0:34 ` [PATCH v3 16/16] qapi/expr.py: Use an expression checker dispatch table John Snow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dbae4ad0-1d29-a635-8142-84bd104f8907@redhat.com \
    --to=jsnow@redhat.com \
    --cc=armbru@redhat.com \
    --cc=crosa@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=michael.roth@amd.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).