Skip to content

Commit de6f7ac

Browse files
author
Jonathan Corbet
committed
docs: kdoc: Coalesce parameter-list handling
Callers to output_declaration() always pass the parameter information from self.entry; remove all of the boilerplate arguments and just get at that information directly. Formalize its placement in the KdocItem class. It would be nice to get rid of parameterlist as well, but that has the effect of reordering the output of function parameters and struct fields to match the order in the kerneldoc comment rather than in the declaration. One could argue about which is more correct, but the ordering has been left unchanged for now. Reviewed-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
1 parent efacdf8 commit de6f7ac

3 files changed

Lines changed: 43 additions & 67 deletions

File tree

scripts/lib/kdoc/kdoc_item.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ def __init__(self, name, type, start_line, **other_stuff):
1111
self.declaration_start_line = start_line
1212
self.sections = {}
1313
self.sections_start_lines = {}
14+
self.parameterlist = []
15+
self.parameterdesc_start_lines = []
16+
self.parameterdescs = {}
17+
self.parametertypes = {}
1418
#
1519
# Just save everything else into our own dict so that the output
1620
# side can grab it directly as before. As we move things into more
@@ -28,8 +32,14 @@ def __getitem__(self, key):
2832
return self.get(key)
2933

3034
#
31-
# Tracking of section information.
35+
# Tracking of section and parameter information.
3236
#
3337
def set_sections(self, sections, start_lines):
3438
self.sections = sections
3539
self.section_start_lines = start_lines
40+
41+
def set_params(self, names, descs, types, starts):
42+
self.parameterlist = names
43+
self.parameterdescs = descs
44+
self.parametertypes = types
45+
self.parameterdesc_start_lines = starts

scripts/lib/kdoc/kdoc_output.py

Lines changed: 29 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -373,18 +373,13 @@ def out_function(self, fname, name, args):
373373
signature = args['functiontype'] + " "
374374
signature += args['function'] + " ("
375375

376-
parameterlist = args.get('parameterlist', [])
377-
parameterdescs = args.get('parameterdescs', {})
378-
parameterdesc_start_lines = args.get('parameterdesc_start_lines', {})
379-
380376
ln = args.get('declaration_start_line', 0)
381-
382377
count = 0
383-
for parameter in parameterlist:
378+
for parameter in args.parameterlist:
384379
if count != 0:
385380
signature += ", "
386381
count += 1
387-
dtype = args['parametertypes'].get(parameter, "")
382+
dtype = args.parametertypes.get(parameter, "")
388383

389384
if function_pointer.search(dtype):
390385
signature += function_pointer.group(1) + parameter + function_pointer.group(3)
@@ -419,26 +414,26 @@ def out_function(self, fname, name, args):
419414
# function prototypes apart
420415
self.lineprefix = " "
421416

422-
if parameterlist:
417+
if args.parameterlist:
423418
self.data += ".. container:: kernelindent\n\n"
424419
self.data += f"{self.lineprefix}**Parameters**\n\n"
425420

426-
for parameter in parameterlist:
421+
for parameter in args.parameterlist:
427422
parameter_name = KernRe(r'\[.*').sub('', parameter)
428-
dtype = args['parametertypes'].get(parameter, "")
423+
dtype = args.parametertypes.get(parameter, "")
429424

430425
if dtype:
431426
self.data += f"{self.lineprefix}``{dtype}``\n"
432427
else:
433428
self.data += f"{self.lineprefix}``{parameter}``\n"
434429

435-
self.print_lineno(parameterdesc_start_lines.get(parameter_name, 0))
430+
self.print_lineno(args.parameterdesc_start_lines.get(parameter_name, 0))
436431

437432
self.lineprefix = " "
438-
if parameter_name in parameterdescs and \
439-
parameterdescs[parameter_name] != KernelDoc.undescribed:
433+
if parameter_name in args.parameterdescs and \
434+
args.parameterdescs[parameter_name] != KernelDoc.undescribed:
440435

441-
self.output_highlight(parameterdescs[parameter_name])
436+
self.output_highlight(args.parameterdescs[parameter_name])
442437
self.data += "\n"
443438
else:
444439
self.data += f"{self.lineprefix}*undescribed*\n\n"
@@ -451,8 +446,6 @@ def out_enum(self, fname, name, args):
451446

452447
oldprefix = self.lineprefix
453448
name = args.get('enum', '')
454-
parameterlist = args.get('parameterlist', [])
455-
parameterdescs = args.get('parameterdescs', {})
456449
ln = args.get('declaration_start_line', 0)
457450

458451
self.data += f"\n\n.. c:enum:: {name}\n\n"
@@ -467,11 +460,11 @@ def out_enum(self, fname, name, args):
467460
self.lineprefix = outer + " "
468461
self.data += f"{outer}**Constants**\n\n"
469462

470-
for parameter in parameterlist:
463+
for parameter in args.parameterlist:
471464
self.data += f"{outer}``{parameter}``\n"
472465

