Skip to contentSkip to conversation

checkpatch: fix TYPO_SPELLING check for words with apostrophe

PATCH In review Dwaipayan Ray 2 participants 3 messages Dec 1, 2020 Checkpatch

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 checkpatch: fix TYPO_SPELLING check for words with apostrophe

checkpatch reports a false TYPO_SPELLING warning for some words containing an apostrophe when run with --codespell option.

A false positive is "doesn't". Occurrence of the word causes checkpatch to emit the following warning:

"WARNING: 'doesn'' may be misspelled - perhaps 'doesn't'?"

Modify the regex pattern to be more in line with the codespell default word matching regex. This fixes the word capture and avoids the false warning.

In addition, highlight the misspelled word location by adding a caret below the word.

---
Changes in v3:
- Highlight misspelled word location using a caret

Changes in v2:
- Use the default codespell word regex.
- Modify commit message to specify --codespell usage

 scripts/checkpatch.pl | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
scripts/checkpatch.pl +5 -2
index 3c86ea737e9c..e8c1ed0b1fad 100755
@@ -3106,15 +3106,18 @@ sub process {
 # Check for various typo / spelling mistakes
 		if (defined($misspellings) &&
 		    ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {
-			while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:\b|$|[^a-z@])/gi) {
+			while ($rawline =~ /(?:^|[^\w\-'`])($misspellings)(?:[^\w\-'`]|$)/gi) {
 				my $typo = $1;
+				my $blank = copy_spacing($rawline);
+				my $ptr = substr($blank, 0, $-[1]) . "^";
+				my $hereptr = "$hereline$ptr\n";
 				my $typo_fix = $spelling_fix{lc($typo)};
 				$typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);
 				$typo_fix = uc($typo_fix) if ($typo =~ /^[A-Z]+$/);
 				my $msg_level = \&WARN;
 				$msg_level = \&CHK if ($file);
 				if (&{$msg_level}("TYPO_SPELLING",
-						  "'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) &&
+						  "'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $hereptr) &&
 				    $fix) {
 					$fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($typo)($|[^A-Za-z@])/$1$typo_fix$3/;
 				}
Signature · 6 lines
2.27.0

_______________________________________________
Linux-kernel-mentees mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
maintainer Acked-by on v3 1/1
#1 lore raw
Quoted 2 lines · Dwaipayan Ray

checkpatch reports a false TYPO_SPELLING warning for some words containing an apostrophe when run with --codespell option.

Thanks.

Quoted 49 lines

A false positive is "doesn't". Occurrence of the word causes checkpatch to emit the following warning:

"WARNING: 'doesn'' may be misspelled - perhaps 'doesn't'?"

Modify the regex pattern to be more in line with the codespell default word matching regex. This fixes the word capture and avoids the false warning.

In addition, highlight the misspelled word location by adding a caret below the word.

---
Changes in v3:
- Highlight misspelled word location using a caret

Changes in v2:
- Use the default codespell word regex.
- Modify commit message to specify --codespell usage

 scripts/checkpatch.pl | 7 +++++--

 1 file changed, 5 insertions(+), 2 deletions(-)
scripts/checkpatch.pl +0 -0
index 3c86ea737e9c..e8c1ed0b1fad 100755
@@ -3106,15 +3106,18 @@ sub process {
  # Check for various typo / spelling mistakes

  if (defined($misspellings) && ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {

scripts/checkpatch.pl +1 -1
-			while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:\b|$|[^a-z@])/gi) {
+			while ($rawline =~ /(?:^|[^\w\-'`])($misspellings)(?:[^\w\-'`]|$)/gi) {

  my $typo = $1;

scripts/checkpatch.pl +3 -0
+				my $blank = copy_spacing($rawline);
+				my $ptr = substr($blank, 0, $-[1]) . "^";
+				my $hereptr = "$hereline$ptr\n";

  my $typo_fix = $spelling_fix{lc($typo)}; $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/); $typo_fix = uc($typo_fix) if ($typo =~ /^[A-Z]+$/); my $msg_level = \&WARN;
  $msg_level = \&CHK if ($file);
  if (&{$msg_level}("TYPO_SPELLING",

scripts/checkpatch.pl +1 -1
-						  "'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $herecurr) &&
+						  "'$typo' may be misspelled - perhaps '$typo_fix'?\n" . $hereptr) &&
Quoted 3 lines

  $fix) {
  $fixed[$fixlinenr] =~ s/(^|[^A-Za-z@])($typo)($|[^A-Za-z@])/$1$typo_fix$3/; }

_______________________________________________
Linux-kernel-mentees mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

maintainer
#2 lore raw
Quoted 3 lines · Joe Perches
Quoted 2 lines · Dwaipayan Ray

checkpatch reports a false TYPO_SPELLING warning for some words containing an apostrophe when run with --codespell option.

Hey Andrew. If Dwaipayan doesn't mind, can you update this when you apply it to extend the length of the caret printed?

Quoted 1 line

scripts/checkpatch.pl

Quoted 1 line
scripts/checkpatch.pl +0 -0

[]

Quoted 9 lines

scripts/checkpatch.pl sub process { · line 3112

Quoted 9 lines
scripts/checkpatch.pl +0 -0
@@ -3106,15 +3106,18 @@ sub process {
  # Check for various typo / spelling mistakes

  if (defined($misspellings) && ($in_commit_log || $line =~ /^(?:\+|Subject:)/i)) {

scripts/checkpatch.pl +1 -1
-			while ($rawline =~ /(?:^|[^a-z@])($misspellings)(?:\b|$|[^a-z@])/gi) {
+			while ($rawline =~ /(?:^|[^\w\-'`])($misspellings)(?:[^\w\-'`]|$)/gi) {

  my $typo = $1;

scripts/checkpatch.pl +2 -0
+				my $blank = copy_spacing($rawline);
+				my $ptr = substr($blank, 0, $-[1]) . "^";

Changing this to:

				my $ptr = substr($blank, 0, $-[1]) . "^" x length($typo);

makes the matched misspelling more obvious

Thanks, Joe

_______________________________________________
Linux-kernel-mentees mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees