From patchwork Sun Apr 1 15:06:53 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aaron Conole X-Patchwork-Id: 894019 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=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com 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 40DdxM5wRFz9ryr for ; Mon, 2 Apr 2018 01:07:02 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id DC263E43; Sun, 1 Apr 2018 15:06:59 +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 63EE4E40 for ; Sun, 1 Apr 2018 15:06:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mx1.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id DC63F607 for ; Sun, 1 Apr 2018 15:06:58 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3240D722DE; Sun, 1 Apr 2018 15:06:58 +0000 (UTC) Received: from dhcp-25.97.bos.redhat.com (ovpn-120-201.rdu2.redhat.com [10.10.120.201]) by smtp.corp.redhat.com (Postfix) with ESMTP id D1F30215CDC6; Sun, 1 Apr 2018 15:06:57 +0000 (UTC) From: Aaron Conole To: dev@openvswitch.org Date: Sun, 1 Apr 2018 11:06:53 -0400 Message-Id: <20180401150654.5941-3-aconole@redhat.com> In-Reply-To: <20180401150654.5941-1-aconole@redhat.com> References: <20180401150654.5941-1-aconole@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Sun, 01 Apr 2018 15:06:58 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.2]); Sun, 01 Apr 2018 15:06:58 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'aconole@redhat.com' RCPT:'' X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH v2 2/3] checkpatch: filter comment contents 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 For the infix operator whitespace checks, some of these operators are used within comments. In those cases, it probably doesn't make sense to warn about whitespacing. There may be other checks that could use this kind of filter, but that can wait for a future commit (and someone ambitious enough to test each case). Signed-off-by: Aaron Conole --- utilities/checkpatch.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py index 2bc34db62..5ed85ac15 100755 --- a/utilities/checkpatch.py +++ b/utilities/checkpatch.py @@ -233,6 +233,60 @@ def has_xxx_mark(line): return __regex_has_xxx_mark.match(line) is not None +def filter_comments(current_line): + """remove all of the c-style comments in a line""" + STATE_NORMAL = 0 + STATE_COMMENT_SLASH = 1 + STATE_COMMENT_CONTENTS = 3 + STATE_COMMENT_END_SLASH = 4 + + state = STATE_NORMAL + sanitized_line = '' + check_state = STATE_NORMAL + only_whitespace = True + + for c in current_line: + if c == '/': + if state == STATE_NORMAL: + state = STATE_COMMENT_SLASH + elif state == STATE_COMMENT_SLASH: + # This is for c++ style comments. We will warn later + return sanitized_line[:1] + elif state == STATE_COMMENT_END_SLASH: + c = '' + state = STATE_NORMAL + elif c == '*': + if only_whitespace: + # just assume this is a continuation from the previous line + # as a comment + state = STATE_COMMENT_END_SLASH + elif state == STATE_COMMENT_SLASH: + state = STATE_COMMENT_CONTENTS + sanitized_line = sanitized_line[:-1] + elif state == STATE_COMMENT_CONTENTS: + state = STATE_COMMENT_END_SLASH + elif state == STATE_COMMENT_END_SLASH: + # Need to re-introduce the star from the previous state, since + # it may have been clipped by the state check below. + c = '*' + c + state = STATE_COMMENT_CONTENTS + elif state == STATE_COMMENT_SLASH: + # Need to re-introduce the slash from the previous state, since + # it may have been clipped by the state check below. + c = '/' + c + state = STATE_NORMAL + + if state != check_state: + c = '' + + if not c.isspace(): + only_whitespace = False + + sanitized_line += c + + return sanitized_line + + checks = [ {'regex': None, 'match_name': @@ -315,7 +369,7 @@ checks += [ def regex_operator_factory(operator): regex = re.compile(r'^[^#][^"\']*[^ "]%s[^ "\'][^"]*' % operator) - return lambda x: regex.search(x) is not None + return lambda x: regex.search(filter_comments(x)) is not None infix_operators = \