mypy can only narrow the type of `Mapping[str, ...].keys() & Set[str]` to `AbstractSet[str]` and not a `Set[str]`. As a result, if the type of an expression is changed to a Mapping[], mypy is unsure if the .pop() is safe.
A forthcoming commit does exactly that, so wrap the expression in a set() constructor to force the intermediate expression to be resolved as a mutable type. Signed-off-by: John Snow <js...@redhat.com> --- scripts/qapi/expr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py index b56353bdf84..af802367eff 100644 --- a/scripts/qapi/expr.py +++ b/scripts/qapi/expr.py @@ -622,8 +622,8 @@ def check_expr(expr_elem: _JSONObject) -> None: if 'include' in expr: return - metas = expr.keys() & {'enum', 'struct', 'union', 'alternate', - 'command', 'event'} + metas = set(expr.keys() & { + 'enum', 'struct', 'union', 'alternate', 'command', 'event'}) if len(metas) != 1: raise QAPISemError( info, -- 2.39.0