Try to avoid adding repeated words either on the
same line or consecutive comment lines in a block

e.g.:

duplicated word in comment block

        /*
         * this is a comment block where the last word of the previous
         * previous line is also the first word of the next line
         */

and simple duplication

        /* test this this again */

Inspired-by: Randy Dunlap (rdun...@infradead.org>
Signed-off-by: Joe Perches <j...@perches.com>
---
 scripts/checkpatch.pl | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index e9fde28eb0de..c6ef76b72bf3 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -591,6 +591,8 @@ our @mode_permission_funcs = (
        ["__ATTR", 2],
 );
 
+my $word_pattern = '\b[A-Z]?[a-z]{2,}\b';
+
 #Create a search pattern for all these functions to speed up a loop below
 our $mode_perms_search = "";
 foreach my $entry (@mode_permission_funcs) {
@@ -3340,6 +3342,42 @@ sub process {
                        }
                }
 
+# check for repeated words separated by a single space
+               if ($rawline =~ /^\+/) {
+                       while ($rawline =~ /\b($word_pattern) 
(?=($word_pattern))/g) {
+
+                               my $first = $1;
+                               my $second = $2;
+
+                               if ($first =~ /(?:struct|union|enum)/) {
+                                       pos($rawline) += length($first) + 
length($second) + 1;
+                                       next;
+                               }
+
+                               next if ($first ne $second);
+                               next if ($first eq 'long');
+
+                               if (WARN("REPEATED_WORD",
+                                        "Possible repeated word: '$first'\n" . 
$herecurr) &&
+                                   $fix) {
+                                       $fixed[$fixlinenr] =~ s/\b$first 
$second\b/$first/;
+                               }
+                       }
+
+                       # if it's a repeated word on consecutive lines in a 
comment block
+                       if ($prevline =~ /$;+\s*$/ &&
+                           $prevrawline =~ /($word_pattern)\s*$/) {
+                               my $last_word = $1;
+                               if ($rawline =~ /^\+\s*\*\s*$last_word /) {
+                                       if (WARN("REPEATED_WORD",
+                                                "Possible repeated word: 
'$last_word'\n" . $hereprev) &&
+                                           $fix) {
+                                               $fixed[$fixlinenr] =~ 
s/(\+\s*\*\s*)$last_word /$1/;
+                                       }
+                               }
+                       }
+               }
+
 # check for space before tabs.
                if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
                        my $herevet = "$here\n" . cat_vet($rawline) . "\n";


Reply via email to