2025-07-01 15:31:11 -06:00
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
|
|
#
|
|
|
|
|
|
# A class that will, eventually, encapsulate all of the parsed data that we
|
|
|
|
|
|
# then pass into the output modules.
|
|
|
|
|
|
#
|
|
|
|
|
|
|
2026-01-19 17:23:11 +01:00
|
|
|
|
"""
|
|
|
|
|
|
Data class to store a kernel-doc Item.
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2025-07-01 15:31:11 -06:00
|
|
|
|
class KdocItem:
|
2026-01-19 17:23:11 +01:00
|
|
|
|
"""
|
|
|
|
|
|
A class that will, eventually, encapsulate all of the parsed data that we
|
|
|
|
|
|
then pass into the output modules.
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-03-23 10:10:50 +01:00
|
|
|
|
def __init__(self, name, fname, type, start_line,
|
|
|
|
|
|
**other_stuff):
|
2025-07-01 15:31:11 -06:00
|
|
|
|
self.name = name
|
2025-10-01 16:13:59 +02:00
|
|
|
|
self.fname = fname
|
2025-07-01 15:31:11 -06:00
|
|
|
|
self.type = type
|
|
|
|
|
|
self.declaration_start_line = start_line
|
2025-07-01 16:47:59 -06:00
|
|
|
|
self.sections = {}
|
|
|
|
|
|
self.sections_start_lines = {}
|
2025-07-02 13:05:56 -06:00
|
|
|
|
self.parameterlist = []
|
2026-03-18 10:11:06 +01:00
|
|
|
|
self.parameterdesc_start_lines = {}
|
2025-07-02 13:05:56 -06:00
|
|
|
|
self.parameterdescs = {}
|
|
|
|
|
|
self.parametertypes = {}
|
2026-03-18 10:11:07 +01:00
|
|
|
|
|
|
|
|
|
|
self.warnings = []
|
|
|
|
|
|
|
2025-07-01 15:31:11 -06:00
|
|
|
|
#
|
|
|
|
|
|
# Just save everything else into our own dict so that the output
|
|
|
|
|
|
# side can grab it directly as before. As we move things into more
|
|
|
|
|
|
# structured data, this will, hopefully, fade away.
|
|
|
|
|
|
#
|
2026-03-18 10:11:07 +01:00
|
|
|
|
known_keys = {
|
|
|
|
|
|
'declaration_start_line',
|
|
|
|
|
|
'sections',
|
|
|
|
|
|
'sections_start_lines',
|
|
|
|
|
|
'parameterlist',
|
|
|
|
|
|
'parameterdesc_start_lines',
|
|
|
|
|
|
'parameterdescs',
|
|
|
|
|
|
'parametertypes',
|
|
|
|
|
|
'warnings',
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
self.other_stuff = {}
|
|
|
|
|
|
for k, v in other_stuff.items():
|
|
|
|
|
|
if k in known_keys:
|
|
|
|
|
|
setattr(self, k, v) # real attribute
|
|
|
|
|
|
else:
|
|
|
|
|
|
self.other_stuff[k] = v
|
2025-07-01 15:31:11 -06:00
|
|
|
|
|
|
|
|
|
|
def get(self, key, default = None):
|
2026-01-19 17:23:11 +01:00
|
|
|
|
"""
|
|
|
|
|
|
Get a value from optional keys.
|
|
|
|
|
|
"""
|
2025-07-02 13:55:56 -06:00
|
|
|
|
return self.other_stuff.get(key, default)
|
2025-07-01 15:31:11 -06:00
|
|
|
|
|
|
|
|
|
|
def __getitem__(self, key):
|
|
|
|
|
|
return self.get(key)
|
2025-07-01 16:47:59 -06:00
|
|
|
|
|
2026-03-23 10:10:50 +01:00
|
|
|
|
def __repr__(self):
|
|
|
|
|
|
return f"KdocItem({self.name}, {self.fname}, {self.type}, {self.declaration_start_line})"
|
|
|
|
|
|
|
2026-03-18 10:11:07 +01:00
|
|
|
|
@classmethod
|
|
|
|
|
|
def from_dict(cls, d):
|
|
|
|
|
|
"""Create a KdocItem from a plain dict."""
|
|
|
|
|
|
|
|
|
|
|
|
cp = d.copy()
|
|
|
|
|
|
name = cp.pop('name', None)
|
|
|
|
|
|
fname = cp.pop('fname', None)
|
|
|
|
|
|
type = cp.pop('type', None)
|
|
|
|
|
|
start_line = cp.pop('start_line', 1)
|
|
|
|
|
|
other_stuff = cp.pop('other_stuff', {})
|
|
|
|
|
|
|
|
|
|
|
|
# Everything that’s left goes straight to __init__
|
|
|
|
|
|
return cls(name, fname, type, start_line, **cp, **other_stuff)
|
|
|
|
|
|
|
2025-07-01 16:47:59 -06:00
|
|
|
|
#
|
2025-07-02 13:05:56 -06:00
|
|
|
|
# Tracking of section and parameter information.
|
2025-07-01 16:47:59 -06:00
|
|
|
|
#
|
|
|
|
|
|
def set_sections(self, sections, start_lines):
|
2026-01-19 17:23:11 +01:00
|
|
|
|
"""
|
|
|
|
|
|
Set sections and start lines.
|
|
|
|
|
|
"""
|
2025-07-01 16:47:59 -06:00
|
|
|
|
self.sections = sections
|
2026-03-18 10:11:08 +01:00
|
|
|
|
self.sections_start_lines = start_lines
|
2025-07-02 13:05:56 -06:00
|
|
|
|
|
|
|
|
|
|
def set_params(self, names, descs, types, starts):
|
2026-01-19 17:23:11 +01:00
|
|
|
|
"""
|
|
|
|
|
|
Set parameter list: names, descriptions, types and start lines.
|
|
|
|
|
|
"""
|
2025-07-02 13:05:56 -06:00
|
|
|
|
self.parameterlist = names
|
|
|
|
|
|
self.parameterdescs = descs
|
|
|
|
|
|
self.parametertypes = types
|
|
|
|
|
|
self.parameterdesc_start_lines = starts
|