mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
tools: docs: parse_data_structs.py: add namespace support
C domain supports a ".. c:namespace::" tag that allows setting a
symbol namespace. This is used within the kernel to avoid warnings
about duplicated symbols. This is specially important for syscalls,
as each subsystem may have their own documentation for them.
This is specially true for ioctl.
When such tag is used, all C domain symbols have c++ style,
e.g. they'll become "{namespace}.{reference}".
Allow specifying C namespace at the exception files, avoiding
the need of override rules for every symbol.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
Message-ID: <cc27ec60ceb3bdac4197fb7266d2df8155edacda.1759329363.git.mchehab+huawei@kernel.org>
This commit is contained in:
committed by
Jonathan Corbet
parent
2cdd27a708
commit
7f809e6a6f
@@ -53,11 +53,19 @@ class ParseDataStructs:
|
||||
|
||||
replace <type> <old_symbol> <new_reference>
|
||||
|
||||
Replaces how old_symbol with a new reference. The new_reference can be:
|
||||
Replaces how old_symbol with a new reference. The new_reference can be:
|
||||
|
||||
- A simple symbol name;
|
||||
- A full Sphinx reference.
|
||||
|
||||
On both cases, <type> can be:
|
||||
3. Namespace rules
|
||||
|
||||
namespace <namespace>
|
||||
|
||||
Sets C namespace to be used during cross-reference generation. Can
|
||||
be overridden by replace rules.
|
||||
|
||||
On ignore and replace rules, <type> can be:
|
||||
- ioctl: for defines that end with _IO*, e.g. ioctl definitions
|
||||
- define: for other defines
|
||||
- symbol: for symbols defined within enums;
|
||||
@@ -71,6 +79,8 @@ class ParseDataStructs:
|
||||
ignore ioctl VIDIOC_ENUM_FMT
|
||||
replace ioctl VIDIOC_DQBUF vidioc_qbuf
|
||||
replace define V4L2_EVENT_MD_FL_HAVE_FRAME_SEQ :c:type:`v4l2_event_motion_det`
|
||||
|
||||
namespace MC
|
||||
"""
|
||||
|
||||
# Parser regexes with multiple ways to capture enums and structs
|
||||
@@ -140,6 +150,7 @@ class ParseDataStructs:
|
||||
|
||||
self.symbols = {}
|
||||
|
||||
self.namespace = None
|
||||
self.ignore = []
|
||||
self.replace = []
|
||||
|
||||
@@ -173,6 +184,11 @@ class ParseDataStructs:
|
||||
match.group(3)))
|
||||
continue
|
||||
|
||||
match = re.match(r"^namespace\s+(\S+)", line)
|
||||
if match:
|
||||
self.namespace = match.group(1)
|
||||
continue
|
||||
|
||||
sys.exit(f"{name}:{ln}: invalid line: {line}")
|
||||
|
||||
def apply_exceptions(self):
|
||||
@@ -237,18 +253,23 @@ class ParseDataStructs:
|
||||
ref_type = defs.get("ref_type")
|
||||
|
||||
# Determine ref_link based on symbol type
|
||||
if ref_type:
|
||||
if symbol_type == "enum":
|
||||
ref_link = f"{ref_type}:`{symbol}`"
|
||||
else:
|
||||
if not ref_name:
|
||||
ref_name = symbol.lower()
|
||||
if ref_type or self.namespace:
|
||||
if not ref_name:
|
||||
ref_name = symbol.lower()
|
||||
|
||||
# c-type references don't support hash
|
||||
if ref_type == ":ref" and replace_underscores:
|
||||
ref_name = ref_name.replace("_", "-")
|
||||
# c-type references don't support hash
|
||||
if ref_type == ":ref" and replace_underscores:
|
||||
ref_name = ref_name.replace("_", "-")
|
||||
|
||||
# C domain references may have namespaces
|
||||
if ref_type.startswith(":c:"):
|
||||
if self.namespace:
|
||||
ref_name = f"{self.namespace}.{ref_name}"
|
||||
|
||||
if ref_type:
|
||||
ref_link = f"{ref_type}:`{symbol} <{ref_name}>`"
|
||||
else:
|
||||
ref_link = f"`{symbol} <{ref_name}>`"
|
||||
else:
|
||||
ref_link = symbol
|
||||
|
||||
|
||||
Reference in New Issue
Block a user