docs: kdoc: Some rewrite_struct_members() commenting

Add comments to rewrite_struct_members() describing what it is actually
doing, and reformat/comment the main struct_members regex so that it is
(more) comprehensible to humans.

Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Link: https://lore.kernel.org/r/20250807211639.47286-10-corbet@lwn.net
This commit is contained in:
Jonathan Corbet
2025-08-07 15:16:36 -06:00
parent fb20e61039
commit a8c4b0a8f1

View File

@@ -647,22 +647,28 @@ class KernelDoc:
return (r.group(1), r.group(3), r.group(2))
return None
#
# Rewrite the members of a structure or union for easier formatting later on.
# Among other things, this function will turn a member like:
#
# struct { inner_members; } foo;
#
# into:
#
# struct foo; inner_members;
#
def rewrite_struct_members(self, members):
# Split nested struct/union elements
#
# This loop was simpler at the original kernel-doc perl version, as
# while ($members =~ m/$struct_members/) { ... }
# reads 'members' string on each interaction.
# Process struct/union members from the most deeply nested outward. The
# trick is in the ^{ below - it prevents a match of an outer struct/union
# until the inner one has been munged (removing the "{" in the process).
#
# Python behavior is different: it parses 'members' only once,
# creating a list of tuples from the first interaction.
#
# On other words, this won't get nested structs.
#
# So, we need to have an extra loop on Python to override such
# re limitation.
struct_members = KernRe(r'(struct|union)([^\{\};]+)(\{)([^\{\}]*)(\})([^\{\};]*)(;)')
struct_members = KernRe(r'(struct|union)' # 0: declaration type
r'([^\{\};]+)' # 1: possible name
r'(\{)'
r'([^\{\}]*)' # 3: Contents of declaration
r'(\})'
r'([^\{\};]*)(;)') # 5: Remaining stuff after declaration
tuples = struct_members.findall(members)
while tuples:
for t in tuples: