* [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions
@ 2026-07-14 11:12 Ryszard Knop
2026-07-14 21:44 ` Randy Dunlap
2026-07-15 11:17 ` [PATCH v2] " Ryszard Knop
0 siblings, 2 replies; 7+ messages in thread
From: Ryszard Knop @ 2026-07-14 11:12 UTC (permalink / raw)
To: linux-doc
Cc: Shuicheng Lin, Randy Dunlap, Jani Nikula, linux-kernel, intel-xe
Since check_sections() now warns if a documentation tag member name is
the same as defined in the struct, we can suggest names the checker
knows, so that it's more obvious how to deal with the warning.
Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
---
tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
index 2dedda215c22..3f88095eab06 100644
--- a/tools/lib/python/kdoc/kdoc_parser.py
+++ b/tools/lib/python/kdoc/kdoc_parser.py
@@ -558,6 +558,13 @@ class KernelDoc:
self.push_parameter(ln, decl_type, param, dtype,
arg, declaration_name)
+ def get_suggestions_hint(self, decl_name, possible_names):
+ suggestions = set(name for name in possible_names if decl_name in name)
+ if not suggestions:
+ return ""
+
+ return f"(did you mean one of: '{"', '".join(suggestions)}')"
+
def check_sections(self, ln, decl_name, decl_type):
"""
Check for errors inside sections, emitting warnings if not found
@@ -566,12 +573,13 @@ class KernelDoc:
for section in self.entry.sections:
if section not in self.entry.parameterlist and \
not known_sections.search(section):
+ hint = self.get_suggestions_hint(section, self.entry.parameterlist)
if decl_type == 'function':
dname = f"{decl_type} parameter"
else:
dname = f"{decl_type} member"
self.emit_msg(ln,
- f"Excess {dname} '{section}' description in '{decl_name}'")
+ f"Excess {dname} '{section}' description in '{decl_name}' {hint}")
#
# Check that documented parameter names (from doc comments, including
@@ -591,12 +599,13 @@ class KernelDoc:
if param_name in self.entry.parameterlist:
continue
+ hint = self.get_suggestions_hint(param_name, self.entry.parameterlist)
if decl_type == 'function':
dname = f"{decl_type} parameter"
else:
dname = f"{decl_type} member"
self.emit_msg(ln,
- f"Excess {dname} '{param_name}' description in '{decl_name}'")
+ f"Excess {dname} '{param_name}' description in '{decl_name}' {hint}")
def check_return_section(self, ln, declaration_name, return_type):
"""
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-14 11:12 [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions Ryszard Knop
@ 2026-07-14 21:44 ` Randy Dunlap
2026-07-15 11:18 ` Knop, Ryszard
2026-07-15 11:17 ` [PATCH v2] " Ryszard Knop
1 sibling, 1 reply; 7+ messages in thread
From: Randy Dunlap @ 2026-07-14 21:44 UTC (permalink / raw)
To: Ryszard Knop, linux-doc
Cc: Shuicheng Lin, Jani Nikula, linux-kernel, intel-xe
Hi,
On 7/14/26 4:12 AM, Ryszard Knop wrote:
> Since check_sections() now warns if a documentation tag member name is
> the same as defined in the struct, we can suggest names the checker
> knows, so that it's more obvious how to deal with the warning.
>
Seems to work for me.
> Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
> ---
> tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
> index 2dedda215c22..3f88095eab06 100644
> --- a/tools/lib/python/kdoc/kdoc_parser.py
> +++ b/tools/lib/python/kdoc/kdoc_parser.py
> @@ -558,6 +558,13 @@ class KernelDoc:
> self.push_parameter(ln, decl_type, param, dtype,
> arg, declaration_name)
>
> + def get_suggestions_hint(self, decl_name, possible_names):
> + suggestions = set(name for name in possible_names if decl_name in name)
> + if not suggestions:
> + return ""
> +
> + return f"(did you mean one of: '{"', '".join(suggestions)}')"
> +
> def check_sections(self, ln, decl_name, decl_type):
> """
> Check for errors inside sections, emitting warnings if not found
> @@ -566,12 +573,13 @@ class KernelDoc:
> for section in self.entry.sections:
> if section not in self.entry.parameterlist and \
> not known_sections.search(section):
> + hint = self.get_suggestions_hint(section, self.entry.parameterlist)
> if decl_type == 'function':
> dname = f"{decl_type} parameter"
> else:
> dname = f"{decl_type} member"
> self.emit_msg(ln,
> - f"Excess {dname} '{section}' description in '{decl_name}'")
> + f"Excess {dname} '{section}' description in '{decl_name}' {hint}")
When 'hint' is empty, this statement and/or the similar one below
adds a trailing space to each of those lines.
Can you prevent that? (yeah, it's just a nit)
>
> #
> # Check that documented parameter names (from doc comments, including
> @@ -591,12 +599,13 @@ class KernelDoc:
> if param_name in self.entry.parameterlist:
> continue
>
> + hint = self.get_suggestions_hint(param_name, self.entry.parameterlist)
> if decl_type == 'function':
> dname = f"{decl_type} parameter"
> else:
> dname = f"{decl_type} member"
> self.emit_msg(ln,
> - f"Excess {dname} '{param_name}' description in '{decl_name}'")
> + f"Excess {dname} '{param_name}' description in '{decl_name}' {hint}")
>
> def check_return_section(self, ln, declaration_name, return_type):
> """
Acked-by: Randy Dunlap <rdunlap@infradead.org>
Tested-by: Randy Dunlap <rdunlap@infradead.org>
thanks.
--
~Randy
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-14 21:44 ` Randy Dunlap
@ 2026-07-15 11:18 ` Knop, Ryszard
0 siblings, 0 replies; 7+ messages in thread
From: Knop, Ryszard @ 2026-07-15 11:18 UTC (permalink / raw)
To: linux-doc@vger.kernel.org, rdunlap@infradead.org
Cc: intel-xe@lists.freedesktop.org, Lin, Shuicheng,
linux-kernel@vger.kernel.org, jani.nikula@linux.intel.com
On Tue, 2026-07-14 at 14:44 -0700, Randy Dunlap wrote:
> Hi,
>
>
> On 7/14/26 4:12 AM, Ryszard Knop wrote:
> > Since check_sections() now warns if a documentation tag member name is
> > the same as defined in the struct, we can suggest names the checker
> > knows, so that it's more obvious how to deal with the warning.
> >
>
> Seems to work for me.
>
> > Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
> > ---
> > tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
> > 1 file changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
> > index 2dedda215c22..3f88095eab06 100644
> > --- a/tools/lib/python/kdoc/kdoc_parser.py
> > +++ b/tools/lib/python/kdoc/kdoc_parser.py
> > @@ -558,6 +558,13 @@ class KernelDoc:
> > self.push_parameter(ln, decl_type, param, dtype,
> > arg, declaration_name)
> >
> > + def get_suggestions_hint(self, decl_name, possible_names):
> > + suggestions = set(name for name in possible_names if decl_name in name)
> > + if not suggestions:
> > + return ""
> > +
> > + return f"(did you mean one of: '{"', '".join(suggestions)}')"
> > +
> > def check_sections(self, ln, decl_name, decl_type):
> > """
> > Check for errors inside sections, emitting warnings if not found
> > @@ -566,12 +573,13 @@ class KernelDoc:
> > for section in self.entry.sections:
> > if section not in self.entry.parameterlist and \
> > not known_sections.search(section):
> > + hint = self.get_suggestions_hint(section, self.entry.parameterlist)
> > if decl_type == 'function':
> > dname = f"{decl_type} parameter"
> > else:
> > dname = f"{decl_type} member"
> > self.emit_msg(ln,
> > - f"Excess {dname} '{section}' description in '{decl_name}'")
> > + f"Excess {dname} '{section}' description in '{decl_name}' {hint}")
>
> When 'hint' is empty, this statement and/or the similar one below
> adds a trailing space to each of those lines.
> Can you prevent that? (yeah, it's just a nit)
Sure thing, submitted a v2.
>
> >
> > #
> > # Check that documented parameter names (from doc comments, including
> > @@ -591,12 +599,13 @@ class KernelDoc:
> > if param_name in self.entry.parameterlist:
> > continue
> >
> > + hint = self.get_suggestions_hint(param_name, self.entry.parameterlist)
> > if decl_type == 'function':
> > dname = f"{decl_type} parameter"
> > else:
> > dname = f"{decl_type} member"
> > self.emit_msg(ln,
> > - f"Excess {dname} '{param_name}' description in '{decl_name}'")
> > + f"Excess {dname} '{param_name}' description in '{decl_name}' {hint}")
> >
> > def check_return_section(self, ln, declaration_name, return_type):
> > """
>
> Acked-by: Randy Dunlap <rdunlap@infradead.org>
> Tested-by: Randy Dunlap <rdunlap@infradead.org>
>
> thanks.
A.
Thanks, Ryszard
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-14 11:12 [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions Ryszard Knop
2026-07-14 21:44 ` Randy Dunlap
@ 2026-07-15 11:17 ` Ryszard Knop
2026-07-15 12:42 ` Mauro Carvalho Chehab
1 sibling, 1 reply; 7+ messages in thread
From: Ryszard Knop @ 2026-07-15 11:17 UTC (permalink / raw)
To: Randy Dunlap, linux-doc
Cc: Shuicheng Lin, Jani Nikula, linux-kernel, intel-xe
Since check_sections() now warns if a documentation tag member name is
the same as defined in the struct, we can suggest names the checker
knows, so that it's more obvious how to deal with the warning.
v2 (rdunlap):
- Strip whitespace from warnings, nicer when the hint is empty
Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
---
tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
index 2dedda215c22..a22c3e3182f0 100644
--- a/tools/lib/python/kdoc/kdoc_parser.py
+++ b/tools/lib/python/kdoc/kdoc_parser.py
@@ -558,6 +558,13 @@ class KernelDoc:
self.push_parameter(ln, decl_type, param, dtype,
arg, declaration_name)
+ def get_suggestions_hint(self, decl_name, possible_names):
+ suggestions = set(name for name in possible_names if decl_name in name)
+ if not suggestions:
+ return ""
+
+ return f"(did you mean one of: '{"', '".join(suggestions)}')"
+
def check_sections(self, ln, decl_name, decl_type):
"""
Check for errors inside sections, emitting warnings if not found
@@ -566,12 +573,13 @@ class KernelDoc:
for section in self.entry.sections:
if section not in self.entry.parameterlist and \
not known_sections.search(section):
+ hint = self.get_suggestions_hint(section, self.entry.parameterlist)
if decl_type == 'function':
dname = f"{decl_type} parameter"
else:
dname = f"{decl_type} member"
self.emit_msg(ln,
- f"Excess {dname} '{section}' description in '{decl_name}'")
+ f"Excess {dname} '{section}' description in '{decl_name}' {hint}".strip())
#
# Check that documented parameter names (from doc comments, including
@@ -591,12 +599,13 @@ class KernelDoc:
if param_name in self.entry.parameterlist:
continue
+ hint = self.get_suggestions_hint(param_name, self.entry.parameterlist)
if decl_type == 'function':
dname = f"{decl_type} parameter"
else:
dname = f"{decl_type} member"
self.emit_msg(ln,
- f"Excess {dname} '{param_name}' description in '{decl_name}'")
+ f"Excess {dname} '{param_name}' description in '{decl_name}' {hint}".strip())
def check_return_section(self, ln, declaration_name, return_type):
"""
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v2] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-15 11:17 ` [PATCH v2] " Ryszard Knop
@ 2026-07-15 12:42 ` Mauro Carvalho Chehab
2026-07-15 13:21 ` Knop, Ryszard
0 siblings, 1 reply; 7+ messages in thread
From: Mauro Carvalho Chehab @ 2026-07-15 12:42 UTC (permalink / raw)
To: Ryszard Knop
Cc: Randy Dunlap, linux-doc, Shuicheng Lin, Jani Nikula, linux-kernel,
intel-xe
On Wed, 15 Jul 2026 13:17:26 +0200
Ryszard Knop <ryszard.knop@intel.com> wrote:
> Since check_sections() now warns if a documentation tag member name is
> the same as defined in the struct, we can suggest names the checker
> knows, so that it's more obvious how to deal with the warning.
>
> v2 (rdunlap):
> - Strip whitespace from warnings, nicer when the hint is empty
>
> Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
> ---
> tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
> index 2dedda215c22..a22c3e3182f0 100644
> --- a/tools/lib/python/kdoc/kdoc_parser.py
> +++ b/tools/lib/python/kdoc/kdoc_parser.py
> @@ -558,6 +558,13 @@ class KernelDoc:
> self.push_parameter(ln, decl_type, param, dtype,
> arg, declaration_name)
>
> + def get_suggestions_hint(self, decl_name, possible_names):
> + suggestions = set(name for name in possible_names if decl_name in name)
> + if not suggestions:
> + return ""
> +
> + return f"(did you mean one of: '{"', '".join(suggestions)}')"
> +
There is a better way to propose suggestions. See:
Documentation/sphinx/kernel_include.py
E.g. use something like:
from difflib import get_close_matches
matches = get_close_matches(decl_name, possible_names)
See: https://docs.python.org/3/library/difflib.html#difflib.get_close_matches
If the problem is due to a typo, this will likely return the
right name.
Regards,
Mauro
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-15 12:42 ` Mauro Carvalho Chehab
@ 2026-07-15 13:21 ` Knop, Ryszard
2026-07-15 13:52 ` Mauro Carvalho Chehab
0 siblings, 1 reply; 7+ messages in thread
From: Knop, Ryszard @ 2026-07-15 13:21 UTC (permalink / raw)
To: mchehab+huawei@kernel.org
Cc: intel-xe@lists.freedesktop.org, Lin, Shuicheng,
linux-doc@vger.kernel.org, rdunlap@infradead.org,
jani.nikula@linux.intel.com, linux-kernel@vger.kernel.org
On Wed, 2026-07-15 at 14:42 +0200, Mauro Carvalho Chehab wrote:
> On Wed, 15 Jul 2026 13:17:26 +0200
> Ryszard Knop <ryszard.knop@intel.com> wrote:
>
> > Since check_sections() now warns if a documentation tag member name is
> > the same as defined in the struct, we can suggest names the checker
> > knows, so that it's more obvious how to deal with the warning.
> >
> > v2 (rdunlap):
> > - Strip whitespace from warnings, nicer when the hint is empty
> >
> > Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
> > ---
> > tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
> > 1 file changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
> > index 2dedda215c22..a22c3e3182f0 100644
> > --- a/tools/lib/python/kdoc/kdoc_parser.py
> > +++ b/tools/lib/python/kdoc/kdoc_parser.py
> > @@ -558,6 +558,13 @@ class KernelDoc:
> > self.push_parameter(ln, decl_type, param, dtype,
> > arg, declaration_name)
> >
> > + def get_suggestions_hint(self, decl_name, possible_names):
> > + suggestions = set(name for name in possible_names if decl_name in name)
> > + if not suggestions:
> > + return ""
> > +
> > + return f"(did you mean one of: '{"', '".join(suggestions)}')"
> > +
>
> There is a better way to propose suggestions. See:
> Documentation/sphinx/kernel_include.py
>
> E.g. use something like:
>
> from difflib import get_close_matches
>
> matches = get_close_matches(decl_name, possible_names)
>
> See: https://docs.python.org/3/library/difflib.html#difflib.get_close_matches
>
> If the problem is due to a typo, this will likely return the
> right name.
The checks here specifically were added to deal with situations like
[1] which boils down to:
struct {
/** @flags: good description */
int flags;
/** @substruct: also good */
struct {
/** @mode: bad, wrong, no good */
int mode;
} substruct;
} big_block_o_data;
The docs should say "@substruct.mode" instead of just "@mode", so this
is distant enough from the actual input that difflib would not suggest
it. I could merge suggestions from both difflib and the plain substring
comparison if you'd like me to?
[1] https://patchwork.freedesktop.org/patch/734307/?series=168905&rev=1
>
> Regards,
> Mauro
Thanks, Ryszard
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v2] scripts/kernel-doc: Suggest possible names for excess descriptions
2026-07-15 13:21 ` Knop, Ryszard
@ 2026-07-15 13:52 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 7+ messages in thread
From: Mauro Carvalho Chehab @ 2026-07-15 13:52 UTC (permalink / raw)
To: Knop, Ryszard
Cc: intel-xe@lists.freedesktop.org, Lin, Shuicheng,
linux-doc@vger.kernel.org, rdunlap@infradead.org,
jani.nikula@linux.intel.com, linux-kernel@vger.kernel.org
On Wed, 15 Jul 2026 13:21:27 +0000
"Knop, Ryszard" <ryszard.knop@intel.com> wrote:
> On Wed, 2026-07-15 at 14:42 +0200, Mauro Carvalho Chehab wrote:
> > On Wed, 15 Jul 2026 13:17:26 +0200
> > Ryszard Knop <ryszard.knop@intel.com> wrote:
> >
> > > Since check_sections() now warns if a documentation tag member name is
> > > the same as defined in the struct, we can suggest names the checker
> > > knows, so that it's more obvious how to deal with the warning.
> > >
> > > v2 (rdunlap):
> > > - Strip whitespace from warnings, nicer when the hint is empty
> > >
> > > Signed-off-by: Ryszard Knop <ryszard.knop@intel.com>
> > > ---
> > > tools/lib/python/kdoc/kdoc_parser.py | 13 +++++++++++--
> > > 1 file changed, 11 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/tools/lib/python/kdoc/kdoc_parser.py b/tools/lib/python/kdoc/kdoc_parser.py
> > > index 2dedda215c22..a22c3e3182f0 100644
> > > --- a/tools/lib/python/kdoc/kdoc_parser.py
> > > +++ b/tools/lib/python/kdoc/kdoc_parser.py
> > > @@ -558,6 +558,13 @@ class KernelDoc:
> > > self.push_parameter(ln, decl_type, param, dtype,
> > > arg, declaration_name)
> > >
> > > + def get_suggestions_hint(self, decl_name, possible_names):
> > > + suggestions = set(name for name in possible_names if decl_name in name)
> > > + if not suggestions:
> > > + return ""
> > > +
> > > + return f"(did you mean one of: '{"', '".join(suggestions)}')"
> > > +
> >
> > There is a better way to propose suggestions. See:
> > Documentation/sphinx/kernel_include.py
> >
> > E.g. use something like:
> >
> > from difflib import get_close_matches
> >
> > matches = get_close_matches(decl_name, possible_names)
> >
> > See: https://docs.python.org/3/library/difflib.html#difflib.get_close_matches
> >
> > If the problem is due to a typo, this will likely return the
> > right name.
>
> The checks here specifically were added to deal with situations like
> [1] which boils down to:
>
> struct {
> /** @flags: good description */
> int flags;
>
> /** @substruct: also good */
> struct {
> /** @mode: bad, wrong, no good */
> int mode;
> } substruct;
> } big_block_o_data;
>
> The docs should say "@substruct.mode" instead of just "@mode", so this
> is distant enough from the actual input that difflib would not suggest
> it.
Ok, but there should be cases like, instead of "mode", someone writes
for instance "modes".
> I could merge suggestions from both difflib and the plain substring
> comparison if you'd like me to?
Makes sense to me. Just ensure that they aren't duplicated.
>
> [1] https://patchwork.freedesktop.org/patch/734307/?series=168905&rev=1
>
> >
> > Regards,
> > Mauro
>
> Thanks, Ryszard
--
Thanks,
Mauro
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-07-15 13:52 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 11:12 [PATCH] scripts/kernel-doc: Suggest possible names for excess descriptions Ryszard Knop
2026-07-14 21:44 ` Randy Dunlap
2026-07-15 11:18 ` Knop, Ryszard
2026-07-15 11:17 ` [PATCH v2] " Ryszard Knop
2026-07-15 12:42 ` Mauro Carvalho Chehab
2026-07-15 13:21 ` Knop, Ryszard
2026-07-15 13:52 ` Mauro Carvalho Chehab
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox