checkpatch: allow correctly handle full files on stdin
Subsystems (4)
PATCH 1/1 checkpatch: allow correctly handle full files on stdin
checkpatch does not handle full files well when they are passed on stdin, because it does not know how to treat the text, and whether it is a C file, or a DTS file, or something else, and so it assumes that when it works with stdin it should be a unified diff. For full files it expects to have a file name as an argument and read the contents from disk. Unfortunately this does not well when trying to use checkpatch as an online linter and feed it contents of an editor buffer that have not made it to the disk yet.
To solve the above introduce a new optional argument --stdin-filename=FILE that allows tell checkpatch the kind of file it is dealing with and apply appropriate set of checks and rules to it.
--- Documentation/dev-tools/checkpatch.rst | 4 ++++ scripts/checkpatch.pl | 11 +++++++++++ 2 files changed, 15 insertions(+)
Documentation/dev-tools/checkpatch.rst +4 -0
@@ -68,6 +68,10 @@ Available options: Show the diffed file position instead of the input file position. + - --stdin-filename + + When using stdin, identify the file as FILE. + - -g, --git Treat FILE as a single commit or a git revision range.
scripts/checkpatch.pl +11 -0
@@ -57,6 +57,7 @@ my %ignore_type = (); my @ignore = (); my $help = 0; my $configuration_file = ".checkpatch.conf"; +my $stdin_filename; my $max_line_length = 100; my $ignore_perl_version = 0; my $minimum_perl_version = 5.10.0;
@@ -94,6 +95,7 @@ Options: --emacs emacs compile window format --terse one line per report --showfile emit diffed file position, not input file position + --stdin-filename=FILE when using stdin, identify the file as FILE -g, --git treat FILE as a single commit or git revision range single git commit with: <rev>
@@ -323,6 +325,7 @@ GetOptions( 'showfile!' => \$showfile, 'f|file!' => \$file, 'g|git!' => \$git, + 'stdin-filename=s' => \$stdin_filename, 'subjective!' => \$check, 'strict!' => \$check, 'ignore=s' => \@ignore,
@@ -2652,6 +2655,10 @@ sub is_userspace { sub process { my $filename = shift; + if ($filename eq '-' && defined($stdin_filename)) { + $filename = $stdin_filename; + } + my $linenr=0; my $prevline=""; my $prevrawline="";
@@ -2891,6 +2898,10 @@ sub process { $realfile =~ s@^([^/]*)/@@ if (!$file); $in_commit_log = 0; + if ($realfile eq "-" && defined($stdin_filename)) { + $realfile = $stdin_filename; + } + $p1_prefix = $1; if (!$file && $tree && $p1_prefix ne '' && -e "$root/$p1_prefix") {
Signature · 5 lines
2.53.0.1018.g2bb0e51243-goog -- Dmitry
Joe Perches
maintainerQuoted 8 lines · Dmitry Torokhov
checkpatch does not handle full files well when they are passed on stdin, because it does not know how to treat the text, and whether it is a C file, or a DTS file, or something else, and so it assumes that when it works with stdin it should be a unified diff. For full files it expects to have a file name as an argument and read the contents from disk. Unfortunately this does not well when trying to use checkpatch as an online linter and feed it contents of an editor buffer that have not made it to the disk yet.
Why is this useful?
Why not save the buffer and then feed the file?
Quoted 10 lines · Joe Perches
Quoted 8 lines · Dmitry Torokhov
checkpatch does not handle full files well when they are passed on stdin, because it does not know how to treat the text, and whether it is a C file, or a DTS file, or something else, and so it assumes that when it works with stdin it should be a unified diff. For full files it expects to have a file name as an argument and read the contents from disk. Unfortunately this does not well when trying to use checkpatch as an online linter and feed it contents of an editor buffer that have not made it to the disk yet.
Quoted 2 lines
Why is this useful?
Why not save the buffer and then feed the file?
Because when I am editing a file I am not saving it all that often. I want to have buffer diagnostic updated when I leave insert mode in vim.
Thanks.
Signature · 1 line
Dmitry
Joe Perches
maintainerQuoted 11 lines · Dmitry Torokhov
On Thu, Mar 26, 2026 at 01:46:49AM -0700, Joe Perches wrote:
On Wed, 2026-03-25 at 23:20 -0700, Dmitry Torokhov wrote:
checkpatch does not handle full files well when they are passed onQuoted 8 lines
Quoted 7 lines
stdin, because it does not know how to treat the text, and whether it is a C file, or a DTS file, or something else, and so it assumes that when it works with stdin it should be a unified diff. For full files it expects to have a file name as an argument and read the contents from disk. Unfortunately this does not well when trying to use checkpatch as an online linter and feed it contents of an editor buffer that have not made it to the disk yet.
Quoted 5 lines
Quoted 2 lines
Why is this useful?
Why not save the buffer and then feed the file?Because when I am editing a file I am not saving it all that often. I want to have buffer diagnostic updated when I leave insert mode in vim.
I believe you are able to keep your own version of checkpatch.
Quoted 12 lines · Joe Perches
Quoted 11 lines · Dmitry Torokhov
On Thu, Mar 26, 2026 at 01:46:49AM -0700, Joe Perches wrote:
On Wed, 2026-03-25 at 23:20 -0700, Dmitry Torokhov wrote:
checkpatch does not handle full files well when they are passed onQuoted 8 lines
Quoted 7 lines
stdin, because it does not know how to treat the text, and whether it is a C file, or a DTS file, or something else, and so it assumes that when it works with stdin it should be a unified diff. For full files it expects to have a file name as an argument and read the contents from disk. Unfortunately this does not well when trying to use checkpatch as an online linter and feed it contents of an editor buffer that have not made it to the disk yet.
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Why is this useful?
Why not save the buffer and then feed the file?Because when I am editing a file I am not saving it all that often. I want to have buffer diagnostic updated when I leave insert mode in vim.
I believe you are able to keep your own version of checkpatch.
As well as my version of the kernel, gcc, clang, editor, git and so on.
Do you have any constructive feedback? Right now checkpatch is broken when using "-f" with stdin and I offer a fix. If you have a better way in mind by all means share it.
Thanks.
Signature · 1 line
Dmitry
Joe Perches
maintainerQuoted 8 lines · Dmitry Torokhov
Quoted 4 lines
Quoted 2 lines
Because when I am editing a file I am not saving it all that often. I want to have buffer diagnostic updated when I leave insert mode in vim.
I believe you are able to keep your own version of checkpatch.
As well as my version of the kernel, gcc, clang, editor, git and so on.
Do you have any constructive feedback?
I gave you feedback. You elided it.
Quoted 3 lines
Right now checkpatch is broken
when using "-f" with stdin and I offer a fix. If you have a better way in mind by all means share it.
Note the name. Feed it a patch. It works fine. It's not broken.
Quoted 11 lines · Joe Perches
Quoted 8 lines · Dmitry Torokhov
Quoted 4 lines
Quoted 2 lines
Because when I am editing a file I am not saving it all that often. I want to have buffer diagnostic updated when I leave insert mode in vim.
I believe you are able to keep your own version of checkpatch.
As well as my version of the kernel, gcc, clang, editor, git and so on.
Do you have any constructive feedback?
I gave you feedback. You elided it.
Could you please point me to it? All I saw is "just save it" and "keep your own copy". Neither of this suggestions are particularly useful.
Quoted 6 lines
Quoted 4 lines
Right now checkpatch is broken
when using "-f" with stdin and I offer a fix. If you have a better way in mind by all means share it.Note the name. Feed it a patch. It works fine. It's not broken.
This option is a bug then and should be removed:
"-f, --file treat FILE as regular source file"
right?
In all seriousness, if you will not make use of this mode it's fine. But it allows keeping the source cleaner as one makes edits, so why not enable this?
Signature · 1 line
Dmitry
Joe Perches
maintainerQuoted 3 lines · Dmitry Torokhov
Quoted 1 line · Joe Perches
I gave you feedback. You elided it.
Could you please point me to it? All I saw is "just save it"
Seems constructive to me.
Quoted 6 lines · Joe Perches
Quoted 3 lines · Dmitry Torokhov
Quoted 1 line · Joe Perches
I gave you feedback. You elided it.
Could you please point me to it? All I saw is "just save it"
Seems constructive to me.
As constructive as "You're holding it wrong". I want to be able to run checkpatch as I am typing, not at some later time. My editor shows diagnostics as a virtual text, so it is quite confusing that the error is still shown even after I fixed the issue.
It looks like I forgot to add akpm to CC, let me add him...
Thanks.
Signature · 1 line
Dmitry
Joe Perches
maintainerQuoted 10 lines · Dmitry Torokhov
On Thu, Mar 26, 2026 at 03:56:27PM -0700, Joe Perches wrote:
I gave you feedback. You elided it.Quoted 2 lines
Quoted 1 line
Could you please point me to it? All I saw is "just save it"
Seems constructive to me.
As constructive as "You're holding it wrong". I want to be able to run checkpatch as I am typing, not at some later time. My editor shows diagnostics as a virtual text, so it is quite confusing that the error is still shown even after I fixed the issue.
It looks like I forgot to add akpm to CC, let me add him...
No worries. nak.
It's not something I want to support.
cheers, Joe
Joe Perches
maintainerQuoted 3 lines · Dmitry Torokhov
In all seriousness, if you will not make use of this mode it's fine. But it allows keeping the source cleaner as one makes edits, so why not enable this?
Unnecessary complication.
Quoted 6 lines · Joe Perches
Quoted 3 lines · Dmitry Torokhov
In all seriousness, if you will not make use of this mode it's fine. But it allows keeping the source cleaner as one makes edits, so why not enable this?
Unnecessary complication.
Are you maintaining a tool that you want to be useful to others, or to only do stricly what you personally think is necessary?
I don't understand your objections to this rather straightforward patch, it doesn't look like a maintenance burden to me?