[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 07/22] qapi/parser: assert object keys are strings
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 07/22] qapi/parser: assert object keys are strings |
Date: |
Tue, 27 Apr 2021 08:13:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
John Snow <jsnow@redhat.com> writes:
> On 4/25/21 3:27 AM, Markus Armbruster wrote:
>> John Snow <jsnow@redhat.com> writes:
>>
>>> The single quote token implies the value is a string. Assert this to be
>>> the case.
>>>
>>> Signed-off-by: John Snow <jsnow@redhat.com>
>>> ---
>>> scripts/qapi/parser.py | 2 ++
>>> 1 file changed, 2 insertions(+)
>>>
>>> diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
>>> index 6b443b1247e..8d1fe0ddda5 100644
>>> --- a/scripts/qapi/parser.py
>>> +++ b/scripts/qapi/parser.py
>>> @@ -246,6 +246,8 @@ def get_members(self):
>>> raise QAPIParseError(self, "expected string or '}'")
>>> while True:
>>> key = self.val
>>> + assert isinstance(key, str) # Guaranteed by tok == "'"
>>> +
>>> self.accept()
>>> if self.tok != ':':
>>> raise QAPIParseError(self, "expected ':'")
>>
>> The assertion is correct, but I wonder why mypy needs it. Can you help?
>>
>
> The lexer value can also be True/False (Maybe None? I forget) based on
Yes, None for tokens like '{'.
> the Token returned. Here, since the token was the single quote, we know
> that value must be a string.
>
> Mypy has no insight into the correlation between the Token itself and
> the token value, because that relationship is not expressed via the type
> system.
I understand that mypy can't prove implications like if self.tok == "'",
then self.val is a str.
What I'm curious about is why key needs to be known to be str here.
Hmm, is it so return expr type-checks once you add -> OrderedDict[str,
object] to the function?
- Re: [PATCH 09/22] qapi: add match_nofail helper, (continued)
[PATCH 07/22] qapi/parser: assert object keys are strings, John Snow, 2021/04/21
[PATCH 12/22] qapi/parser: add type hint annotations, John Snow, 2021/04/21
[PATCH 02/22] qapi/source: [RFC] add "with_column" contextmanager, John Snow, 2021/04/21
[PATCH 11/22] qapi/parser: Rework _check_pragma_list_of_str as a TypeGuard, John Snow, 2021/04/21