From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-devel@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
John Snow <jsnow@redhat.com>
Subject: Re: [PATCH for-10.2 5/8] scripts/kernel-doc: tweak for QEMU coding standards
Date: Fri, 15 Aug 2025 12:34:05 +0200 [thread overview]
Message-ID: <20250815123405.535077e5@foz.lan> (raw)
In-Reply-To: <20250814171324.1614516-6-peter.maydell@linaro.org>
Em Thu, 14 Aug 2025 18:13:20 +0100
Peter Maydell <peter.maydell@linaro.org> escreveu:
> This commit makes the equivalent changes to the Python script that we
> had for the old Perl script in commit 4cf41794411f ("docs: tweak
> kernel-doc for QEMU coding standards"). To repeat the rationale from
> that commit:
>
> Surprisingly, QEMU does have a pretty consistent doc comment style and
> it is not very different from the Linux kernel's. Of the documentation
> "sigils", only "#" separates the QEMU doc comment style from Linux's,
> and it has 200+ instances vs. 6 for the kernel's '&struct foo' (all in
> accel/tcg/translate-all.c), so it's clear that the two standards are
> different in this respect. In addition, our structs are typedefed and
> recognized by CamelCase names.
>
> Note that in 4cf41794411f we used '(?!)' as our type_fallback regex;
> this is strictly not quite a replacement for the upstream
> '\&([_\w]+)', because the latter includes a group that can later be
> matched with \1, and the former does not. The old perl script did
> not care about this, but the python version does, so we must include
> the extra set of brackets to ensure we have a group.
>
> This commit does not include all the same changes that 4cf41794411f
> did. Of the missing pieces, some had already gone in an earlier
> kernel-doc update; the parts we still had but do not include here are:
>
> @@ -2057,7 +2060,7 @@
> }
> elsif (/$doc_decl/o) {
> $identifier = $1;
> - if (/\s*([\w\s]+?)(\(\))?\s*-/) {
> + if (/\s*([\w\s]+?)(\s*-|:)/) {
> $identifier = $1;
> }
>
> @@ -2067,7 +2070,7 @@
> $contents = "";
> $section = $section_default;
> $new_start_line = $. + 1;
> - if (/-(.*)/) {
> + if (/[-:](.*)/) {
> # strip leading/trailing/multiple spaces
> $descr= $1;
> $descr =~ s/^\s*//;
>
> The second of these is already in the upstream version: the line r =
> KernRe("[-:](.*)") in process_name() matches the regex we have.
Yes. If I recall correctly, we added this one to solve some issues on a
couple of files that were full of ":" as separator. They violate what
is documented as a valid kernel-doc markup, but it didn't hurt adding
support for such variant.
> The
> first change has been refactored into the doc_begin_data and
> doc_begin_func changes. Since the output HTML for QEMU's
> documentation has no relevant changes with the new kerneldoc, we
> assume that this too has been handled upstream.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
LGTM, but see my notes below.
Anyway:
Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> scripts/lib/kdoc/kdoc_output.py | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/lib/kdoc/kdoc_output.py b/scripts/lib/kdoc/kdoc_output.py
> index ea8914537ba..39fa872dfca 100644
> --- a/scripts/lib/kdoc/kdoc_output.py
> +++ b/scripts/lib/kdoc/kdoc_output.py
> @@ -38,12 +38,12 @@
> type_fp_param2 = KernRe(r"\@(\w+->\S+)\(\)", cache=False)
>
> type_env = KernRe(r"(\$\w+)", cache=False)
> -type_enum = KernRe(r"\&(enum\s*([_\w]+))", cache=False)
> -type_struct = KernRe(r"\&(struct\s*([_\w]+))", cache=False)
> -type_typedef = KernRe(r"\&(typedef\s*([_\w]+))", cache=False)
> -type_union = KernRe(r"\&(union\s*([_\w]+))", cache=False)
> -type_member = KernRe(r"\&([_\w]+)(\.|->)([_\w]+)", cache=False)
> -type_fallback = KernRe(r"\&([_\w]+)", cache=False)
> +type_enum = KernRe(r"#(enum\s*([_\w]+))", cache=False)
> +type_struct = KernRe(r"#(struct\s*([_\w]+))", cache=False)
> +type_typedef = KernRe(r"#(([A-Z][_\w]*))", cache=False)
> +type_union = KernRe(r"#(union\s*([_\w]+))", cache=False)
> +type_member = KernRe(r"#([_\w]+)(\.|->)([_\w]+)", cache=False)
> +type_fallback = KernRe(r"((?!))", cache=False) # this never matches
> type_member_func = type_member + KernRe(r"\(\)", cache=False)
That seems something that a class override would address it better.
Basically, you can do something like:
type_enum = KernRe(r"#(enum\s*([_\w]+))", cache=False)
type_struct = KernRe(r"#(struct\s*([_\w]+))", cache=False)
type_typedef = KernRe(r"#(([A-Z][_\w]*))", cache=False)
type_union = KernRe(r"#(union\s*([_\w]+))", cache=False)
type_member = KernRe(r"#([_\w]+)(\.|->)([_\w]+)", cache=False)
type_fallback = KernRe(r"((?!))", cache=False) # this never matches
...
(either keep the other types or add a __init__ that would append
or replace only the above elements)
class QemuRestFormat(RestFormatOutput):
highlights = [
(type_constant, r"``\1``"),
(type_constant2, r"``\1``"),
# Note: need to escape () to avoid func matching later
(type_member_func, r":c:type:`\1\2\3\\(\\) <\1>`"),
(type_member, r":c:type:`\1\2\3 <\1>`"),
(type_fp_param, r"**\1\\(\\)**"),
(type_fp_param2, r"**\1\\(\\)**"),
(type_func, r"\1()"),
(type_enum, r":c:type:`\1 <\2>`"),
(type_struct, r":c:type:`\1 <\2>`"),
(type_typedef, r":c:type:`\1 <\2>`"),
(type_union, r":c:type:`\1 <\2>`"),
# in rst this can refer to any type
(type_fallback, r":c:type:`\1`"),
(type_param_ref, r"**\1\2**")
]
Where the above will be the QEMU-specific regexes.
Then, when creating a KernelFiles() instance at kerneldoc.py Sphinx
extension:
def setup_kfiles(app):
global kfiles
out_style = QemuRestFormat()
kfiles = KernelFiles(out_style=out_style, logger=logger)
keeping the remaining code of the Kernel version of kerneldoc.py.
Thanks,
Mauro
next prev parent reply other threads:[~2025-08-15 10:34 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-14 17:13 [PATCH for-10.2 0/8] docs: Update our kernel-doc script to the kernel's new Python one Peter Maydell
2025-08-14 17:13 ` [PATCH for-10.2 1/8] docs/sphinx/kerneldoc.py: Handle new LINENO syntax Peter Maydell
2025-08-15 9:49 ` Mauro Carvalho Chehab
2025-08-14 17:13 ` [PATCH for-10.2 2/8] tests/qtest/libqtest.h: Remove stray space from doc comment Peter Maydell
2025-08-15 9:51 ` Mauro Carvalho Chehab
2025-08-15 10:14 ` Peter Maydell
2025-08-14 17:13 ` [PATCH for-10.2 3/8] scripts: Import Python kerneldoc from Linux kernel Peter Maydell
2025-08-15 10:00 ` Mauro Carvalho Chehab
2025-08-15 10:19 ` Peter Maydell
2025-08-14 17:13 ` [PATCH for-10.2 4/8] scripts/kernel-doc: strip QEMU_ from function definitions Peter Maydell
2025-08-15 10:01 ` Mauro Carvalho Chehab
2025-08-14 17:13 ` [PATCH for-10.2 5/8] scripts/kernel-doc: tweak for QEMU coding standards Peter Maydell
2025-08-15 10:34 ` Mauro Carvalho Chehab [this message]
2025-08-14 17:13 ` [PATCH for-10.2 6/8] scripts/kerneldoc: Switch to the Python kernel-doc script Peter Maydell
2025-08-14 17:13 ` [PATCH for-10.2 7/8] scripts/kernel-doc: Delete the old Perl " Peter Maydell
2025-08-15 10:35 ` Mauro Carvalho Chehab
2025-08-14 17:13 ` [PATCH for-10.2 8/8] MAINTAINERS: Put kernel-doc under the "docs build machinery" section Peter Maydell
2025-08-15 10:40 ` Mauro Carvalho Chehab
2025-08-26 10:36 ` Peter Maydell
2025-08-15 9:11 ` [PATCH for-10.2 0/8] docs: Update our kernel-doc script to the kernel's new Python one Jonathan Cameron via
2025-08-15 9:39 ` Mauro Carvalho Chehab
2025-08-15 10:10 ` Peter Maydell
2025-08-15 11:12 ` Mauro Carvalho Chehab
2025-08-19 10:34 ` Paolo Bonzini
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=20250815123405.535077e5@foz.lan \
--to=mchehab+huawei@kernel.org \
--cc=jsnow@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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.