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>,
Jakub Kicinski <kuba@kernel.org>,
Simon Horman <horms@kernel.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 v9 12/13] docs: parser_yaml.py: add support for line numbers from the parser
Date: Fri, 11 Jul 2025 10:51:37 +0100 [thread overview]
Message-ID: <m2ecun5a3a.fsf@gmail.com> (raw)
In-Reply-To: <20250710195757.02e8844a@sal.lan>
Mauro Carvalho Chehab <mchehab+huawei@kernel.org> writes:
> Em Thu, 10 Jul 2025 15:25:20 +0100
> Donald Hunter <donald.hunter@gmail.com> escreveu:
>
>> Donald Hunter <donald.hunter@gmail.com> writes:
>>
>> >> # 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)
>> >
>> > I expect this would need to be source=document.current_source, offset=lineoffset
>>
>> Ignore that. I see it's not kwargs. It's just the issue below.
>>
>> >> rst_parser = RSTParser()
>> >> rst_parser.parse('\n'.join(result), document)
>> >
>> > But anyway this discards any line information by just concatenating the
>> > lines together again.
>>
>> Looks to me like there's no Parser() API that works with ViewList() so
>> it would be necessary to directly use the docutils RSTStateMachine() for
>> this approach to work.
>
> It sounds so.
>
> The enclosed patch seems to address it:
>
> $ make cleandocs; make SPHINXDIRS="netlink/specs" htmldocs
> ...
> Using alabaster theme
> source directory: netlink/specs
> Using Python kernel-doc
> /new_devel/v4l/docs/Documentation/netlink/specs/rt-neigh.yaml:13: ERROR: Unknown directive type "bogus".
>
> .. bogus:: [docutils]
>
> Please notice that I added a hunk there to generate the error, just
> to make easier to test - I'll drop it at the final version, and add
> the proper reported-by/closes/... tags once you test it.
>
> Regards,
> Mauro
Awesome!
Tested-by: Donald Hunter <donald.hunter@gmail.com>
Patch comments below.
> [PATCH RFC] sphinx: parser_yaml.py: preserve line numbers
>
> Instead of converting viewlist to text, use it directly, if
> docutils supports it.
>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
>
> diff --git a/Documentation/netlink/specs/rt-neigh.yaml b/Documentation/netlink/specs/rt-neigh.yaml
> index e9cba164e3d1..937d2563f151 100644
> --- a/Documentation/netlink/specs/rt-neigh.yaml
> +++ b/Documentation/netlink/specs/rt-neigh.yaml
> @@ -11,6 +11,7 @@ doc:
> definitions:
> -
> name: ndmsg
> + doc: ".. bogus::"
> type: struct
> members:
> -
> diff --git a/Documentation/sphinx/parser_yaml.py b/Documentation/sphinx/parser_yaml.py
> index 1602b31f448e..2a2faaf759ef 100755
> --- a/Documentation/sphinx/parser_yaml.py
> +++ b/Documentation/sphinx/parser_yaml.py
> @@ -11,7 +11,9 @@ import sys
>
> from pprint import pformat
>
> +from docutils import nodes, statemachine
nodes is not used
> from docutils.parsers.rst import Parser as RSTParser
This import is no longer needed
> +from docutils.parsers.rst import states
> from docutils.statemachine import ViewList
>
> from sphinx.util import logging
> @@ -66,10 +68,24 @@ class YamlParser(Parser):
I'm wondering if it makes much sense for this to inherit from Parser any
more?
>
> result = ViewList()
>
> + tab_width = 8
> +
> + self.state_classes = states.state_classes
> + self.initial_state = 'Body'
> +
> + self.statemachine = states.RSTStateMachine(
> + state_classes=self.state_classes,
> + initial_state=self.initial_state,
> + debug=document.reporter.debug_flag)
I don't think 'self.' is needed for any of these. They can be local to
the method. You could just inline states.state_classes and 'Body' into
the parameter list.
> +
> try:
> # Parse message with RSTParser
Comment is out of date.
> lineoffset = 0;
Rogue semicolon
> - for line in msg.split('\n'):
> +
> + lines = statemachine.string2lines(msg, tab_width,
> + convert_whitespace=True)
> +
> + for line in lines:
> match = self.re_lineno.match(line)
> if match:
> lineoffset = int(match.group(1))
> @@ -77,12 +93,7 @@ class YamlParser(Parser):
>
> result.append(line, document.current_source, lineoffset)
>
> - # Fix backward compatibility with docutils < 0.17.1
> - if "tab_width" not in vars(document.settings):
> - document.settings.tab_width = 8
> -
> - rst_parser = RSTParser()
> - rst_parser.parse('\n'.join(result), document)
> + self.statemachine.run(result, document, inliner=None)
>
> except Exception as e:
I think you could catch StateMachineError here.
> document.reporter.error("YAML parsing error: %s" % pformat(e))
Can you change this to an f"" string.
next prev parent reply other threads:[~2025-07-11 11:15 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-09 15:58 [PATCH v9 00/13] Don't generate netlink .rst files inside $(srctree) Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 01/13] docs: netlink: netlink-raw.rst: use :ref: instead of :doc: Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 02/13] tools: ynl_gen_rst.py: Split library from command line tool Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 03/13] docs: netlink: index.rst: add a netlink index file Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 04/13] tools: ynl_gen_rst.py: cleanup coding style Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 05/13] docs: sphinx: add a parser for yaml files for Netlink specs Mauro Carvalho Chehab
2025-07-10 8:27 ` Donald Hunter
2025-07-09 15:58 ` [PATCH v9 06/13] docs: use parser_yaml extension to handle " Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 07/13] docs: uapi: netlink: update netlink specs link Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 08/13] tools: ynl_gen_rst.py: drop support for generating index files Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 09/13] docs: netlink: remove obsolete .gitignore from unused directory Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 10/13] MAINTAINERS: add netlink_yml_parser.py to linux-doc Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 11/13] tools: netlink_yml_parser.py: add line numbers to parsed data Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 12/13] docs: parser_yaml.py: add support for line numbers from the parser Mauro Carvalho Chehab
2025-07-10 11:25 ` Donald Hunter
2025-07-10 14:25 ` Donald Hunter
2025-07-10 17:57 ` Mauro Carvalho Chehab
2025-07-11 9:51 ` Donald Hunter [this message]
2025-07-11 17:40 ` Mauro Carvalho Chehab
2025-07-09 15:58 ` [PATCH v9 13/13] docs: parser_yaml.py: fix backward compatibility with old docutils Mauro Carvalho Chehab
2025-07-11 8:36 ` [PATCH v9 14/13] sphinx: parser_yaml.py: fix line numbers information 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=m2ecun5a3a.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=horms@kernel.org \
--cc=ignacio@iencinas.com \
--cc=joel@joelfernandes.org \
--cc=jstancek@redhat.com \
--cc=kuba@kernel.org \
--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.