From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Jonathan Corbet <corbet@lwn.net>
Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
" Nícolas F. R. A. Prado" <nfraprado@collabora.com>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Shuah Khan" <skhan@linuxfoundation.org>
Subject: Re: [PATCH 00/13] Add kernel-doc modules to Documentation/tools
Date: Thu, 15 Jan 2026 02:29:21 +0100 [thread overview]
Message-ID: <20260115022921.6de58ec8@foz.lan> (raw)
In-Reply-To: <87v7h3udlk.fsf@trenco.lwn.net>
Em Wed, 14 Jan 2026 13:46:31 -0700
Jonathan Corbet <corbet@lwn.net> escreveu:
> Mauro Carvalho Chehab <mchehab+huawei@kernel.org> writes:
>
> >> We could certainly rename it to something different.
> >> But I really dislike having language extensions on files meant to be
> >> executed as commands; you shouldn't care what language it's written in
> >> when you run it.
> >
> > I don't like it either, but Python is really picky on some things.
> >
> > The problem here is that this is a Python policy violation. To change
> > that, one needs to write a PEP and convince Python maintainers to merge
> > it, together with changes on python "import" directive.
>
> ...or just ignore it.
Indeed this is an option.
> There is a reason that "pip" is called "pip"
> rather than "pip.py" - the Python folks don't keep those extensions on
> commands either.
True, but see what pip has:
$ more /usr/bin/pip
#! /usr/bin/python3 -P
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
/usr/bin/pip (END)
Everything, including main are outside it. Btw, this code is almost
identical to sphinx-build:
$ more /usr/bin/sphinx-build
#! /usr/bin/python3 -P
# -*- coding: utf-8 -*-
import re
import sys
from sphinx.cmd.build import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())
This would be equivalent of having a tools/docs/kernel-doc like this
(untested):
#!/usr/bin/env python3
from .kdoc.main import main
if __name__ == '__main__':
sys.exit(main())
where the actual argparse code would be inside tools/docs/kdoc/main.py
> > Alternatively, assuming that some magic words would be enough to
> > convince importlib to load a name without ".py" and with "-", it could be
> > easier to convince Sphinx autodoc maintainers to take a patch, as they're
> > probably using importlib somewhere to dynamically import a file based
> > at the string inside "automodule" directive. On a quick grep,
> > this seems to be the case, and such logic is inside:
> >
> > sphinx/ext/autodoc/importer.py
>
> No doubt we could do that. But is it really worth the trouble? There
> is not much in kernel-doc that needs documenting, especially since you
> did the work to move the actual functionality into separate modules.
I'm not particularly concerned about kernel-doc here. I'm more
concerned on defining how things like that are expected to be
documented.
Yet, if you add this:
.. automodule:: docs.kernel_doc
:members:
:show-inheritance:
:undoc-members:
The generated documentation sounds somewhat relevant to me - specially
if placed together with the kernel-doc module API documentation:
kernel-doc module documentation
===============================
kernel_doc
Print formatted kernel documentation to stdout
Read C language source or header FILEs, extract embedded documentation comments,
and print formatted documentation to standard output.
The documentation comments are identified by the /** opening comment mark.
See Documentation/doc-guide/kernel-doc.rst for the documentation comment syntax.
class docs.kernel_doc.MsgFormatter(fmt=None, datefmt=None, style='%', validate=True, *, defaults=None)
Bases: Formatter
Helper class to format warnings in a similar way to kernel-doc.pl.
format(record)
Format the specified record as text.
The record’s attribute dictionary is used as the operand to a
string formatting operation which yields the returned string.
Before formatting the dictionary, a couple of preparatory
steps are carried out. The message attribute of the record
is computed using LogRecord.getMessage(). If the formatting
string uses the time (as determined by a call to usesTime(),
formatTime() is called to format the event time. If there is
exception information, it is formatted using formatException()
and appended to the message.
docs.kernel_doc.main()
Main program By default, the return value is:
0: success or Python version is not compatible with
kernel-doc. If -Werror is not used, it will also
return 0 if there are issues at kernel-doc markups;
1: an abnormal condition happened;
2: argparse issued an error;
3: -Werror is used, and one or more unfiltered parse warnings
happened.
> > So, even if we don't actually add kernel-doc docstrings and
> > functions via autodoc, I think it is still worth having a
> > name convention that would allow that.
>
> Instead, I think you're trying to take a functionality meant to describe
> APIs and use it to document command-line stuff. I'm happy to live by
> the import rules for stuff that is actually imported; I think it makes
> less sense to let them drive the naming of files that are outside of
> their intended scope.
Yeah, `MsgFormatter` doesn't belong to doc-guide. main return values
does, however. IMO it is important to keep it documented together with
the code.
It should be noticed that autodoc has support for selecting symbols.
So:
.. automodule:: docs.kernel_doc
:members: main
would pick only module description + main
and if we add, instead:
.. autofunction:: docs.kernel_doc.main
it would just pick docstrings for main, e.g. it would place just
this:
docs.kernel_doc.main()
Main program By default, the return value is:
0: success or Python version is not compatible with
kernel-doc. If -Werror is not used, it will also
return 0 if there are issues at kernel-doc markups;
1: an abnormal condition happened;
2: argparse issued an error;
3: -Werror is used, and one or more unfiltered parse warnings
happened.
---
In summary, all I'm saying is that, if we stick to PEP8 names, we
can opt to import a documentation directly from the script instead
of writing it twice: at the code and on a rst file.
Btw, if you want to test it, you need just one patch to enable
it:
https://lore.kernel.org/linux-doc/6aa5a5b4a686f07c8f3e6cb04fe4c07ed9c1d071.1768396023.git.mchehab+huawei@kernel.org/T/#u
this basically allows using tools/ and scripts/ as the base for
documentation.
You may also want this css patch, as default format with alabaster
is very ugly:
https://lore.kernel.org/linux-doc/8d66988f05d06d10938e062ed4465bf303c51441.1768396023.git.mchehab+huawei@kernel.org/T/#u
with that, you can experiment inserting autodoc stuff using:
.. automodule:: docs.name
:modules:
to document all public methods from "docs/name.py" file, or:
.. autofunction:: docs.name.function
and/or:
.. autoclass:: docs.name.class
for a single "function" (or "class") inside "docs/name.py".
Again, the limitation is that "name" ends with ".py" and only
have (lower case?) letters, numbers and underscores - e.g. it
shall be something that "import" and "from ... import" supports.
Thanks,
Mauro
next prev parent reply other threads:[~2026-01-15 1:29 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-14 13:17 [PATCH 00/13] Add kernel-doc modules to Documentation/tools Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 01/13] docs: custom.css: prevent li marker to override text Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 02/13] docs: enable Sphinx autodoc extension to allow documenting python Mauro Carvalho Chehab
2026-01-15 10:19 ` Jani Nikula
2026-01-15 11:50 ` Mauro Carvalho Chehab
2026-01-15 12:18 ` Jani Nikula
2026-01-15 12:57 ` Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 03/13] docs: custom.css: add CSS for python Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 04/13] docs: kdoc: latex_fonts: Improve docstrings and comments Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 05/13] docs: kdoc_files: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 06/13] docs: kdoc_item: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 07/13] docs: kdoc_parser: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 08/13] docs: kdoc_output: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 09/13] docs: kdoc_re: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 10/13] docs: kdoc: parse_data_structs: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 11/13] docs: kdoc: enrich_formatter: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 12/13] docs: kdoc: python_version: " Mauro Carvalho Chehab
2026-01-14 13:17 ` [PATCH 13/13] docs: add kernel-doc modules documentation Mauro Carvalho Chehab
2026-01-14 18:01 ` [PATCH 00/13] Add kernel-doc modules to Documentation/tools Jonathan Corbet
2026-01-14 20:20 ` Mauro Carvalho Chehab
2026-01-14 20:46 ` Jonathan Corbet
2026-01-15 1:29 ` Mauro Carvalho Chehab [this message]
2026-01-15 10:17 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260115022921.6de58ec8@foz.lan \
--to=mchehab+huawei@kernel.org \
--cc=corbet@lwn.net \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nfraprado@collabora.com \
--cc=rdunlap@infradead.org \
--cc=skhan@linuxfoundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.