Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp2433801pxu; Sat, 28 Nov 2020 14:01:07 -0800 (PST) X-Google-Smtp-Source: ABdhPJyYmRTIFapiAzrwKCkMxbAHsMSiFTIbQ8tpT9REDaNXXnTYicDyapmFy9zD10qVrSZNedaN X-Received: by 2002:a17:907:2166:: with SMTP id rl6mr14044806ejb.61.1606600866799; Sat, 28 Nov 2020 14:01:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606600866; cv=none; d=google.com; s=arc-20160816; b=zB4YUzHvp6QuWdiqkWVvBIVD5Y+RBvTHufpna4Mam6NA0qzcVjx5RW7nR0i+Dmc0er 1Z7/uB3WSuBrMAXIXixsvFN+FPQrHwFWt4aCelbZaQS3QVU5M5wBxIjWHMUGfuYhR/gR BcGmGmtXS8a67fyf63oZicOCaOPEn3Wlb9F9wEAqyGsk4Wy6UX9SOWoOHsaOnn3feMuo ziL7ekAflygXAkuNnMad8xUWozMDIPSta4jzLo82yNWs/63dJwghtozAKPcLABMVWEHm jkynOkx1gdJmYGjjiuPOm2oBe5zYgocUO8ZIBZ8y93Lk6ou4CqQQX/WQW9V0Bywtln27 UZiQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id; bh=bavA+IQssXStJvbd9MCZx725TlCFo19VTro0ta1fa50=; b=aVFygRz0zbxchIIQTWNw+UHdXG0kd8KqiJvCAhEjwmf15+DfbxyooUpLdDa7q4v5Th tSsYfc8KNWy2TcR8lCW3tZQ30/+y1w707+RwZ3PhJWTTP4rOelIUS/QAOyasTh3aOSgd j1d6mZNHymQ5h2iJOfs93XEFXS/f6DLIfsE/4matDmR91TRSZ0QkLu98lOhV/OFpvtI2 cZMBu49kekLn31YOviPCWt8uWygYqjQrohHmKC/Q8I3D43iQzC3zQZ3RtGk0ULmCv1zj 9h/JRbYUgG8yMFQGN4SMfrHQclrebo8rRt5yMHG8akzriSQ+bzVjffWZw1qeTP/jlj0j vamA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c6si8160962ejr.584.2020.11.28.14.00.43; Sat, 28 Nov 2020 14:01:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391262AbgK1V4U (ORCPT + 99 others); Sat, 28 Nov 2020 16:56:20 -0500 Received: from smtprelay0210.hostedemail.com ([216.40.44.210]:53708 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2387750AbgK1U62 (ORCPT ); Sat, 28 Nov 2020 15:58:28 -0500 Received: from filter.hostedemail.com (clb03-v110.bra.tucows.net [216.40.38.60]) by smtprelay03.hostedemail.com (Postfix) with ESMTP id 715D6837F24F; Sat, 28 Nov 2020 20:58:00 +0000 (UTC) X-Session-Marker: 6A6F6540706572636865732E636F6D X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,joe@perches.com,,RULES_HIT:41:355:379:599:800:960:968:973:982:988:989:1260:1277:1311:1313:1314:1345:1359:1437:1515:1516:1518:1535:1544:1593:1594:1605:1711:1730:1747:1777:1792:2198:2199:2393:2559:2562:2828:3138:3139:3140:3141:3142:3622:3653:3865:3866:3867:3868:3870:3871:3874:4321:4362:5007:6120:7514:7875:7901:7903:8957:10004:10848:11026:11232:11473:11658:11914:12043:12291:12297:12438:12555:12683:12740:12895:12986:13095:13255:13439:13894:14181:14659:14721:21080:21212:21324:21433:21451:21611:21627:21660:21990:30030:30034:30054:30070:30091,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:2,LUA_SUMMARY:none X-HE-Tag: wax38_2617ef727393 X-Filterd-Recvd-Size: 5612 Received: from XPS-9350.home (unknown [47.151.128.180]) (Authenticated sender: joe@perches.com) by omf04.hostedemail.com (Postfix) with ESMTPA; Sat, 28 Nov 2020 20:57:59 +0000 (UTC) Message-ID: Subject: Re: [PATCH v6] checkpatch: add fix and improve warning msg for non-standard signature From: Joe Perches To: Aditya Srivastava , Andrew Morton Cc: lukas.bulwahn@gmail.com, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linuxfoundation.org Date: Sat, 28 Nov 2020 12:57:58 -0800 In-Reply-To: <20201128204333.7054-1-yashsri421@gmail.com> References: <20201128204333.7054-1-yashsri421@gmail.com> Content-Type: text/plain; charset="ISO-8859-1" User-Agent: Evolution 3.38.1-1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 2020-11-29 at 02:13 +0530, Aditya Srivastava wrote: > Currently checkpatch warns for BAD_SIGN_OFF on non-standard signature > styles. Thanks. Acked-by: Joe Perches > A large number of these warnings occur because of typo mistakes in > signature tags. An evaluation over v4.13..v5.8 showed that out of 539 > warnings due to non-standard signatures, 87 are due to typo mistakes. > > Following are the standard signature tags which are often incorrectly > used, along with their individual counts of incorrect use (over > v4.13..v5.8): > > ?Reviewed-by: 42 > ?Signed-off-by: 25 > ?Reported-by: 6 > ?Acked-by: 4 > ?Tested-by: 4 > ?Suggested-by: 4 > > Provide a fix by calculating levenshtein distance for the signature tag > with all the standard signatures and suggest a fix with a signature, whose > edit distance is less than or equal to 2 with the misspelled signature. > > Out of the 86 mispelled signatures fixed with this approach, 85 were > found to be good corrections and 1 was bad correction. > > Following was found to be a bad correction: > ?Tweeted-by (count: 1) => Tested-by > > Signed-off-by: Aditya Srivastava > --- > applies on next-20201120 > > changes in v2: modify commit message: replace specific example with overall evaluation, minor changes > > changes in v3: summarize commit message > > changes in v4: improve commit message; remove signature suggestions of small length (ie 'cc' and 'to') > > changes in v5: modify coding styles: improve function names, whitespaces > > changes in v6: Simplify foreach loop; change standard signature tag values to normal ucfirst; modify warning message > > ?scripts/checkpatch.pl | 71 +++++++++++++++++++++++++++++++++++++++++-- > ?1 file changed, 69 insertions(+), 2 deletions(-) > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > index fdfd5ec09be6..4a026926139f 100755 > --- a/scripts/checkpatch.pl > +++ b/scripts/checkpatch.pl > @@ -506,6 +506,64 @@ our $signature_tags = qr{(?xi: > ? Cc: > ?)}; > ? > > +sub edit_distance_min { > + my (@arr) = @_; > + my $len = scalar @arr; > + if ((scalar @arr) < 1) { > + # if underflow, return > + return; > + } > + my $min = $arr[0]; > + for my $i (0 .. ($len-1)) { > + if ($arr[$i] < $min) { > + $min = $arr[$i]; > + } > + } > + return $min; > +} > + > +sub get_edit_distance { > + my ($str1, $str2) = @_; > + $str1 = lc($str1); > + $str2 = lc($str2); > + $str1 =~ s/-//g; > + $str2 =~ s/-//g; > + my $len1 = length($str1); > + my $len2 = length($str2); > + # two dimensional array storing minimum edit distance > + my @distance; > + for my $i (0 .. $len1) { > + for my $j (0 .. $len2) { > + if ($i == 0) { > + $distance[$i][$j] = $j; > + } elsif ($j == 0) { > + $distance[$i][$j] = $i; > + } elsif (substr($str1, $i-1, 1) eq substr($str2, $j-1, 1)) { > + $distance[$i][$j] = $distance[$i - 1][$j - 1]; > + } else { > + my $dist1 = $distance[$i][$j - 1]; #insert distance > + my $dist2 = $distance[$i - 1][$j]; # remove > + my $dist3 = $distance[$i - 1][$j - 1]; #replace > + $distance[$i][$j] = 1 + edit_distance_min($dist1, $dist2, $dist3); > + } > + } > + } > + return $distance[$len1][$len2]; > +} > + > +sub find_standard_signature { > + my ($sign_off) = @_; > + my @standard_signature_tags = ( > + 'Signed-off-by:', 'Co-developed-by:', 'Acked-by:', 'Tested-by:', > + 'Reviewed-by:', 'Reported-by:', 'Suggested-by:' > + ); > + foreach my $signature (@standard_signature_tags) { > + return $signature if (get_edit_distance($sign_off, $signature) <= 2); > + } > + > + return ""; > +} > + > ?our @typeListMisordered = ( > ? qr{char\s+(?:un)?signed}, > ? qr{int\s+(?:(?:un)?signed\s+)?short\s}, > @@ -2773,8 +2831,17 @@ sub process { > ? my $ucfirst_sign_off = ucfirst(lc($sign_off)); > ? > > ? if ($sign_off !~ /$signature_tags/) { > - WARN("BAD_SIGN_OFF", > - "Non-standard signature: $sign_off\n" . $herecurr); > + my $suggested_signature = find_standard_signature($sign_off); > + if ($suggested_signature eq "") { > + WARN("BAD_SIGN_OFF", > + "Non-standard signature: $sign_off\n" . $herecurr); > + } else { > + if (WARN("BAD_SIGN_OFF", > + "Non-standard signature: '$sign_off' - perhaps '$suggested_signature'?\n" . $herecurr) && > + $fix) { > + $fixed[$fixlinenr] =~ s/$sign_off/$suggested_signature/; > + } > + } > ? } > ? if (defined $space_before && $space_before ne "") { > ? if (WARN("BAD_SIGN_OFF",