This patch adds a checkpatch.pl warning to detect //-style comments
placed above private Rust items.
Signed-off-by: Arnaud Lecomte <contact@arnaud-lcm.com>
---
Changes in v2:
- Don't trigger a warning when the block of comments above a private rust item
contains at least one doc comment.
- Trigger warning on private macros.
- Link to v1: https://lore.kernel.org/all/20250419212458.105705-1-contact@arnaud-lcm.com/
---
scripts/checkpatch.pl | 56 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 3d22bf863eec..e49857c23034 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1987,6 +1987,41 @@ sub ctx_locate_comment {
chomp($current_comment);
return($current_comment);
}
+
+sub ctx_get_comment_behind_rust_private_item {
+ my ($linenr) = @_;
+ my $start_line = $linenr - 1;
+ my $idx = $start_line;
+
+ # Skip if it's a public Rust item (starts with 'pub')
+ return unless $rawlines[$start_line] !~ /^\+?\s*pub(\s|\([^)]*\)\s)/;
+
+ # Check if it's an empty line
+ return unless $rawlines[$start_line] !~ /^\s*\+?\s*$/;
+
+ # Check if it's a comment
+ return unless $rawlines[$start_line] !~ /^\+?\s*\/\/\/?\/?.*$/;
+
+ # Check if it is a private macro
+ if ($rawlines[$start_line] =~ /^\+?\s*macro_rules!\s+([a-zA-Z_][a-zA-Z0-9_]*|#?[a-zA-Z_][a-zA-Z0-9_]*)\s*(?:\{|$)/ && $idx > 0) {
+ return unless $rawlines[$idx -1] !~ /^\+?\s*#\s*\[\s*macro_export\s*\]\s*$/;
+ } else {
+ # Check if it's a Rust item
+ return unless $rawlines[$start_line] =~ /^\+?\s*\b(fn|struct|const|enum|trait|type|mod|impl|use)\b/;
+ }
+
+ # Walk backwards through non-empty lines
+ $idx--;
+ while ($idx >= 0 && $rawlines[$idx] !~ /^\s*\+?\s*$/) {
+ # Check if is a document comment
+ return unless $rawlines[$idx] !~ m@^\+?\s*///([^/].*)?$@;
+ $idx--;
+ }
+
+ return ($idx+1, $start_line);
+}
+
+
sub ctx_has_comment {
my ($first_line, $end_line) = @_;
my $cmt = ctx_locate_comment($first_line, $end_line);
@@ -2950,6 +2985,27 @@ sub process {
}
}
+# check for incorrect use of `//` instead of `\\\` for doc comments in Rust
+ if ($perl_version_ok && $realfile =~ /\.rs$/) {
+ my ($start_l, $end_l) = ctx_get_comment_behind_rust_private_item($linenr);
+ if (defined($start_l) && defined($end_l)) {
+ for (my $i = $start_l; $i <= $end_l; $i++) {
+ my $comment_line = $rawlines[$i - 1];
+ next unless $comment_line =~ m@^\+//([^/].*)$@;
+ my $comment = $1;
+
+ # Skip obvious non-doc comments
+ next if $comment =~ m@^\s*(?:TODO|FIXME|XXX|NOTE|HACK|SAFETY):?@i;
+ next if $comment =~ m@^\s*[[:punct:]]{2,}@;
+ my $line_issue = $i - 3;
+
+ WARN("POSSIBLE_MISSING_RUST_DOC",
+ "Consider using `///` for private item documentation (line $line_issue)\n" .
+ "$here\n$comment_line");
+ }
+ }
+ }
+
# Check the patch for a From:
if (decode("MIME-Header", $line) =~ /^From:\s*(.*)/) {
$author = $1;
--
2.43.0
© 2016 - 2026 Red Hat, Inc.