kernel-doc: add support to handle DEFINE_ variables
Improve the parser and output plugin to work with macros, adding support for the common pattern of using DEFINE_* to create variables. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Signed-off-by: Jonathan Corbet <corbet@lwn.net> Message-ID: <757a45100cfc493984574ff780aa9d90506eecb4.1765894964.git.mchehab+huawei@kernel.org>master
parent
1045ec382c
commit
bdd1cf8784
|
|
@ -486,7 +486,7 @@ class RestFormat(OutputFormat):
|
|||
|
||||
self.lineprefix = " "
|
||||
|
||||
self.data += f"\n\n.. c:macro:: {name}\n\n{self.lineprefix}{full_proto}\n\n"
|
||||
self.data += f"\n\n.. c:macro:: {name}\n\n{self.lineprefix}``{full_proto}``\n\n"
|
||||
|
||||
self.print_lineno(ln)
|
||||
self.output_highlight(args.get('purpose', ''))
|
||||
|
|
@ -801,13 +801,12 @@ class ManFormat(OutputFormat):
|
|||
|
||||
def out_var(self, fname, name, args):
|
||||
out_name = self.arg_name(args, name)
|
||||
prototype = args.other_stuff["var_type"]
|
||||
full_proto = args.other_stuff["full_proto"]
|
||||
|
||||
self.data += f'.TH "{self.modulename}" 9 "{out_name}" "{self.man_date}" "API Manual" LINUX' + "\n"
|
||||
|
||||
self.data += ".SH NAME\n"
|
||||
self.data += f"{prototype} \\- {args['purpose']}\n"
|
||||
self.data += f"{name} \\- {args['purpose']}\n"
|
||||
|
||||
self.data += ".SH SYNOPSIS\n"
|
||||
self.data += f"{full_proto}\n"
|
||||
|
|
|
|||
|
|
@ -949,12 +949,27 @@ class KernelDoc:
|
|||
# Store the full prototype before modifying it
|
||||
#
|
||||
full_proto = proto
|
||||
declaration_name = None
|
||||
|
||||
#
|
||||
# Handle macro definitions
|
||||
#
|
||||
macro_prefixes = [
|
||||
KernRe(r"DEFINE_[\w_]+\s*\(([\w_]+)\)"),
|
||||
]
|
||||
|
||||
for r in macro_prefixes:
|
||||
match = r.search(proto)
|
||||
if match:
|
||||
declaration_name = match.group(1)
|
||||
break
|
||||
|
||||
#
|
||||
# Drop comments and macros to have a pure C prototype
|
||||
#
|
||||
for search, sub in sub_prefixes:
|
||||
proto = search.sub(sub, proto)
|
||||
if not declaration_name:
|
||||
for r, sub in sub_prefixes:
|
||||
proto = r.sub(sub, proto)
|
||||
|
||||
proto = proto.rstrip()
|
||||
|
||||
|
|
@ -968,14 +983,16 @@ class KernelDoc:
|
|||
return
|
||||
|
||||
var_type = r.group(0)
|
||||
declaration_name = r.group(1)
|
||||
|
||||
if not declaration_name:
|
||||
declaration_name = r.group(1)
|
||||
|
||||
default_val = r.group(2)
|
||||
if default_val:
|
||||
default_val = default_val.lstrip("=").strip()
|
||||
|
||||
self.output_declaration("var", declaration_name,
|
||||
full_proto=full_proto,
|
||||
var_type=var_type,
|
||||
default_val=default_val,
|
||||
purpose=self.entry.declaration_purpose)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue