From: John Snow <jsnow@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel <qemu-devel@nongnu.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Hanna Reitz" <hreitz@redhat.com>,
"Michael Roth" <michael.roth@amd.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Victor Toso de Carvalho" <victortoso@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Konstantin Kostiuk" <kkostiuk@redhat.com>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Pavel Dovgalyuk" <pavel.dovgaluk@ispras.ru>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Fabiano Rosas" <farosas@suse.de>,
"Lukas Straub" <lukasstraub2@web.de>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Mads Ynddal" <mads@ynddal.dk>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Stefan Berger" <stefanb@linux.vnet.ibm.com>,
"Peter Xu" <peterx@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Cédric Le Goater" <clg@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
"Ani Sinha" <anisinha@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
Qemu-block <qemu-block@nongnu.org>,
"Jiri Pirko" <jiri@resnulli.us>,
"Alex Williamson" <alex.williamson@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>, "Eric Blake" <eblake@redhat.com>
Subject: Re: [PATCH 03/13] docs/qapidoc: delint a tiny portion of the module
Date: Wed, 19 Jun 2024 13:06:55 -0400 [thread overview]
Message-ID: <CAFn=p-Zdcgh3nQnBbBpFbeXxp7_Hq4Z-M83CGecR9mm3uWJUvQ@mail.gmail.com> (raw)
In-Reply-To: <87plsd30qm.fsf@pond.sub.org>
[-- Attachment #1: Type: text/plain, Size: 8185 bytes --]
On Wed, Jun 19, 2024, 2:28 AM Markus Armbruster <armbru@redhat.com> wrote:
> John Snow <jsnow@redhat.com> writes:
>
> > In a forthcoming series that adds a new QMP documentation generator, it
> > will be helpful to have a linting baseline. However, there's no need to
> > shuffle around the deck chairs too much, because most of this code will
> > be removed once that new qapidoc generator (the "transmogrifier") is in
> > place.
> >
> > To ease my pain: just turn off the black auto-formatter for most, but
> > not all, of qapidoc.py. This will help ensure that *new* code follows a
> > coding standard without bothering too much with cleaning up the existing
> > code.
> >
> > Code that I intend to keep is still subject to the delinting beam.
> >
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > ---
> > docs/sphinx/qapidoc.py | 66 +++++++++++++++++++++++++-----------------
> > 1 file changed, 40 insertions(+), 26 deletions(-)
> >
> > diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py
> > index f270b494f01..e675966defa 100644
> > --- a/docs/sphinx/qapidoc.py
> > +++ b/docs/sphinx/qapidoc.py
> > @@ -28,33 +28,42 @@
> > import re
> >
> > from docutils import nodes
> > +from docutils.parsers.rst import Directive, directives
> > from docutils.statemachine import ViewList
> > -from docutils.parsers.rst import directives, Directive
> > -from sphinx.errors import ExtensionError
> > -from sphinx.util.nodes import nested_parse_with_titles
> > -import sphinx
> > -from qapi.gen import QAPISchemaVisitor
> > from qapi.error import QAPIError, QAPISemError
> > +from qapi.gen import QAPISchemaVisitor
> > from qapi.schema import QAPISchema
> >
> > +import sphinx
> > +from sphinx.errors import ExtensionError
> > +from sphinx.util.nodes import nested_parse_with_titles
> > +
> >
> > # Sphinx up to 1.6 uses AutodocReporter; 1.7 and later
> > # use switch_source_input. Check borrowed from kerneldoc.py.
> > -Use_SSI = sphinx.__version__[:3] >= '1.7'
> > -if Use_SSI:
> > +USE_SSI = sphinx.__version__[:3] >= "1.7"
> > +if USE_SSI:
> > from sphinx.util.docutils import switch_source_input
> > else:
> > - from sphinx.ext.autodoc import AutodocReporter
> > + from sphinx.ext.autodoc import ( # pylint:
> disable=no-name-in-module
> > + AutodocReporter,
> > + )
> >
> >
> > -__version__ = '1.0'
> > +__version__ = "1.0"
> >
> >
> > +# Disable black auto-formatter until re-enabled:
> > +# fmt: off
> > +
> > # Function borrowed from pydash, which is under the MIT license
> > def intersperse(iterable, separator):
> > """Yield the members of *iterable* interspersed with *separator*."""
> > iterable = iter(iterable)
> > - yield next(iterable)
> > + try:
> > + yield next(iterable)
> > + except StopIteration:
> > + return
>
> This gets rid of pylint's
>
> docs/sphinx/qapidoc.py:82:10: R1708: Do not raise StopIteration in
> generator, use return statement instead (stop-iteration-return)
>
> I considered the same change some time ago, and decided against it to
> avoid deviating from pydash. StopIteration would be a programming error
> here.
>
> Please *delete* the function instead: commit fd62bff901b removed its
> last use. I'd do it in a separate commit, but that's up to you.
>
Oh! I didn't realize it wasn't being used. That's certainly easier :)
> > for item in iterable:
> > yield separator
> > yield item
> > @@ -451,6 +460,10 @@ def get_document_nodes(self):
> > return self._top_node.children
> >
> >
> > +# Turn the black formatter on for the rest of the file.
> > +# fmt: on
> > +
> > +
> > class QAPISchemaGenDepVisitor(QAPISchemaVisitor):
> > """A QAPI schema visitor which adds Sphinx dependencies each module
> >
> > @@ -458,34 +471,34 @@ class QAPISchemaGenDepVisitor(QAPISchemaVisitor):
> > that the generated documentation output depends on the input
> > schema file associated with each module in the QAPI input.
> > """
> > +
> > def __init__(self, env, qapidir):
> > self._env = env
> > self._qapidir = qapidir
> >
> > def visit_module(self, name):
> > if name != "./builtin":
> > - qapifile = self._qapidir + '/' + name
> > + qapifile = self._qapidir + "/" + name
>
> The string literal quote changes are mildly annoying. But since by your
> good work you're effectively appointing yourself maintainer of this
> file... ;)
>
Mildly. However, I do think black is "close enough" on most style issues
that I have absolutely no regret or hesitation using it for all new python
development.
(I've been using it a lot in hobby code the last year and I find it to be
remarkably helpful for my own consistency in style issues, it's
indispensable for me.)
So in this series, I start using it because I essentially wind up rewriting
this entire file and wanted an autoformatter so I could shut my brain off
for stuff like this.
A "flag day" as you call it is likely coming soon to python/ where I'll
start enforcing black standards. It just makes development easier to have a
tool that just always DTRT. When I move QAPI there, it'll get the same
treatment.
> > self._env.note_dependency(os.path.abspath(qapifile))
> > super().visit_module(name)
> >
> >
> > class QAPIDocDirective(Directive):
> > """Extract documentation from the specified QAPI .json file"""
> > +
> > required_argument = 1
> > optional_arguments = 1
> > - option_spec = {
> > - 'qapifile': directives.unchanged_required
> > - }
> > + option_spec = {"qapifile": directives.unchanged_required}
> > has_content = False
> >
> > def new_serialno(self):
> > """Return a unique new ID string suitable for use as a node's
> ID"""
> > env = self.state.document.settings.env
> > - return 'qapidoc-%d' % env.new_serialno('qapidoc')
> > + return "qapidoc-%d" % env.new_serialno("qapidoc")
> >
> > def run(self):
> > env = self.state.document.settings.env
> > - qapifile = env.config.qapidoc_srctree + '/' + self.arguments[0]
> > + qapifile = env.config.qapidoc_srctree + "/" + self.arguments[0]
> > qapidir = os.path.dirname(qapifile)
> >
> > try:
> > @@ -523,13 +536,14 @@ def do_parse(self, rstlist, node):
> > # plain self.state.nested_parse(), and so we can drop the saving
> > # of title_styles and section_level that kerneldoc.py does,
> > # because nested_parse_with_titles() does that for us.
> > - if Use_SSI:
> > + if USE_SSI:
> > with switch_source_input(self.state, rstlist):
> > nested_parse_with_titles(self.state, rstlist, node)
> > else:
> > save = self.state.memo.reporter
> > self.state.memo.reporter = AutodocReporter(
> > - rstlist, self.state.memo.reporter)
> > + rstlist, self.state.memo.reporter
> > + )
> > try:
> > nested_parse_with_titles(self.state, rstlist, node)
> > finally:
> > @@ -537,12 +551,12 @@ def do_parse(self, rstlist, node):
> >
> >
> > def setup(app):
> > - """ Register qapi-doc directive with Sphinx"""
> > - app.add_config_value('qapidoc_srctree', None, 'env')
> > - app.add_directive('qapi-doc', QAPIDocDirective)
> > + """Register qapi-doc directive with Sphinx"""
> > + app.add_config_value("qapidoc_srctree", None, "env")
> > + app.add_directive("qapi-doc", QAPIDocDirective)
> >
> > - return dict(
> > - version=__version__,
> > - parallel_read_safe=True,
> > - parallel_write_safe=True
> > - )
> > + return {
> > + "version": __version__,
> > + "parallel_read_safe": True,
> > + "parallel_write_safe": True,
> > + }
>
> With intersperse() deleted
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
>
ありがとう
>
[-- Attachment #2: Type: text/html, Size: 11246 bytes --]
next prev parent reply other threads:[~2024-06-19 17:08 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-19 0:29 [PATCH 00/13] qapi: convert "Note" and "Example" sections to rST John Snow
2024-06-19 0:30 ` [PATCH 01/13] [DO-NOT-MERGE]: Add some ad-hoc linting helpers John Snow
2024-06-19 0:30 ` [PATCH 02/13] qapi: linter fixups John Snow
2024-06-19 0:30 ` [PATCH 03/13] docs/qapidoc: delint a tiny portion of the module John Snow
2024-06-19 6:28 ` Markus Armbruster
2024-06-19 17:06 ` John Snow [this message]
2024-06-19 0:30 ` [PATCH 04/13] qapi/parser: preserve indentation in QAPIDoc sections John Snow
2024-06-19 12:03 ` Markus Armbruster
2024-06-20 14:47 ` John Snow
2024-06-20 15:07 ` Markus Armbruster
2024-06-20 15:14 ` John Snow
2024-06-21 6:38 ` Markus Armbruster
2024-06-21 17:28 ` John Snow
2024-06-22 8:48 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 05/13] qapi/parser: fix comment parsing immediately following a doc block John Snow
2024-06-19 12:04 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 06/13] docs/qapidoc: fix nested parsing under untagged sections John Snow
2024-06-19 12:05 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 07/13] qapi: fix non-compliant JSON examples John Snow
2024-06-19 12:07 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 08/13] qapi: ensure all errors sections are uniformly typset John Snow
2024-06-19 12:10 ` Markus Armbruster
2024-06-20 15:25 ` John Snow
2024-06-19 0:30 ` [PATCH 09/13] qapi: convert "Note" sections to plain rST John Snow
2024-06-19 12:49 ` Markus Armbruster
2024-06-20 13:35 ` Markus Armbruster
2024-06-20 15:46 ` John Snow
2024-06-20 18:44 ` John Snow
2024-06-21 12:23 ` Markus Armbruster
2024-06-21 17:41 ` John Snow
2024-06-22 8:52 ` Markus Armbruster
2024-06-20 15:39 ` John Snow
2024-06-21 10:20 ` Markus Armbruster
2024-06-19 13:07 ` Markus Armbruster
2024-06-20 15:40 ` John Snow
2024-06-21 6:39 ` Markus Armbruster
2024-06-20 13:54 ` Markus Armbruster
2024-06-20 15:52 ` John Snow
2024-06-21 12:08 ` Markus Armbruster
2024-06-21 17:33 ` John Snow
2024-06-19 0:30 ` [PATCH 10/13] qapi: update prose in note blocks John Snow
2024-06-19 12:18 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 11/13] qapi: add markup to " John Snow
2024-06-19 12:19 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 12/13] qapi/parser: don't parse rST markup as section headers John Snow
2024-06-19 12:55 ` Markus Armbruster
2024-06-19 0:30 ` [PATCH 13/13] qapi: convert "Example" sections to rST John Snow
2024-06-19 13:20 ` Markus Armbruster
2024-06-19 17:32 ` John Snow
2024-06-26 5:17 ` Markus Armbruster
2024-06-26 14:39 ` John Snow
2024-06-26 5:35 ` [PATCH 00/13] qapi: convert "Note" and " Markus Armbruster
2024-07-01 20:28 ` Michael S. Tsirkin
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='CAFn=p-Zdcgh3nQnBbBpFbeXxp7_Hq4Z-M83CGecR9mm3uWJUvQ@mail.gmail.com' \
--to=jsnow@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=anisinha@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=clg@redhat.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=farosas@suse.de \
--cc=hreitz@redhat.com \
--cc=imammedo@redhat.com \
--cc=jasowang@redhat.com \
--cc=jiri@resnulli.us \
--cc=kkostiuk@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lukasstraub2@web.de \
--cc=mads@ynddal.dk \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanb@linux.vnet.ibm.com \
--cc=stefanha@redhat.com \
--cc=victortoso@redhat.com \
--cc=wangyanan55@huawei.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).