473-
if parameterdescs.get(parameter, '') != KernelDoc.undescribed:
474-
self.output_highlight(parameterdescs[parameter])
466+
if args.parameterdescs.get(parameter, '') != KernelDoc.undescribed:
467+
self.output_highlight(args.parameterdescs[parameter])
475468
else:
476469
self.data += f"{self.lineprefix}*undescribed*\n\n"
477470
self.data += "\n"
@@ -505,10 +498,6 @@ def out_struct(self, fname, name, args):
505498
dtype = args.get('type', "struct")
506499
ln = args.get('declaration_start_line', 0)
507500

508-
parameterlist = args.get('parameterlist', [])
509-
parameterdescs = args.get('parameterdescs', {})
510-
parameterdesc_start_lines = args.get('parameterdesc_start_lines', {})
511-
512501
self.data += f"\n\n.. c:{dtype}:: {name}\n\n"
513502

514503
self.print_lineno(ln)
@@ -531,21 +520,21 @@ def out_struct(self, fname, name, args):
531520

532521
self.lineprefix = " "
533522
self.data += f"{self.lineprefix}**Members**\n\n"
534-
for parameter in parameterlist:
523+
for parameter in args.parameterlist:
535524
if not parameter or parameter.startswith("#"):
536525
continue
537526

538527
parameter_name = parameter.split("[", maxsplit=1)[0]
539528

540-
if parameterdescs.get(parameter_name) == KernelDoc.undescribed:
529+
if args.parameterdescs.get(parameter_name) == KernelDoc.undescribed:
541530
continue
542531

543-
self.print_lineno(parameterdesc_start_lines.get(parameter_name, 0))
532+
self.print_lineno(args.parameterdesc_start_lines.get(parameter_name, 0))
544533

545534
self.data += f"{self.lineprefix}``{parameter}``\n"
546535

547536
self.lineprefix = " "
548-
self.output_highlight(parameterdescs[parameter_name])
537+
self.output_highlight(args.parameterdescs[parameter_name])
549538
self.lineprefix = " "
550539

551540
self.data += "\n"
@@ -643,9 +632,6 @@ def out_doc(self, fname, name, args):
643632
def out_function(self, fname, name, args):
644633
"""output function in man"""
645634

646-
parameterlist = args.get('parameterlist', [])
647-
parameterdescs = args.get('parameterdescs', {})
648-
649635
self.data += f'.TH "{args["function"]}" 9 "{args["function"]}" "{self.man_date}" "Kernel Hacker\'s Manual" LINUX' + "\n"
650636

651637
self.data += ".SH NAME\n"
@@ -661,11 +647,11 @@ def out_function(self, fname, name, args):
661647
parenth = "("
662648
post = ","
663649

664-
for parameter in parameterlist:
665-
if count == len(parameterlist) - 1:
650+
for parameter in args.parameterlist:
651+
if count == len(args.parameterlist) - 1:
666652
post = ");"
667653

668-
dtype = args['parametertypes'].get(parameter, "")
654+
dtype = args.parametertypes.get(parameter, "")
669655
if function_pointer.match(dtype):
670656
# Pointer-to-function
671657
self.data += f'".BI "{parenth}{function_pointer.group(1)}" " ") ({function_pointer.group(2)}){post}"' + "\n"
@@ -676,14 +662,14 @@ def out_function(self, fname, name, args):
676662
count += 1
677663
parenth = ""
678664

679-
if parameterlist:
665+
if args.parameterlist:
680666
self.data += ".SH ARGUMENTS\n"
681667

682-
for parameter in parameterlist:
668+
for parameter in args.parameterlist:
683669
parameter_name = re.sub(r'\[.*', '', parameter)
684670

685671
self.data += f'.IP "{parameter}" 12' + "\n"
686-
self.output_highlight(parameterdescs.get(parameter_name, ""))
672+
self.output_highlight(args.parameterdescs.get(parameter_name, ""))
687673

688674
for section, text in args.sections.items():
689675
self.data += f'.SH "{section.upper()}"' + "\n"
@@ -692,7 +678,6 @@ def out_function(self, fname, name, args):
692678
def out_enum(self, fname, name, args):
693679

694680
name = args.get('enum', '')
695-
parameterlist = args.get('parameterlist', [])
696681

697682
self.data += f'.TH "{self.modulename}" 9 "enum {args["enum"]}" "{self.man_date}" "API Manual" LINUX' + "\n"
698683

@@ -703,9 +688,9 @@ def out_enum(self, fname, name, args):
703688
self.data += f"enum {args['enum']}" + " {\n"
704689

705690
count = 0
706-
for parameter in parameterlist:
691+
for parameter in args.parameterlist:
707692
self.data += f'.br\n.BI " {parameter}"' + "\n"
708-
if count == len(parameterlist) - 1:
693+
if count == len(args.parameterlist) - 1:
709694
self.data += "\n};\n"
710695
else:
711696
self.data += ", \n.br\n"
@@ -714,10 +699,10 @@ def out_enum(self, fname, name, args):
714699

715700
self.data += ".SH Constants\n"
716701

