From nobody Mon Apr 7 18:49:15 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1741696167; cv=none; d=zohomail.com; s=zohoarc; b=lHF3+B2R337uqXajazz7uYRp55sCbsAYBbCS7unTXyFKtgoafyi8tMNAoEHOcoKlCzBy8aXLUHMnKTr/OMhrtbO6KghhpleS5etDfjC2FMUPxTFUyvLpRIonaZiUkl05NXLLukY9BBPf//4zk53+BBanjOJzy0NzZxiCYV3Nwk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1741696167; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wdCg+UoySTQdVH0vu4je4tNL8ddS1AXyxvzLsqmoOZw=; b=k9pV0CO//yffvpFqcrsFgRaHSR2xjTNgHhPTwg/QDpDv2GNHbUC2dYZ9x8ICSQgqYgkVnKyBWg/DiocCxFXHmBUYmDeEVc2J6kmFgbGx7nU/OjPtAQySwhJh5m92hw4xpCSqlN77Hq3MwzOtyY7VpwnbvBPSVM1Wp1WXfHMrPE4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from=<armbru@redhat.com> (p=none dis=none) Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1741696167121684.6847649728217; Tue, 11 Mar 2025 05:29:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces@nongnu.org>) id 1trxrA-0003Yl-0M; Tue, 11 Mar 2025 07:33:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <armbru@redhat.com>) id 1trxql-0003MF-KR for qemu-devel@nongnu.org; Tue, 11 Mar 2025 07:32:49 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <armbru@redhat.com>) id 1trxqA-0006Ws-Is for qemu-devel@nongnu.org; Tue, 11 Mar 2025 07:32:43 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-157-65dVc_BdPxSCSb8RGiXZfQ-1; Tue, 11 Mar 2025 07:31:58 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D643B195608B for <qemu-devel@nongnu.org>; Tue, 11 Mar 2025 11:31:57 +0000 (UTC) Received: from blackfin.pond.sub.org (unknown [10.22.74.4]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7158C1828A99 for <qemu-devel@nongnu.org>; Tue, 11 Mar 2025 11:31:57 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id 8A28A21E60DE; Tue, 11 Mar 2025 12:31:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1741692720; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wdCg+UoySTQdVH0vu4je4tNL8ddS1AXyxvzLsqmoOZw=; b=ap4GuyYaxb55OYUR3rAGxXCCpED2m0sg/q7h9MTKuu7ppgnKEuLD1LP+Bgts1H39TYN8zz Ve+uTgWYDaiNXSnabi8Owx2BW4vXR48zEWBLmNF6Uu5jdVt6mQra/GJM5gkh7BXw6Yp9oJ f1HbN7vh6NwOPLFzYfhqVSLx1odllpY= X-MC-Unique: 65dVc_BdPxSCSb8RGiXZfQ-1 X-Mimecast-MFC-AGG-ID: 65dVc_BdPxSCSb8RGiXZfQ_1741692718 From: Markus Armbruster <armbru@redhat.com> To: qemu-devel@nongnu.org Cc: stefanha@redhat.com, John Snow <jsnow@redhat.com> Subject: [PULL 53/61] docs/qapidoc: add intermediate output debugger Date: Tue, 11 Mar 2025 12:31:29 +0100 Message-ID: <20250311113137.1277125-54-armbru@redhat.com> In-Reply-To: <20250311113137.1277125-1-armbru@redhat.com> References: <20250311113137.1277125-1-armbru@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=armbru@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: <qemu-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe> List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel> List-Post: <mailto:qemu-devel@nongnu.org> List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help> List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=subscribe> Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1741696170184019100 Content-Type: text/plain; charset="utf-8" From: John Snow <jsnow@redhat.com> Add debugging output for the qapidoc transmogrifier - setting DEBUG=3D1 will produce .ir files (one for each qapidoc directive) that write the generated rst file to disk to allow for easy debugging and verification of the generated document. Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250311034303.75779-57-jsnow@redhat.com> Acked-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> --- docs/sphinx/qapidoc.py | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py index ebdf709594..8ddebf73f2 100644 --- a/docs/sphinx/qapidoc.py +++ b/docs/sphinx/qapidoc.py @@ -37,7 +37,7 @@ from typing import TYPE_CHECKING =20 from docutils import nodes -from docutils.parsers.rst import Directive, directives +from docutils.parsers.rst import directives from docutils.statemachine import StringList from qapi.error import QAPIError from qapi.parser import QAPIDoc @@ -60,7 +60,7 @@ from sphinx.directives.code import CodeBlock from sphinx.errors import ExtensionError from sphinx.util import logging -from sphinx.util.docutils import switch_source_input +from sphinx.util.docutils import SphinxDirective, switch_source_input from sphinx.util.nodes import nested_parse_with_titles =20 =20 @@ -414,7 +414,7 @@ def visit_module(self, name: str) -> None: super().visit_module(name) =20 =20 -class NestedDirective(Directive): +class NestedDirective(SphinxDirective): def run(self) -> Sequence[nodes.Node]: raise NotImplementedError =20 @@ -483,10 +483,43 @@ def transmogrify(self, schema: QAPISchema) -> nodes.E= lement: node.document =3D self.state.document self.state.nested_parse(content, 0, contentnode) logger.info("Transmogrifier's nested parse completed.") - sys.stdout.flush() =20 + if self.env.app.verbosity >=3D 2 or os.environ.get("DEBUG"): + argname =3D "_".join(Path(self.arguments[0]).parts) + name =3D Path(argname).stem + ".ir" + self.write_intermediate(content, name) + + sys.stdout.flush() return contentnode =20 + def write_intermediate(self, content: StringList, filename: str) -> No= ne: + logger.info( + "writing intermediate rST for '%s' to '%s'", + self.arguments[0], + filename, + ) + + srctree =3D Path(self.env.app.config.qapidoc_srctree).resolve() + outlines =3D [] + lcol_width =3D 0 + + for i, line in enumerate(content): + src, lineno =3D content.info(i) + srcpath =3D Path(src).resolve() + srcpath =3D srcpath.relative_to(srctree) + + lcol =3D f"{srcpath}:{lineno:04d}" + lcol_width =3D max(lcol_width, len(lcol)) + outlines.append((lcol, line)) + + with open(filename, "w", encoding=3D"UTF-8") as outfile: + for lcol, rcol in outlines: + outfile.write(lcol.rjust(lcol_width)) + outfile.write(" |") + if rcol: + outfile.write(f" {rcol}") + outfile.write("\n") + def legacy(self, schema: QAPISchema) -> nodes.Element: vis =3D QAPISchemaGenRSTVisitor(self) vis.visit_begin(schema) --=20 2.48.1