[PATCH 00/12] [PATCH 00/11] Thrash up the parser/output interface

Jonathan Corbet posted 12 patches 3 months, 1 week ago
There is a newer version of this series
scripts/lib/kdoc/kdoc_files.py  |   4 +-
scripts/lib/kdoc/kdoc_item.py   |  39 ++++
scripts/lib/kdoc/kdoc_output.py | 331 ++++++++++++++------------------
scripts/lib/kdoc/kdoc_parser.py | 162 +++-------------
4 files changed, 218 insertions(+), 318 deletions(-)
create mode 100644 scripts/lib/kdoc/kdoc_item.py
[PATCH 00/12] [PATCH 00/11] Thrash up the parser/output interface
Posted by Jonathan Corbet 3 months, 1 week ago
[I'll slow down soon, honest - real work is piling up...]

The kerneldoc parsing phase gathers all of the information about the
declarations of interest, then passes it through to the output phase as a
dict that is an unstructured blob of information; this organization has its
origins in the Perl version of the program.  It results in an interface
that is difficult to reason about, dozen-parameter function calls, and
other ills.

Introduce a new class (KdocItem) to carry this information between the
parser and the output modules, and, step by step, modify the system to use
this class in a more structured way.  This could be taken further by
creating a subclass of KdocItem for each declaration type (function,
struct, ...), but that is probably more structure than we need.

As a final step, add some structure for the accumulation of the output
text.

The result is (I hope) clearer code, the removal of a bunch of boilerplate,
and no changes to the generated output.

Jonathan Corbet (12):
  docs: kdoc; Add a rudimentary class to represent output items
  docs: kdoc: simplify the output-item passing
  docs: kdoc: drop "sectionlist"
  docs: kdoc: Centralize handling of the item section list
  docs: kdoc: remove the "struct_actual" machinery
  docs: kdoc: use self.entry.parameterlist directly in check_sections()
  docs: kdoc: Coalesce parameter-list handling
  docs: kdoc: Regularize the use of the declaration name
  docs: kdoc: straighten up dump_declaration()
  docs: kdoc: directly access the always-there KdocItem fields
  docs: kdoc: clean up check_sections()
  docs: kdoc: Improve the output text accumulation

 scripts/lib/kdoc/kdoc_files.py  |   4 +-
 scripts/lib/kdoc/kdoc_item.py   |  39 ++++
 scripts/lib/kdoc/kdoc_output.py | 331 ++++++++++++++------------------
 scripts/lib/kdoc/kdoc_parser.py | 162 +++-------------
 4 files changed, 218 insertions(+), 318 deletions(-)
 create mode 100644 scripts/lib/kdoc/kdoc_item.py

-- 
2.49.0
Re: [PATCH 00/12] [PATCH 00/11] Thrash up the parser/output interface
Posted by Jonathan Corbet 3 months ago
Jonathan Corbet <corbet@lwn.net> writes:

> [I'll slow down soon, honest - real work is piling up...]
>
> The kerneldoc parsing phase gathers all of the information about the
> declarations of interest, then passes it through to the output phase as a
> dict that is an unstructured blob of information; this organization has its
> origins in the Perl version of the program.  It results in an interface
> that is difficult to reason about, dozen-parameter function calls, and
> other ills.
>
> Introduce a new class (KdocItem) to carry this information between the
> parser and the output modules, and, step by step, modify the system to use
> this class in a more structured way.  This could be taken further by
> creating a subclass of KdocItem for each declaration type (function,
> struct, ...), but that is probably more structure than we need.
>
> As a final step, add some structure for the accumulation of the output
> text.
>
> The result is (I hope) clearer code, the removal of a bunch of boilerplate,
> and no changes to the generated output.

Has anybody else had a chance to look at this?  Or should I assume it's
perfect? :)

Thanks,

jon
Re: [PATCH 00/12] [PATCH 00/11] Thrash up the parser/output interface
Posted by Mauro Carvalho Chehab 3 months ago
Em Wed, 09 Jul 2025 09:29:28 -0600
Jonathan Corbet <corbet@lwn.net> escreveu:

> Jonathan Corbet <corbet@lwn.net> writes:
> 
> > [I'll slow down soon, honest - real work is piling up...]
> >
> > The kerneldoc parsing phase gathers all of the information about the
> > declarations of interest, then passes it through to the output phase as a
> > dict that is an unstructured blob of information; this organization has its
> > origins in the Perl version of the program.  It results in an interface
> > that is difficult to reason about, dozen-parameter function calls, and
> > other ills.
> >
> > Introduce a new class (KdocItem) to carry this information between the
> > parser and the output modules, and, step by step, modify the system to use
> > this class in a more structured way.  This could be taken further by
> > creating a subclass of KdocItem for each declaration type (function,
> > struct, ...), but that is probably more structure than we need.
> >
> > As a final step, add some structure for the accumulation of the output
> > text.
> >
> > The result is (I hope) clearer code, the removal of a bunch of boilerplate,
> > and no changes to the generated output.  
> 
> Has anybody else had a chance to look at this?  Or should I assume it's
> perfect? :)

I didn't look on it yet. I'll try to look it along the week.

Regards,
Mauro
Re: [PATCH 00/12] [PATCH 00/11] Thrash up the parser/output interface
Posted by Yanteng Si 3 months ago
在 7/3/25 6:35 AM, Jonathan Corbet 写道:
> [I'll slow down soon, honest - real work is piling up...]
>
> The kerneldoc parsing phase gathers all of the information about the
> declarations of interest, then passes it through to the output phase as a
> dict that is an unstructured blob of information; this organization has its
> origins in the Perl version of the program.  It results in an interface
> that is difficult to reason about, dozen-parameter function calls, and
> other ills.
>
> Introduce a new class (KdocItem) to carry this information between the
> parser and the output modules, and, step by step, modify the system to use
> this class in a more structured way.  This could be taken further by
> creating a subclass of KdocItem for each declaration type (function,
> struct, ...), but that is probably more structure than we need.
>
> As a final step, add some structure for the accumulation of the output
> text.
>
> The result is (I hope) clearer code, the removal of a bunch of boilerplate,
> and no changes to the generated output.
>
> Jonathan Corbet (12):
>    docs: kdoc; Add a rudimentary class to represent output items
>    docs: kdoc: simplify the output-item passing
>    docs: kdoc: drop "sectionlist"
>    docs: kdoc: Centralize handling of the item section list
>    docs: kdoc: remove the "struct_actual" machinery
>    docs: kdoc: use self.entry.parameterlist directly in check_sections()
>    docs: kdoc: Coalesce parameter-list handling
>    docs: kdoc: Regularize the use of the declaration name
>    docs: kdoc: straighten up dump_declaration()
>    docs: kdoc: directly access the always-there KdocItem fields
>    docs: kdoc: clean up check_sections()
>    docs: kdoc: Improve the output text accumulation

Reviewed-by: Yanteng Si <siyanteng@cqsoftware.com.cn>


Thanks,

Yanteng