717-
for parameter in parameterlist:
702+
for parameter in args.parameterlist:
718703
parameter_name = KernRe(r'\[.*').sub('', parameter)
719704
self.data += f'.IP "{parameter}" 12' + "\n"
720-
self.output_highlight(args['parameterdescs'].get(parameter_name, ""))
705+
self.output_highlight(args.parameterdescs.get(parameter_name, ""))
721706

722707
for section, text in args.sections.items():
723708
self.data += f'.SH "{section}"' + "\n"
@@ -743,8 +728,6 @@ def out_struct(self, fname, name, args):
743728
struct_name = args.get('struct')
744729
purpose = args.get('purpose')
745730
definition = args.get('definition')
746-
parameterlist = args.get('parameterlist', [])
747-
parameterdescs = args.get('parameterdescs', {})
748731

749732
self.data += f'.TH "{module}" 9 "{struct_type} {struct_name}" "{self.man_date}" "API Manual" LINUX' + "\n"
750733

@@ -760,17 +743,17 @@ def out_struct(self, fname, name, args):
760743
self.data += f'.BI "{declaration}\n' + "};\n.br\n\n"
761744

762745
self.data += ".SH Members\n"
763-
for parameter in parameterlist:
746+
for parameter in args.parameterlist:
764747
if parameter.startswith("#"):
765748
continue
766749

767750
parameter_name = re.sub(r"\[.*", "", parameter)
768751

769-
if parameterdescs.get(parameter_name) == KernelDoc.undescribed:
752+
if args.parameterdescs.get(parameter_name) == KernelDoc.undescribed:
770753
continue
771754

772755
self.data += f'.IP "{parameter}" 12' + "\n"
773-
self.output_highlight(parameterdescs.get(parameter_name))
756+
self.output_highlight(args.parameterdescs.get(parameter_name))
774757

775758
for section, text in args.sections.items():
776759
self.data += f'.SH "{section}"' + "\n"

scripts/lib/kdoc/kdoc_parser.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,9 @@ def output_declaration(self, dtype, name, **args):
278278
if section in sections and not sections[section].rstrip():
279279
del sections[section]
280280
item.set_sections(sections, self.entry.section_start_lines)
281-
281+
item.set_params(self.entry.parameterlist, self.entry.parameterdescs,
282+
self.entry.parametertypes,
283+
self.entry.parameterdesc_start_lines)
282284
self.entries.append(item)
283285

284286
self.config.log.debug("Output: %s:%s = %s", dtype, name, pformat(args))
@@ -790,10 +792,6 @@ def dump_struct(self, ln, proto):
790792
self.output_declaration(decl_type, declaration_name,
791793
struct=declaration_name,
792794
definition=declaration,
793-
parameterlist=self.entry.parameterlist,
794-
parameterdescs=self.entry.parameterdescs,
795-
parametertypes=self.entry.parametertypes,
796-
parameterdesc_start_lines=self.entry.parameterdesc_start_lines,
797795
purpose=self.entry.declaration_purpose)
798796

799797
def dump_enum(self, ln, proto):
@@ -873,9 +871,6 @@ def dump_enum(self, ln, proto):
873871

874872
self.output_declaration('enum', declaration_name,
875873
enum=declaration_name,
876-
parameterlist=self.entry.parameterlist,
877-
parameterdescs=self.entry.parameterdescs,
878-
parameterdesc_start_lines=self.entry.parameterdesc_start_lines,
879874
purpose=self.entry.declaration_purpose)
880875

881876
def dump_declaration(self, ln, prototype):
@@ -1039,21 +1034,13 @@ def dump_function(self, ln, prototype):
10391034
function=declaration_name,
10401035
typedef=True,
10411036
functiontype=return_type,
1042-
parameterlist=self.entry.parameterlist,
1043-
parameterdescs=self.entry.parameterdescs,
1044-
parametertypes=self.entry.parametertypes,
1045-
parameterdesc_start_lines=self.entry.parameterdesc_start_lines,
10461037
purpose=self.entry.declaration_purpose,
10471038
func_macro=func_macro)
10481039
else:
10491040
self.output_declaration(decl_type, declaration_name,
10501041
function=declaration_name,
10511042
typedef=False,
10521043
functiontype=return_type,
1053-
parameterlist=self.entry.parameterlist,
1054-
parameterdescs=self.entry.parameterdescs,
1055-
parametertypes=self.entry.parametertypes,
1056-
parameterdesc_start_lines=self.entry.parameterdesc_start_lines,
10571044
purpose=self.entry.declaration_purpose,
10581045
func_macro=func_macro)
10591046

@@ -1093,10 +1080,6 @@ def dump_typedef(self, ln, proto):
10931080
function=declaration_name,
10941081
typedef=True,
10951082
functiontype=return_type,
1096-
parameterlist=self.entry.parameterlist,
1097-
parameterdescs=self.entry.parameterdescs,
1098-
parametertypes=self.entry.parametertypes,
1099-
parameterdesc_start_lines=self.entry.parameterdesc_start_lines,
11001083
purpose=self.entry.declaration_purpose)
11011084
return
11021085

0 commit comments

Comments
 (0)