Skip to content

Commit 5d77dcc

Browse files
author
Jonathan Corbet
committed
docs: kdoc: pretty up dump_enum()
Add some comments to dump_enum to help the next person who has to figure out what it is actually doing. Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Tested-by: Akira Yokosawa <akiyks@gmail.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Link: https://lore.kernel.org/r/20250703184403.274408-8-corbet@lwn.net
1 parent 92fb809 commit 5d77dcc

1 file changed

Lines changed: 25 additions & 14 deletions

File tree

scripts/lib/kdoc/kdoc_parser.py

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -860,39 +860,48 @@ def dump_enum(self, ln, proto):
860860
# Strip #define macros inside enums
861861
proto = KernRe(r'#\s*((define|ifdef|if)\s+|endif)[^;]*;', flags=re.S).sub('', proto)
862862

863-
members = None
864-
declaration_name = None
865-
863+
#
864+
# Parse out the name and members of the enum. Typedef form first.
865+
#
866866
r = KernRe(r'typedef\s+enum\s*\{(.*)\}\s*(\w*)\s*;')
867867
if r.search(proto):
868868
declaration_name = r.group(2)
869869
members = r.group(1).rstrip()
870+
#
871+
# Failing that, look for a straight enum
872+
#
870873
else:
871874
r = KernRe(r'enum\s+(\w*)\s*\{(.*)\}')
872875
if r.match(proto):
873876
declaration_name = r.group(1)
874877
members = r.group(2).rstrip()
875-
876-
if not members:
877-
self.emit_msg(ln, f"{proto}: error: Cannot parse enum!")
878-
return
879-
878+
#
879+
# OK, this isn't going to work.
880+
#
881+
else:
882+
self.emit_msg(ln, f"{proto}: error: Cannot parse enum!")
883+
return
884+
#
885+
# Make sure we found what we were expecting.
886+
#
880887
if self.entry.identifier != declaration_name:
881888
if self.entry.identifier == "":
882889
self.emit_msg(ln,
883890
f"{proto}: wrong kernel-doc identifier on prototype")
884891
else:
885892
self.emit_msg(ln,
886-
f"expecting prototype for enum {self.entry.identifier}. Prototype was for enum {declaration_name} instead")
893+
f"expecting prototype for enum {self.entry.identifier}. "
894+
f"Prototype was for enum {declaration_name} instead")
887895
return
888896

889897
if not declaration_name:
890898
declaration_name = "(anonymous)"
891-
899+
#
900+
# Parse out the name of each enum member, and verify that we
901+
# have a description for it.
902+
#
892903
member_set = set()
893-
894-
members = KernRe(r'\([^;]*?[\)]').sub('', members)
895-
904+
members = KernRe(r'\([^;)]*\)').sub('', members)
896905
for arg in members.split(','):
897906
if not arg:
898907
continue
@@ -903,7 +912,9 @@ def dump_enum(self, ln, proto):
903912
self.emit_msg(ln,
904913
f"Enum value '{arg}' not described in enum '{declaration_name}'")
905914
member_set.add(arg)
906-
915+
#
916+
# Ensure that every described member actually exists in the enum.
917+
#
907918
for k in self.entry.parameterdescs:
908919
if k not in member_set:
909920
self.emit_msg(ln,

0 commit comments

Comments
 (0)