Skip to contentSkip to conversation

checkpatch: fix TYPO_SPELLING check for words with apostrophe

PATCH Superseded Dwaipayan Ray 2 participants 5 messages Dec 1, 2020 Checkpatch

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 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.

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

 scripts/checkpatch.pl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +1 -1
index 3c86ea737e9c..bd6304f93e0a 100755
@@ -3106,7 +3106,7 @@ 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 $typo_fix = $spelling_fix{lc($typo)};
 				$typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);
Signature · 6 lines
2.27.0

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

scripts/checkpatch.pl

Quoted 24 lines · Dwaipayan Ray

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.

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

 scripts/checkpatch.pl | 2 +-

 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 3109

Quoted 6 lines
scripts/checkpatch.pl +0 -0
@@ -3106,7 +3106,7 @@ 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) {

This regex seems to work well, thanks.

Quoted 1 line

  my $typo = $1;

A trivial improvement might be to highlight the location of the misspelled word with a caret using

				my $blank = copy_spacing($rawline);
				my $ptr = substr($blank, 0, $-[0] + 1) . "^";
				my $hereptr = "$hereline$ptr\n";
Quoted 2 lines

  my $typo_fix = $spelling_fix{lc($typo)}; $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);

and using $hereptr and not $hereline when emitting the message.

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

#2 lore raw
Quoted 41 lines · Joe Perches

scripts/checkpatch.pl

Quoted 24 lines · Dwaipayan Ray

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.

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

 scripts/checkpatch.pl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 3109

Quoted 6 lines
scripts/checkpatch.pl +1 -1
@@ -3106,7 +3106,7 @@ 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) {

This regex seems to work well, thanks.

scripts/checkpatch.pl sub process { · line 3110

Quoted 1 line
scripts/checkpatch.pl +0 -0
                              my $typo = $1;

A trivial improvement might be to highlight the location of the misspelled word with a caret using

Quoted 10 lines
                                my $blank = copy_spacing($rawline);
                                my $ptr = substr($blank, 0, $-[0] + 1) . "^";
                                my $hereptr = "$hereline$ptr\n";

scripts/checkpatch.pl sub process { · line 3112

Quoted 2 lines
scripts/checkpatch.pl +0 -0
                              my $typo_fix = $spelling_fix{lc($typo)};
                              $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);

and using $hereptr and not $hereline when emitting the message.

Sure I will do that.
Is the color highlighting also supported in most systems? Maybe a red colored word would be nice to notice as well.

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

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

scripts/checkpatch.pl

Quoted 24 lines · Dwaipayan Ray

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.

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

 scripts/checkpatch.pl | 2 +-

 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 3109

Quoted 6 lines
scripts/checkpatch.pl +0 -0
@@ -3106,7 +3106,7 @@ 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) {

This regex seems to work well, thanks.

Quoted 1 line

                              my $typo = $1;

A trivial improvement might be to highlight the location of the misspelled word with a caret using

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

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

                              my $typo_fix = $spelling_fix{lc($typo)}; $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);

and using $hereptr and not $hereline when emitting the message.

Sure I will do that.
Is the color highlighting also supported in most systems?

I believe so, yes.

Color is only used when the output is to stdout and not redirected and not otherwise specified on the checkpatch command line.

Quoted 1 line

Maybe a red colored word would be nice to notice as well.

Maybe, but that might make the code around the message output of $hereptr a bit obscure. Presumably the code would not use $hereline but something else new and specific for this message.

The output is done via the report() function so adding optional color for only a portion of the new $hereptr string might be a lot of code.

If you try it, maybe make the misspelled word color match the message level and not just be red. Also the caret line wouldn't have much value with that added color highlighting.

Try it and see what you prefer.

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

#4 lore raw
Quoted 66 lines · Joe Perches
Quoted 45 lines · Dwaipayan Ray
Quoted 44 lines · Joe Perches

scripts/checkpatch.pl

Quoted 24 lines · Dwaipayan Ray

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.

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

 scripts/checkpatch.pl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +0 -0

[]

scripts/checkpatch.pl sub process { · line 3109

Quoted 6 lines
scripts/checkpatch.pl +1 -1
@@ -3106,7 +3106,7 @@ 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) {

This regex seems to work well, thanks.

scripts/checkpatch.pl sub process { · line 3110

Quoted 1 line
scripts/checkpatch.pl +0 -0
                              my $typo = $1;

A trivial improvement might be to highlight the location of the misspelled word with a caret using

                                my $blank = copy_spacing($rawline);
                                my $ptr = substr($blank, 0, $-[0] + 1) . "^";
                                my $hereptr = "$hereline$ptr\n";
Quoted 7 lines
Quoted 5 lines

scripts/checkpatch.pl sub process { · line 3112

Quoted 2 lines
scripts/checkpatch.pl +0 -0
                              my $typo_fix = $spelling_fix{lc($typo)};
                              $typo_fix = ucfirst($typo_fix) if ($typo =~ /^[A-Z]/);

and using $hereptr and not $hereline when emitting the message.

Sure I will do that.
Is the color highlighting also supported in most systems?

I believe so, yes.

Color is only used when the output is to stdout and not redirected and not otherwise specified on the checkpatch command line.

Quoted 1 line

Maybe a red colored word would be nice to notice as well.

Maybe, but that might make the code around the message output of $hereptr a bit obscure. Presumably the code would not use $hereline but something else new and specific for this message.

Quoted 9 lines

The output is done via the report() function so adding optional color for only a portion of the new $hereptr string might be a lot of code.

If you try it, maybe make the misspelled word color match the message level and not just be red. Also the caret line wouldn't have much value with that added color highlighting.

Try it and see what you prefer.

Thanks for your view.
Colors seem to obscure the word even more. The carat one seemed nicer to me visually. I will send in a new version for that.

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