From patchwork Wed Aug 9 20:37:50 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Stringer X-Patchwork-Id: 799941 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=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xSNPp1xdVz9rvt for ; Thu, 10 Aug 2017 06:38:06 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 7A4E9C48; Wed, 9 Aug 2017 20:38:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 04F84BE1 for ; Wed, 9 Aug 2017 20:38:01 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from relay3-d.mail.gandi.net (relay3-d.mail.gandi.net [217.70.183.195]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id D08801F2 for ; Wed, 9 Aug 2017 20:38:00 +0000 (UTC) X-Originating-IP: 208.91.1.34 Received: from carno.eng.vmware.com (unknown [208.91.1.34]) (Authenticated sender: joe@ovn.org) by relay3-d.mail.gandi.net (Postfix) with ESMTPSA id 13E25A80CF for ; Wed, 9 Aug 2017 22:37:58 +0200 (CEST) From: Joe Stringer To: dev@openvswitch.org Date: Wed, 9 Aug 2017 13:37:50 -0700 Message-Id: <20170809203752.16886-1-joe@ovn.org> X-Mailer: git-send-email 2.13.3 Subject: [ovs-dev] [PATCH 1/3] checkpatch: Check for infix operator whitespace. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org The 'Expressions' section of the coding style specifies that one space should be on either side of infix binary and ternary operators. This adds a check to checkpatch.py for most of these. The regex won't match if there are speech marks on the line, because the style should not apply to the contents of strings. This check is left at warning level because there isn't a good way to determine whether a line is within a multiline comment or string, so it will occasionally flag such lines which contain hyphenated words. Signed-off-by: Joe Stringer Acked-by: Ben Pfaff --- utilities/checkpatch.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py index 684c8b201d22..8b9ca0f504d3 100755 --- a/utilities/checkpatch.py +++ b/utilities/checkpatch.py @@ -275,6 +275,25 @@ checks += [ for (function_name, description) in std_functions] +def regex_operator_factory(operator): + regex = re.compile(r'^[^#][^"\']*[^ "]%s[^ "\'][^"]*' % operator) + return lambda x: regex.search(x) is not None + + +infix_operators = \ + [re.escape(op) for op in ['/', '%', '<<', '>>', '<=', '>=', '==', '!=', + '^', '|', '&&', '||', '?:', '=', '+=', '-=', '*=', '/=', '%=', + '&=', '^=', '|=', '<<=', '>>=']] \ + + ['[^<" ]<[^=" ]', '[^->" ]>[^=" ]', '[^ !()/"]\*[^/]', '[^ !&()"]&', + '[^" +(]\+[^"+;]', '[^" -(]-[^"->;]', '[^" <>=!^|+\-*/%&]=[^"=]'] +checks += [ + {'regex': '(\.c|\.h)(\.in)?$', 'match_name': None, + 'prereq': lambda x: not is_comment_line(x), + 'check': regex_operator_factory(operator), + 'print': lambda: print_warning("Line lacks whitespace around operator")} + for operator in infix_operators] + + def get_file_type_checks(filename): """Returns the list of checks for a file based on matching the filename against regex."""