docs: parser_yaml.py: add support for line numbers from the parser

Instead of printing line numbers from the temp converted ReST
file, get them from the original source.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
pull/1354/merge
Mauro Carvalho Chehab 2025-06-17 17:54:03 +02:00
parent ad06a878a3
commit 0b24dfdd12
2 changed files with 22 additions and 6 deletions

View File

@ -54,6 +54,8 @@ class YamlParser(Parser):
netlink_parser = YnlDocGenerator()
re_lineno = re.compile(r"\.\. LINENO ([0-9]+)$")
def rst_parse(self, inputstring, document, msg):
"""
Receives a ReST content that was previously converted by the
@ -66,8 +68,14 @@ class YamlParser(Parser):
try:
# Parse message with RSTParser
for i, line in enumerate(msg.split('\n')):
result.append(line, document.current_source, i)
lineoffset = 0;
for line in msg.split('\n'):
match = self.re_lineno.match(line)
if match:
lineoffset = int(match.group(1))
continue
result.append(line, document.current_source, lineoffset)
rst_parser = RSTParser()
rst_parser.parse('\n'.join(result), document)

View File

@ -158,9 +158,11 @@ class YnlDocGenerator:
def parse_do(self, do_dict: Dict[str, Any], level: int = 0) -> str:
"""Parse 'do' section and return a formatted string"""
lines = []
if LINE_STR in do_dict:
lines.append(self.fmt.rst_lineno(do_dict[LINE_STR]))
for key in do_dict.keys():
if key == LINE_STR:
lines.append(self.fmt.rst_lineno(do_dict[key]))
continue
lines.append(self.fmt.rst_paragraph(self.fmt.bold(key), level + 1))
if key in ['request', 'reply']:
@ -187,13 +189,15 @@ class YnlDocGenerator:
lines = []
for operation in operations:
if LINE_STR in operation:
lines.append(self.fmt.rst_lineno(operation[LINE_STR]))
lines.append(self.fmt.rst_section(namespace, 'operation',
operation["name"]))
lines.append(self.fmt.rst_paragraph(operation["doc"]) + "\n")
for key in operation.keys():
if key == LINE_STR:
lines.append(self.fmt.rst_lineno(operation[key]))
continue
if key in preprocessed:
@ -253,10 +257,12 @@ class YnlDocGenerator:
lines = []
for definition in defs:
if LINE_STR in definition:
lines.append(self.fmt.rst_lineno(definition[LINE_STR]))
lines.append(self.fmt.rst_section(namespace, 'definition', definition["name"]))
for k in definition.keys():
if k == LINE_STR:
lines.append(self.fmt.rst_lineno(definition[k]))
continue
if k in preprocessed + ignored:
continue
@ -284,6 +290,9 @@ class YnlDocGenerator:
lines.append(self.fmt.rst_section(namespace, 'attribute-set',
entry["name"]))
for attr in entry["attributes"]:
if LINE_STR in attr:
lines.append(self.fmt.rst_lineno(attr[LINE_STR]))
type_ = attr.get("type")
attr_line = attr["name"]
if type_:
@ -294,7 +303,6 @@ class YnlDocGenerator:
for k in attr.keys():
if k == LINE_STR:
lines.append(self.fmt.rst_lineno(attr[k]))
continue
if k in preprocessed + ignored:
continue