[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v6 11/27] qapi: improve reporting of unknown or
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v6 11/27] qapi: improve reporting of unknown or missing keys |
Date: |
Wed, 05 Dec 2018 17:38:50 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Marc-André Lureau <address@hidden> writes:
> Report the set of missing or unknown keys. And give a hint about the
> accepted keys.
>
> Signed-off-by: Marc-André Lureau <address@hidden>
> ---
> scripts/qapi/common.py | 23 +++++++++++++++--------
> tests/qapi-schema/alternate-base.err | 1 +
> tests/qapi-schema/double-type.err | 1 +
> tests/qapi-schema/unknown-expr-key.err | 3 ++-
> tests/qapi-schema/unknown-expr-key.json | 2 +-
> 5 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
> index 8313c478c4..cf8dab2866 100644
> --- a/scripts/qapi/common.py
> +++ b/scripts/qapi/common.py
> @@ -874,14 +874,21 @@ def check_struct(expr, info):
>
>
> def check_known_keys(info, source, keys, required, optional):
> - for key in keys:
> - if key not in required and key not in optional:
> - raise QAPISemError(info, "Unknown key '%s' in %s" % (key,
> source))
> -
> - for key in required:
> - if key not in keys:
> - raise QAPISemError(info, "Key '%s' is missing from %s"
> - % (key, source))
> +
> + def pprint(elems):
> + return ', '.join("'" + e + "'" for e in sorted(elems))
> +
> + missing = set(required) - set(keys)
> + if missing:
> + raise QAPISemError(info, "Key%s %s %s missing from %s"
> + % ('s' if len(missing) > 1 else '',
> pprint(missing),
> + 'are' if len(missing) > 1 else 'is', source))
> + allowed = set(required + optional)
> + unknown = set(keys) - allowed
> + if unknown:
> + raise QAPISemError(info, "Unknown key%s %s in %s\nValid keys are %s."
> + % ('s' if len(unknown) > 1 else '',
> pprint(unknown),
> + source, pprint(allowed)))
>
>
> def check_keys(expr_elem, meta, required, optional=[]):
I wouldn't habe bothered, but since you already wrote it...
> diff --git a/tests/qapi-schema/alternate-base.err
> b/tests/qapi-schema/alternate-base.err
> index 30d8a34373..ebe05bc898 100644
> --- a/tests/qapi-schema/alternate-base.err
> +++ b/tests/qapi-schema/alternate-base.err
> @@ -1 +1,2 @@
> tests/qapi-schema/alternate-base.json:4: Unknown key 'base' in alternate
> 'Alt'
> +Valid keys are 'alternate', 'data', 'if'.
> diff --git a/tests/qapi-schema/double-type.err
> b/tests/qapi-schema/double-type.err
> index f9613c6d6b..799193dba1 100644
> --- a/tests/qapi-schema/double-type.err
> +++ b/tests/qapi-schema/double-type.err
> @@ -1 +1,2 @@
> tests/qapi-schema/double-type.json:2: Unknown key 'command' in struct 'bar'
> +Valid keys are 'base', 'data', 'if', 'struct'.
The error message is just as suboptimal as before in this case, and the
hint doesn't really help. Can't say I care.
> diff --git a/tests/qapi-schema/unknown-expr-key.err
> b/tests/qapi-schema/unknown-expr-key.err
> index 12f5ed5b43..83b83121e0 100644
> --- a/tests/qapi-schema/unknown-expr-key.err
> +++ b/tests/qapi-schema/unknown-expr-key.err
> @@ -1 +1,2 @@
> -tests/qapi-schema/unknown-expr-key.json:2: Unknown key 'bogus' in struct
> 'bar'
> +tests/qapi-schema/unknown-expr-key.json:2: Unknown keys 'bogus', 'foo' in
> struct 'bar'
> +Valid keys are 'base', 'data', 'if', 'struct'.
> diff --git a/tests/qapi-schema/unknown-expr-key.json
> b/tests/qapi-schema/unknown-expr-key.json
> index 3b2be00cc4..5bcb8efd1d 100644
> --- a/tests/qapi-schema/unknown-expr-key.json
> +++ b/tests/qapi-schema/unknown-expr-key.json
> @@ -1,2 +1,2 @@
> # we reject an expression with unknown top-level keys
> -{ 'struct': 'bar', 'data': { 'string': 'str'}, 'bogus': { } }
> +{ 'struct': 'bar', 'data': { 'string': 'str'}, 'bogus': { }, 'foo': { } }
Let's call the second unknown key 'phony'.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [PATCH v6 11/27] qapi: improve reporting of unknown or missing keys,
Markus Armbruster <=