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