[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 05/22] qapi/parser: Assert lexer value is a string
From: |
Markus Armbruster |
Subject: |
Re: [PATCH 05/22] qapi/parser: Assert lexer value is a string |
Date: |
Tue, 27 Apr 2021 14:30:49 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) |
John Snow <jsnow@redhat.com> writes:
> On 4/24/21 4:33 AM, Markus Armbruster wrote:
>> The second operand of assert provides no additional information. Please
>> drop it.
>
> I don't agree with "no additional information", strictly.
>
> I left you a comment on gitlab before you started reviewing on-list.
> What I wrote there:
>
> "Markus: I know you're not a fan of these, but I wanted a suggestion on
> how to explain why this must be true in case it wasn't obvious to
> someone else in the future."
But the second operand doesn't explain anything. Look:
diff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py
index f519518075e..c75434e75a5 100644
--- a/scripts/qapi/parser.py
+++ b/scripts/qapi/parser.py
@@ -303,6 +303,7 @@ def get_doc(self, info):
cur_doc = QAPIDoc(self, info)
self.accept(False)
while self.tok == '#':
+ assert isinstance(self.val, str), "Expected str value"
if self.val.startswith('##'):
# End of doc comment
if self.val != '##':
The second operand paraphrases the first one in prose rather than code.
An actual *explanation* would instead tell me why the first operand must
be true.
To do that, I'd point to self.accept()'s postcondition. Which
(informally) is
self.tok in ('#', '{', ... )
and self.tok == '#' implies self.val is a str
and self.tok == '{' implies self.val is None
...
I believe this is required working knowledge for understanding the
parser. Your PATCH 16 puts it in a doc string, so readers don't have to
extract it from code. Makes sense.
It's not going to fit into a workable second operand here, I'm afraid.
I assume you need this assertion for mypy. If yes, let's get the job
done with minimal fuss. If no, please drop the assertion entirely.
- [PATCH 04/22] qapi/parser: factor parsing routine into method, (continued)
- [PATCH 04/22] qapi/parser: factor parsing routine into method, John Snow, 2021/04/21
- [PATCH 08/22] qapi/parser: Use @staticmethod where appropriate, John Snow, 2021/04/21
- [PATCH 06/22] qapi/parser: assert get_expr returns object in outer loop, John Snow, 2021/04/21
- [PATCH 09/22] qapi: add match_nofail helper, John Snow, 2021/04/21
- [PATCH 05/22] qapi/parser: Assert lexer value is a string, John Snow, 2021/04/21
[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