John Snow <js...@redhat.com> writes: > Primarily, this reduces a nesting level of a particularly long > block. It's mostly code movement, but a new docstring is created. > > It also has the effect of creating a fairly convenient "catch point" in > check_exprs for exception handling without making the nesting level even > worse. > > Signed-off-by: John Snow <js...@redhat.com> > > --- > > This patch was originally written as part of my effort to factor out > QAPISourceInfo from this file by having expr.py raise a simple > exception, then catch and wrap it at the higher level. > > This series doesn't do that anymore, but reducing the nesting level > still seemed subjectively nice. It's not crucial.
Drawback: git-blame can't see through the move, and blames *you* for that. > Signed-off-by: John Snow <js...@redhat.com> > --- > scripts/qapi/expr.py | 179 +++++++++++++++++++++++-------------------- > 1 file changed, 95 insertions(+), 84 deletions(-) > > diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py > index 5a1782b57ea..d01543006d8 100644 > --- a/scripts/qapi/expr.py > +++ b/scripts/qapi/expr.py > @@ -595,6 +595,99 @@ def check_event(expr: _JSONObject, info: QAPISourceInfo) > -> None: > check_type(args, info, "'data'", allow_dict=not boxed) > > > +def check_expr(expr_elem: _JSONObject) -> None: > + """ > + Validate and normalize a parsed QAPI schema expression. > + > + :param expr_elem: The parsed expression to normalize and validate. > + > + :raise QAPISemError: When this expression fails validation. > + :return: None, ``expr`` is normalized in-place as needed. ``expr`` is not defined here. Suggest ", the expression is normalized". > + """ > + # Expression > + assert isinstance(expr_elem['expr'], dict) > + for key in expr_elem['expr'].keys(): > + assert isinstance(key, str) > + expr: _JSONObject = expr_elem['expr'] [...]