From: Donald Hunter <donald.hunter@gmail.com>
To: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Cc: Linux Doc Mailing List <linux-doc@vger.kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
"Akira Yokosawa" <akiyks@gmail.com>,
"Breno Leitao" <leitao@debian.org>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Ignacio Encinas Rubio" <ignacio@iencinas.com>,
"Jan Stancek" <jstancek@redhat.com>,
"Marco Elver" <elver@google.com>,
"Paolo Abeni" <pabeni@redhat.com>,
"Randy Dunlap" <rdunlap@infradead.org>,
"Ruben Wauters" <rubenru09@aol.com>,
"Shuah Khan" <skhan@linuxfoundation.org>,
joel@joelfernandes.org, linux-kernel-mentees@lists.linux.dev,
linux-kernel@vger.kernel.org, lkmm@lists.linux.dev,
netdev@vger.kernel.org, peterz@infradead.org,
stern@rowland.harvard.edu
Subject: Re: [PATCH v8 05/13] docs: sphinx: add a parser for yaml files for Netlink specs
Date: Fri, 27 Jun 2025 11:25:54 +0100 [thread overview]
Message-ID: <m21pr5a3bh.fsf@gmail.com> (raw)
In-Reply-To: <8373667e90bf5b184dfd28393fe6a955cdb4bbb7.1750925410.git.mchehab+huawei@kernel.org>
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> writes:
> Add a simple sphinx.Parser to handle yaml files and add the
> the code to handle Netlink specs. All other yaml files are
> ignored.
>
> The code was written in a way that parsing yaml for different
> subsystems and even for different parts of Netlink are easy.
>
> All it takes to have a different parser is to add an
> import line similar to:
>
> from netlink_yml_parser import YnlDocGenerator
This should be: from doc_generator import YnlDocGenerator
> adding the corresponding parser somewhere at the extension:
>
> netlink_parser = YnlDocGenerator()
>
> And then add a logic inside parse() to handle different
> doc outputs, depending on the file location, similar to:
>
> if "/netlink/specs/" in fname:
> msg = self.netlink_parser.parse_yaml_file(fname)
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> ---
> Documentation/sphinx/parser_yaml.py | 104 ++++++++++++++++++++++++++++
> 1 file changed, 104 insertions(+)
> create mode 100755 Documentation/sphinx/parser_yaml.py
>
> diff --git a/Documentation/sphinx/parser_yaml.py b/Documentation/sphinx/parser_yaml.py
> new file mode 100755
> index 000000000000..585a7ec81ba0
> --- /dev/null
> +++ b/Documentation/sphinx/parser_yaml.py
> @@ -0,0 +1,104 @@
> +# SPDX-License-Identifier: GPL-2.0
> +# Copyright 2025 Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
> +
> +"""
> +Sphinx extension for processing YAML files
> +"""
> +
> +import os
> +import re
> +import sys
> +
> +from pprint import pformat
> +
> +from docutils.parsers.rst import Parser as RSTParser
> +from docutils.statemachine import ViewList
> +
> +from sphinx.util import logging
> +from sphinx.parsers import Parser
> +
> +srctree = os.path.abspath(os.environ["srctree"])
> +sys.path.insert(0, os.path.join(srctree, "tools/net/ynl/pyynl"))
So that it doesn't need to be changed in a later patch, this should be:
... "tools/net/ynl/pyynl/lib"
> +
> +from netlink_yml_parser import YnlDocGenerator # pylint: disable=C0413
So that it doesn't need to be changed in a later patch, this should be:
from doc_generator ...
> +logger = logging.getLogger(__name__)
> +
> +class YamlParser(Parser):
> + """
> + Kernel parser for YAML files.
> +
> + This is a simple sphinx.Parser to handle yaml files inside the
> + Kernel tree that will be part of the built documentation.
> +
> + The actual parser function is not contained here: the code was
> + written in a way that parsing yaml for different subsystems
> + can be done from a single dispatcher.
> +
> + All it takes to have parse YAML patches is to have an import line:
> +
> + from some_parser_code import NewYamlGenerator
> +
> + To this module. Then add an instance of the parser with:
> +
> + new_parser = NewYamlGenerator()
> +
> + and add a logic inside parse() to handle it based on the path,
> + like this:
> +
> + if "/foo" in fname:
> + msg = self.new_parser.parse_yaml_file(fname)
> + """
> +
> + supported = ('yaml', )
> +
> + netlink_parser = YnlDocGenerator()
> +
> + def rst_parse(self, inputstring, document, msg):
> + """
> + Receives a ReST content that was previously converted by the
> + YAML parser, adding it to the document tree.
> + """
> +
> + self.setup_parse(inputstring, document)
> +
> + result = ViewList()
> +
> + try:
> + # Parse message with RSTParser
> + for i, line in enumerate(msg.split('\n')):
> + result.append(line, document.current_source, i)
> +
> + rst_parser = RSTParser()
> + rst_parser.parse('\n'.join(result), document)
> +
> + except Exception as e:
> + document.reporter.error("YAML parsing error: %s" % pformat(e))
> +
> + self.finish_parse()
> +
> + # Overrides docutils.parsers.Parser. See sphinx.parsers.RSTParser
> + def parse(self, inputstring, document):
> + """Check if a YAML is meant to be parsed."""
> +
> + fname = document.current_source
> +
> + # Handle netlink yaml specs
> + if "/netlink/specs/" in fname:
> + msg = self.netlink_parser.parse_yaml_file(fname)
> + self.rst_parse(inputstring, document, msg)
> +
> + # All other yaml files are ignored
> +
> +def setup(app):
> + """Setup function for the Sphinx extension."""
> +
> + # Add YAML parser
> + app.add_source_parser(YamlParser)
> + app.add_source_suffix('.yaml', 'yaml')
> +
> + return {
> + 'version': '1.0',
> + 'parallel_read_safe': True,
> + 'parallel_write_safe': True,
> + }
next prev parent reply other threads:[~2025-06-27 11:04 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-26 8:12 [PATCH v8 00/13] Don't generate netlink .rst files inside $(srctree) Mauro Carvalho Chehab
2025-06-26 8:12 ` [PATCH v8 01/13] docs: netlink: netlink-raw.rst: use :ref: instead of :doc: Mauro Carvalho Chehab
2025-06-26 8:12 ` [PATCH v8 02/13] tools: ynl_gen_rst.py: Split library from command line tool Mauro Carvalho Chehab
2025-06-27 10:29 ` Donald Hunter
2025-06-26 8:12 ` [PATCH v8 03/13] docs: netlink: index.rst: add a netlink index file Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 04/13] tools: ynl_gen_rst.py: cleanup coding style Mauro Carvalho Chehab
2025-06-27 10:41 ` Donald Hunter
2025-06-26 8:13 ` [PATCH v8 05/13] docs: sphinx: add a parser for yaml files for Netlink specs Mauro Carvalho Chehab
2025-06-27 10:25 ` Donald Hunter [this message]
2025-06-26 8:13 ` [PATCH v8 06/13] docs: use parser_yaml extension to handle " Mauro Carvalho Chehab
2025-06-27 10:28 ` Donald Hunter
2025-07-09 15:25 ` Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 07/13] docs: uapi: netlink: update netlink specs link Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 08/13] tools: ynl_gen_rst.py: drop support for generating index files Mauro Carvalho Chehab
2025-06-27 10:49 ` Donald Hunter
2025-06-26 8:13 ` [PATCH v8 09/13] docs: netlink: remove obsolete .gitignore from unused directory Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 10/13] MAINTAINERS: add netlink_yml_parser.py to linux-doc Mauro Carvalho Chehab
2025-06-27 10:50 ` Donald Hunter
2025-06-26 8:13 ` [PATCH v8 11/13] tools: netlink_yml_parser.py: add line numbers to parsed data Mauro Carvalho Chehab
2025-06-27 11:03 ` Donald Hunter
2025-07-09 15:44 ` Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 12/13] docs: parser_yaml.py: add support for line numbers from the parser Mauro Carvalho Chehab
2025-06-26 8:13 ` [PATCH v8 13/13] docs: parser_yaml.py: fix backward compatibility with old docutils Mauro Carvalho Chehab
2025-06-26 23:59 ` Akira Yokosawa
2025-06-27 6:48 ` Mauro Carvalho Chehab
2025-06-27 8:37 ` Akira Yokosawa
2025-07-09 15:16 ` Mauro Carvalho Chehab
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m21pr5a3bh.fsf@gmail.com \
--to=donald.hunter@gmail.com \
--cc=akiyks@gmail.com \
--cc=corbet@lwn.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=elver@google.com \
--cc=ignacio@iencinas.com \
--cc=joel@joelfernandes.org \
--cc=jstancek@redhat.com \
--cc=leitao@debian.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel-mentees@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=lkmm@lists.linux.dev \
--cc=mchehab+huawei@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=peterz@infradead.org \
--cc=rdunlap@infradead.org \
--cc=rubenru09@aol.com \
--cc=skhan@linuxfoundation.org \
--cc=stern@rowland.harvard.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.