From patchwork Sat Sep 28 18:39:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Markus Armbruster X-Patchwork-Id: 1168908 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 46gdDs5qvfz9sNk for ; Sun, 29 Sep 2019 04:56:45 +1000 (AEST) Received: from localhost ([::1]:34466 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iEHtb-0007eh-BO for incoming@patchwork.ozlabs.org; Sat, 28 Sep 2019 14:56:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:44085) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1iEHdG-00005Q-EI for qemu-devel@nongnu.org; Sat, 28 Sep 2019 14:39:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1iEHd7-00040L-GC for qemu-devel@nongnu.org; Sat, 28 Sep 2019 14:39:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:54380) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1iEHd7-0003wB-3y for qemu-devel@nongnu.org; Sat, 28 Sep 2019 14:39:41 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E163E18CB8ED for ; Sat, 28 Sep 2019 18:39:39 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-117-142.ams2.redhat.com [10.36.117.142]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8C3825C1D8; Sat, 28 Sep 2019 18:39:39 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 7B4501136423; Sat, 28 Sep 2019 20:39:34 +0200 (CEST) From: Markus Armbruster To: qemu-devel@nongnu.org Subject: [PULL 23/27] qapi: Improve reporting of invalid 'if' further Date: Sat, 28 Sep 2019 20:39:30 +0200 Message-Id: <20190928183934.12459-24-armbru@redhat.com> In-Reply-To: <20190928183934.12459-1-armbru@redhat.com> References: <20190928183934.12459-1-armbru@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.63]); Sat, 28 Sep 2019 18:39:39 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" check_if()'s errors don't point to the offending part of the expression. For instance: tests/qapi-schema/alternate-branch-if-invalid.json:2: 'if' condition ' ' makes no sense Other check_FOO() do, with the help of a @source argument. Make check_if() do that, too. The example above improves to: tests/qapi-schema/alternate-branch-if-invalid.json:2: 'if' condition ' ' of 'data' member 'branch' makes no sense Signed-off-by: Markus Armbruster Message-Id: <20190927134639.4284-23-armbru@redhat.com> Reviewed-by: Eric Blake --- scripts/qapi/common.py | 27 +++++++++++-------- .../alternate-branch-if-invalid.err | 2 +- tests/qapi-schema/bad-if-empty-list.err | 2 +- tests/qapi-schema/bad-if-empty.err | 2 +- tests/qapi-schema/bad-if-list.err | 2 +- tests/qapi-schema/bad-if.err | 2 +- tests/qapi-schema/enum-if-invalid.err | 2 +- tests/qapi-schema/features-if-invalid.err | 2 +- .../qapi-schema/struct-member-if-invalid.err | 2 +- tests/qapi-schema/union-branch-if-invalid.err | 2 +- 10 files changed, 25 insertions(+), 20 deletions(-) diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py index 81c217cd60..4bc8c807aa 100644 --- a/scripts/qapi/common.py +++ b/scripts/qapi/common.py @@ -692,22 +692,27 @@ def check_defn_name_str(name, info, meta): info, "%s name should not end in '%s'" % (meta, name[-4:])) -def check_if(expr, info): +def check_if(expr, info, source): def check_if_str(ifcond, info): if not isinstance(ifcond, str): raise QAPISemError( - info, "'if' condition must be a string or a list of strings") + info, + "'if' condition of %s must be a string or a list of strings" + % source) if ifcond.strip() == '': - raise QAPISemError(info, "'if' condition '%s' makes no sense" - % ifcond) + raise QAPISemError( + info, + "'if' condition '%s' of %s makes no sense" + % (ifcond, source)) ifcond = expr.get('if') if ifcond is None: return if isinstance(ifcond, list): if ifcond == []: - raise QAPISemError(info, "'if' condition [] is useless") + raise QAPISemError( + info, "'if' condition [] of %s is useless" % source) for elt in ifcond: check_if_str(elt, info) else: @@ -752,7 +757,7 @@ def check_type(value, info, source, if c_name(key, False) == 'u' or c_name(key, False).startswith('has_'): raise QAPISemError(info, "%s uses reserved name" % key_source) check_known_keys(arg, info, key_source, ['type'], ['if']) - check_if(arg, info) + check_if(arg, info, key_source) normalize_if(arg) check_type(arg['type'], info, key_source, allow_array=True) @@ -796,7 +801,7 @@ def check_union(expr, info): source = "'data' member '%s'" % key check_name_str(key, info, source) check_known_keys(value, info, source, ['type'], ['if']) - check_if(value, info) + check_if(value, info, source) normalize_if(value) check_type(value['type'], info, source, allow_array=not base) @@ -810,7 +815,7 @@ def check_alternate(expr, info): source = "'data' member '%s'" % key check_name_str(key, info, source) check_known_keys(value, info, source, ['type'], ['if']) - check_if(value, info) + check_if(value, info, source) normalize_if(value) check_type(value['type'], info, source) @@ -834,7 +839,7 @@ def check_enum(expr, info): source = "%s '%s'" % (source, member['name']) check_name_str(member['name'], info, source, enum_member=True, permit_upper=permit_upper) - check_if(member, info) + check_if(member, info, source) normalize_if(member) @@ -856,7 +861,7 @@ def check_struct(expr, info): check_name_is_str(f['name'], info, source) source = "%s '%s'" % (source, f['name']) check_name_str(f['name'], info, source) - check_if(f, info) + check_if(f, info, source) normalize_if(f) @@ -994,7 +999,7 @@ def check_exprs(exprs): assert False, 'unexpected meta type' normalize_if(expr) - check_if(expr, info) + check_if(expr, info, meta) check_flags(expr, info) if doc: diff --git a/tests/qapi-schema/alternate-branch-if-invalid.err b/tests/qapi-schema/alternate-branch-if-invalid.err index 8684829aca..6c68e5a922 100644 --- a/tests/qapi-schema/alternate-branch-if-invalid.err +++ b/tests/qapi-schema/alternate-branch-if-invalid.err @@ -1,2 +1,2 @@ tests/qapi-schema/alternate-branch-if-invalid.json: In alternate 'Alt': -tests/qapi-schema/alternate-branch-if-invalid.json:2: 'if' condition ' ' makes no sense +tests/qapi-schema/alternate-branch-if-invalid.json:2: 'if' condition ' ' of 'data' member 'branch' makes no sense diff --git a/tests/qapi-schema/bad-if-empty-list.err b/tests/qapi-schema/bad-if-empty-list.err index 2218c9279b..517519f500 100644 --- a/tests/qapi-schema/bad-if-empty-list.err +++ b/tests/qapi-schema/bad-if-empty-list.err @@ -1,2 +1,2 @@ tests/qapi-schema/bad-if-empty-list.json: In struct 'TestIfStruct': -tests/qapi-schema/bad-if-empty-list.json:2: 'if' condition [] is useless +tests/qapi-schema/bad-if-empty-list.json:2: 'if' condition [] of struct is useless diff --git a/tests/qapi-schema/bad-if-empty.err b/tests/qapi-schema/bad-if-empty.err index a3fdb3009d..5f1767388e 100644 --- a/tests/qapi-schema/bad-if-empty.err +++ b/tests/qapi-schema/bad-if-empty.err @@ -1,2 +1,2 @@ tests/qapi-schema/bad-if-empty.json: In struct 'TestIfStruct': -tests/qapi-schema/bad-if-empty.json:2: 'if' condition '' makes no sense +tests/qapi-schema/bad-if-empty.json:2: 'if' condition '' of struct makes no sense diff --git a/tests/qapi-schema/bad-if-list.err b/tests/qapi-schema/bad-if-list.err index e03bf0fc3a..e5d72b2f39 100644 --- a/tests/qapi-schema/bad-if-list.err +++ b/tests/qapi-schema/bad-if-list.err @@ -1,2 +1,2 @@ tests/qapi-schema/bad-if-list.json: In struct 'TestIfStruct': -tests/qapi-schema/bad-if-list.json:2: 'if' condition ' ' makes no sense +tests/qapi-schema/bad-if-list.json:2: 'if' condition ' ' of struct makes no sense diff --git a/tests/qapi-schema/bad-if.err b/tests/qapi-schema/bad-if.err index 190216c109..65d8efd7e4 100644 --- a/tests/qapi-schema/bad-if.err +++ b/tests/qapi-schema/bad-if.err @@ -1,2 +1,2 @@ tests/qapi-schema/bad-if.json: In struct 'TestIfStruct': -tests/qapi-schema/bad-if.json:2: 'if' condition must be a string or a list of strings +tests/qapi-schema/bad-if.json:2: 'if' condition of struct must be a string or a list of strings diff --git a/tests/qapi-schema/enum-if-invalid.err b/tests/qapi-schema/enum-if-invalid.err index db9eb45b25..30c1f0e91c 100644 --- a/tests/qapi-schema/enum-if-invalid.err +++ b/tests/qapi-schema/enum-if-invalid.err @@ -1,2 +1,2 @@ tests/qapi-schema/enum-if-invalid.json: In enum 'TestIfEnum': -tests/qapi-schema/enum-if-invalid.json:2: 'if' condition must be a string or a list of strings +tests/qapi-schema/enum-if-invalid.json:2: 'if' condition of 'data' member 'bar' must be a string or a list of strings diff --git a/tests/qapi-schema/features-if-invalid.err b/tests/qapi-schema/features-if-invalid.err index 90f4119ae7..ffb39378af 100644 --- a/tests/qapi-schema/features-if-invalid.err +++ b/tests/qapi-schema/features-if-invalid.err @@ -1,2 +1,2 @@ tests/qapi-schema/features-if-invalid.json: In struct 'Stru': -tests/qapi-schema/features-if-invalid.json:2: 'if' condition must be a string or a list of strings +tests/qapi-schema/features-if-invalid.json:2: 'if' condition of 'features' member 'f' must be a string or a list of strings diff --git a/tests/qapi-schema/struct-member-if-invalid.err b/tests/qapi-schema/struct-member-if-invalid.err index e8ad02b9fc..4c5983674b 100644 --- a/tests/qapi-schema/struct-member-if-invalid.err +++ b/tests/qapi-schema/struct-member-if-invalid.err @@ -1,2 +1,2 @@ tests/qapi-schema/struct-member-if-invalid.json: In struct 'Stru': -tests/qapi-schema/struct-member-if-invalid.json:2: 'if' condition must be a string or a list of strings +tests/qapi-schema/struct-member-if-invalid.json:2: 'if' condition of 'data' member 'member' must be a string or a list of strings diff --git a/tests/qapi-schema/union-branch-if-invalid.err b/tests/qapi-schema/union-branch-if-invalid.err index b49cf9b664..14819bf8b8 100644 --- a/tests/qapi-schema/union-branch-if-invalid.err +++ b/tests/qapi-schema/union-branch-if-invalid.err @@ -1,2 +1,2 @@ tests/qapi-schema/union-branch-if-invalid.json: In union 'Uni': -tests/qapi-schema/union-branch-if-invalid.json:4: 'if' condition '' makes no sense +tests/qapi-schema/union-branch-if-invalid.json:4: 'if' condition '' of 'data' member 'branch1' makes no sense