Re: [PATCH v3] checkpatch: add new exception to repeated word check

From: Joe Perches
Date: Sat Oct 17 2020 - 03:28:42 EST


On Sat, 2020-10-17 at 11:32 +0530, Dwaipayan Ray wrote:
> > Why include a + character here?
> >
> Hi,
> I tried it without + first, but then lines like
> "The the repeated word."
> didn't register a warning.
>
> I think checkpatch adds a + to the line when used on
> files. Am not sure but my $rawline was:
> +The the repeated word.

The + is the first character of an added line in a
patch.

That's different from lines in a commit message so
there needs to be an additional mechanism to strip
the leading + when not !$in_commit_log.

Add:
pos($rawline) = 1 if (!$in_commit_log);

and test the start position too

---
scripts/checkpatch.pl | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index fab38b493cef..99563b3d5a3e 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -3050,19 +3050,28 @@ sub process {

# check for repeated words separated by a single space
if ($rawline =~ /^\+/ || $in_commit_log) {
+ pos($rawline) = 1 if (!$in_commit_log);
while ($rawline =~ /\b($word_pattern) (?=($word_pattern))/g) {
-
my $first = $1;
my $second = $2;
+ my $start_pos = $-[1];
+ my $end_pos = $+[2];

if ($first =~ /(?:struct|union|enum)/) {
pos($rawline) += length($first) + length($second) + 1;
next;
}

- next if ($first ne $second);
+ next if (lc($first) ne lc($second));
next if ($first eq 'long');

+ my $start_char = "";
+ my $end_char = "";
+ $start_char = substr($rawline, $start_pos - 1, 1) if ($start_pos > ($in_commit_log ? 0 : 1));
+ $end_char = substr($rawline, $end_pos, 1) if (length($rawline) > $end_pos);
+ next if ($start_char =~ /^\S$/);
+ next if ($end_char !~ /^[\.\,\s]?$/);
+
if (WARN("REPEATED_WORD",
"Possible repeated word: '$first'\n" . $herecurr) &&
$fix) {