| # 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. |
| # |
| |
| """ |
| Data class to store a kernel-doc Item. |
| """ |
| |
| class KdocItem: |
| """ |
| A class that will, eventually, encapsulate all of the parsed data that we |
| then pass into the output modules. |
| """ |
| |
| def __init__(self, name, fname, type, start_line, |
| **other_stuff): |
| self.name = name |
| self.fname = fname |
| self.type = type |
| self.declaration_start_line = start_line |
| self.sections = {} |
| self.sections_start_lines = {} |
| self.parameterlist = [] |
| self.parameterdesc_start_lines = {} |
| self.parameterdescs = {} |
| self.parametertypes = {} |
| |
| self.warnings = [] |
| |
| # |
| # 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. |
| # |
| 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 |
| |
| def get(self, key, default = None): |
| """ |
| Get a value from optional keys. |
| """ |
| return self.other_stuff.get(key, default) |
| |
| def __getitem__(self, key): |
| return self.get(key) |
| |
| def __repr__(self): |
| return f"KdocItem({self.name}, {self.fname}, {self.type}, {self.declaration_start_line})" |
| |
| @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) |
| |
| # |
| # Tracking of section and parameter information. |
| # |
| def set_sections(self, sections, start_lines): |
| """ |
| Set sections and start lines. |
| """ |
| self.sections = sections |
| self.sections_start_lines = start_lines |
| |
| def set_params(self, names, descs, types, starts): |
| """ |
| Set parameter list: names, descriptions, types and start lines. |
| """ |
| self.parameterlist = names |
| self.parameterdescs = descs |
| self.parametertypes = types |
| self.parameterdesc_start_lines = starts |