Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2230508/?format=api
{ "id": 2230508, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230508/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260429192611.1581223-14-jsnow@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260429192611.1581223-14-jsnow@redhat.com>", "date": "2026-04-29T19:26:11", "name": "[v2,13/13] rfc: intro starts on next line", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "647bdfa89b117124b4e4c37f4351edc675b7fc78", "submitter": { "id": 64343, "url": "http://patchwork.ozlabs.org/api/1.1/people/64343/?format=api", "name": "John Snow", "email": "jsnow@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260429192611.1581223-14-jsnow@redhat.com/mbox/", "series": [ { "id": 502140, "url": "http://patchwork.ozlabs.org/api/1.1/series/502140/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502140", "date": "2026-04-29T19:25:59", "name": "qapi: add formal \"intro\" section", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/502140/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2230508/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2230508/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=ZS7cNX8f;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5S5d1mk9z1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 05:28:37 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIAaE-00089X-C6; Wed, 29 Apr 2026 15:28:32 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wIAZ9-0007DR-D7\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 15:27:27 -0400", "from us-smtp-delivery-124.mimecast.com ([170.10.129.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <jsnow@redhat.com>) id 1wIAZ5-00080B-Fh\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 15:27:21 -0400", "from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-345-dmwEv70RP6OK_uyN-fdJbw-1; Wed,\n 29 Apr 2026 15:27:14 -0400", "from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 4E6371800352; Wed, 29 Apr 2026 19:27:13 +0000 (UTC)", "from jsnow-thinkpadp16vgen1.westford.csb (unknown [10.22.80.204])\n by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 4B75D1800446; Wed, 29 Apr 2026 19:27:08 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777490838;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=yvQrrTZJip/bbrHJViDv7QteLJ2uq7tVJhjkIuaDuSk=;\n b=ZS7cNX8fSGRCd23T15k9CfdpWmCKWEMZBf7U5TS/oX76smRZ2C17wfP0aMjCUT7ol9/AO4\n y9UWo2l4az6xAdCfFVJWnQ6SwhKNXwEyC1My+QqrWy4Nf5Z9kCF7lOs7PbdFYRXd0h3Zi+\n 8yf4nalHo5gYmuXqv71k9zaxvJpv524=", "X-MC-Unique": "dmwEv70RP6OK_uyN-fdJbw-1", "X-Mimecast-MFC-AGG-ID": "dmwEv70RP6OK_uyN-fdJbw_1777490833", "From": "John Snow <jsnow@redhat.com>", "To": "qemu-devel@nongnu.org", "Cc": "Michael Roth <michael.roth@amd.com>, Eric Blake <eblake@redhat.com>,\n\t=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n John Snow <jsnow@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>,\n Mauro Carvalho Chehab <mchehab+huawei@kernel.org>,\n \"Michael S. Tsirkin\" <mst@redhat.com>,\n Peter Maydell <peter.maydell@linaro.org>,\n Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>,\n Igor Mammedov <imammedo@redhat.com>, Gerd Hoffmann <kraxel@redhat.com>,\n Ani Sinha <anisinha@redhat.com>,\n =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Markus Armbruster <armbru@redhat.com>", "Subject": "[PATCH v2 13/13] rfc: intro starts on next line", "Date": "Wed, 29 Apr 2026 15:26:11 -0400", "Message-ID": "<20260429192611.1581223-14-jsnow@redhat.com>", "In-Reply-To": "<20260429192611.1581223-1-jsnow@redhat.com>", "References": "<20260429192611.1581223-1-jsnow@redhat.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.111", "Received-SPF": "pass client-ip=170.10.129.124; envelope-from=jsnow@redhat.com;\n 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,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,\n SPF_HELO_PASS=-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 development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <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>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Revert some parser changes that had allowed the intro section to start\non the same line as the definition name. If we go this route, the\nchanges need to be back-squashed into earlier commits and the\nqapi-code-gen.rst documentation needs to be rewritten and reworded a\nlittle bit.\n\nSigned-off-by: John Snow <jsnow@redhat.com>\n---\n docs/sphinx/qapidoc.py | 5 +-\n qapi/accelerator.json | 18 +++--\n qapi/acpi-hest.json | 5 +-\n qapi/acpi.json | 13 ++--\n qapi/audio.json | 88 ++++++++++++++++---------\n scripts/qapi/parser.py | 12 +---\n tests/qapi-schema/doc-missing-colon.err | 2 +-\n 7 files changed, 86 insertions(+), 57 deletions(-)", "diff": "diff --git a/docs/sphinx/qapidoc.py b/docs/sphinx/qapidoc.py\nindex 6b8e4ecd76a..985954164b0 100644\n--- a/docs/sphinx/qapidoc.py\n+++ b/docs/sphinx/qapidoc.py\n@@ -156,8 +156,9 @@ def add_lines(\n lines = content.splitlines(True)\n \n if dedent:\n- txt = \"\".join(lines[1:])\n- lines[1:] = textwrap.dedent(txt).splitlines(True)\n+ lines = textwrap.dedent(content).splitlines(True)\n+ else:\n+ lines = content.splitlines(True)\n \n for i, line in enumerate(lines):\n self.add_line_raw(line, info.fname, info.line + i)\ndiff --git a/qapi/accelerator.json b/qapi/accelerator.json\nindex 71047538ee1..05dbef51c5d 100644\n--- a/qapi/accelerator.json\n+++ b/qapi/accelerator.json\n@@ -12,7 +12,8 @@\n { 'include': 'common.json' }\n \n ##\n-# @KvmInfo: Information about support for KVM acceleration\n+# @KvmInfo:\n+# Information about support for KVM acceleration\n #\n # @enabled: true if KVM acceleration is active\n #\n@@ -23,7 +24,8 @@\n { 'struct': 'KvmInfo', 'data': {'enabled': 'bool', 'present': 'bool'} }\n \n ##\n-# @query-kvm: Return information about KVM acceleration\n+# @query-kvm:\n+# Return information about KVM acceleration\n #\n # Since: 0.14\n #\n@@ -35,7 +37,8 @@\n { 'command': 'query-kvm', 'returns': 'KvmInfo' }\n \n ##\n-# @x-accel-stats: Query accelerator statistics\n+# @x-accel-stats:\n+# Query accelerator statistics\n #\n # Features:\n #\n@@ -50,7 +53,8 @@\n 'features': [ 'unstable' ] }\n \n ##\n-# @Accelerator: Information about support for MSHV acceleration\n+# @Accelerator:\n+# Information about support for MSHV acceleration\n #\n # @hvf: Apple Hypervisor.framework\n #\n@@ -73,7 +77,8 @@\n { 'enum': 'Accelerator', 'data': ['hvf', 'kvm', 'mshv', 'nvmm', 'qtest', 'tcg', 'whpx', 'xen'] }\n \n ##\n-# @AcceleratorInfo: Information about support for various accelerators\n+# @AcceleratorInfo:\n+# Information about support for various accelerators\n #\n # @enabled: the accelerator that is in use\n #\n@@ -85,7 +90,8 @@\n { 'struct': 'AcceleratorInfo', 'data': {'enabled': 'Accelerator', 'present': ['Accelerator']} }\n \n ##\n-# @query-accelerators: Return information about accelerators\n+# @query-accelerators:\n+# Return information about accelerators\n #\n # Returns: @AcceleratorInfo\n #\ndiff --git a/qapi/acpi-hest.json b/qapi/acpi-hest.json\nindex 6a48e80082e..8db804df197 100644\n--- a/qapi/acpi-hest.json\n+++ b/qapi/acpi-hest.json\n@@ -12,8 +12,9 @@\n ##\n \n ##\n-# @inject-ghes-v2-error: Inject an error with additional ACPI 6.1\n-# GHESv2 error information\n+# @inject-ghes-v2-error:\n+# Inject an error with additional ACPI 6.1 GHESv2 error\n+# information\n #\n # @cper: contains a base64 encoded string with raw data for a single\n # CPER record with Generic Error Status Block, Generic Error Data\ndiff --git a/qapi/acpi.json b/qapi/acpi.json\nindex ea6ad2cd45f..82e82d7cf89 100644\n--- a/qapi/acpi.json\n+++ b/qapi/acpi.json\n@@ -12,8 +12,8 @@\n ##\n \n ##\n-# @AcpiTableOptions: Specify an ACPI table on the\n-# command line to load.\n+# @AcpiTableOptions:\n+# Specify an ACPI table on the command line to load.\n #\n # At most one of @file and @data can be specified. The list of files\n # specified by any one of them is loaded and concatenated in order.\n@@ -79,7 +79,8 @@\n { 'enum': 'ACPISlotType', 'data': [ 'DIMM', 'CPU' ] }\n \n ##\n-# @ACPIOSTInfo: OSPM Status Indication for a device. For description\n+# @ACPIOSTInfo:\n+# OSPM Status Indication for a device. For description\n # of possible values of @source and @status fields see \"_OST (OSPM\n # Status Indication)\" chapter of ACPI5.0 spec.\n #\n@@ -103,7 +104,8 @@\n 'status': 'int' } }\n \n ##\n-# @query-acpi-ospm-status: Return a list of `ACPIOSTInfo` for devices\n+# @query-acpi-ospm-status:\n+# Return a list of `ACPIOSTInfo` for devices\n # that support status reporting via ACPI _OST method.\n #\n # Since: 2.1\n@@ -120,7 +122,8 @@\n { 'command': 'query-acpi-ospm-status', 'returns': ['ACPIOSTInfo'] }\n \n ##\n-# @ACPI_DEVICE_OST: Emitted when guest executes ACPI _OST method.\n+# @ACPI_DEVICE_OST:\n+# Emitted when guest executes ACPI _OST method.\n #\n # @info: OSPM Status Indication\n #\ndiff --git a/qapi/audio.json b/qapi/audio.json\nindex 62d64eabf1c..72190f20993 100644\n--- a/qapi/audio.json\n+++ b/qapi/audio.json\n@@ -13,8 +13,9 @@\n ##\n \n ##\n-# @AudiodevPerDirectionOptions: General audio backend options that are\n-# used for both playback and recording.\n+# @AudiodevPerDirectionOptions:\n+# General audio backend options that are used for both playback\n+# and recording.\n #\n # @mixing-engine: use QEMU's mixing engine to mix all streams inside\n # QEMU and convert audio formats when not supported by the\n@@ -50,7 +51,8 @@\n '*buffer-length': 'uint32' } }\n \n ##\n-# @AudiodevGenericOptions: Generic driver-specific options.\n+# @AudiodevGenericOptions:\n+# Generic driver-specific options.\n #\n # @in: options of the capture stream\n #\n@@ -64,7 +66,8 @@\n '*out': 'AudiodevPerDirectionOptions' } }\n \n ##\n-# @AudiodevDBusOptions: Options of the D-Bus audio backend.\n+# @AudiodevDBusOptions:\n+# Options of the D-Bus audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -82,8 +85,9 @@\n '*nsamples': 'uint32'} }\n \n ##\n-# @AudiodevAlsaPerDirectionOptions: Options of the ALSA backend that\n-# are used for both playback and recording.\n+# @AudiodevAlsaPerDirectionOptions:\n+# Options of the ALSA backend that are used for both playback and\n+# recording.\n #\n # @dev: the name of the ALSA device to use (default 'default')\n #\n@@ -102,7 +106,8 @@\n '*try-poll': 'bool' } }\n \n ##\n-# @AudiodevAlsaOptions: Options of the ALSA audio backend.\n+# @AudiodevAlsaOptions:\n+# Options of the ALSA audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -119,7 +124,8 @@\n '*threshold': 'uint32' } }\n \n ##\n-# @AudiodevSndioOptions: Options of the sndio audio backend.\n+# @AudiodevSndioOptions:\n+# Options of the sndio audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -139,8 +145,9 @@\n '*latency': 'uint32'} }\n \n ##\n-# @AudiodevCoreaudioPerDirectionOptions: Options of the Core Audio\n-# backend that are used for both playback and recording.\n+# @AudiodevCoreaudioPerDirectionOptions:\n+# Options of the Core Audio backend that are used for both\n+# playback and recording.\n #\n # @buffer-count: number of buffers\n #\n@@ -152,7 +159,8 @@\n '*buffer-count': 'uint32' } }\n \n ##\n-# @AudiodevCoreaudioOptions: Options of the coreaudio audio backend.\n+# @AudiodevCoreaudioOptions:\n+# Options of the coreaudio audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -166,7 +174,8 @@\n '*out': 'AudiodevCoreaudioPerDirectionOptions' } }\n \n ##\n-# @AudiodevDsoundOptions: Options of the DirectSound audio backend.\n+# @AudiodevDsoundOptions:\n+# Options of the DirectSound audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -184,8 +193,9 @@\n '*latency': 'uint32' } }\n \n ##\n-# @AudiodevJackPerDirectionOptions: Options of the JACK backend that\n-# are used for both playback and recording.\n+# @AudiodevJackPerDirectionOptions:\n+# Options of the JACK backend that are used for both playback and\n+# recording.\n #\n # @server-name: select from among several possible concurrent server\n # instances (default: environment variable $JACK_DEFAULT_SERVER if\n@@ -216,7 +226,8 @@\n '*exact-name': 'bool' } }\n \n ##\n-# @AudiodevJackOptions: Options of the JACK audio backend.\n+# @AudiodevJackOptions:\n+# Options of the JACK audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -230,8 +241,9 @@\n '*out': 'AudiodevJackPerDirectionOptions' } }\n \n ##\n-# @AudiodevOssPerDirectionOptions: Options of the OSS backend that are\n-# used for both playback and recording.\n+# @AudiodevOssPerDirectionOptions:\n+# Options of the OSS backend that are used for both playback and\n+# recording.\n #\n # @dev: file name of the OSS device (default '/dev/dsp')\n #\n@@ -250,7 +262,8 @@\n '*try-poll': 'bool' } }\n \n ##\n-# @AudiodevOssOptions: Options of the OSS audio backend.\n+# @AudiodevOssOptions:\n+# Options of the OSS audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -278,8 +291,9 @@\n '*dsp-policy': 'uint32' } }\n \n ##\n-# @AudiodevPaPerDirectionOptions: Options of the Pulseaudio backend\n-# that are used for both playback and recording.\n+# @AudiodevPaPerDirectionOptions:\n+# Options of the Pulseaudio backend that are used for both\n+# playback and recording.\n #\n # @name: name of the sink/source to use\n #\n@@ -301,7 +315,8 @@\n '*latency': 'uint32' } }\n \n ##\n-# @AudiodevPaOptions: Options of the PulseAudio audio backend.\n+# @AudiodevPaOptions:\n+# Options of the PulseAudio audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -318,8 +333,9 @@\n '*server': 'str' } }\n \n ##\n-# @AudiodevPipewirePerDirectionOptions: Options of the PipeWire\n-# backend that are used for both playback and recording.\n+# @AudiodevPipewirePerDirectionOptions:\n+# Options of the PipeWire backend that are used for both playback\n+# and recording.\n #\n # @name: name of the sink/source to use\n #\n@@ -341,7 +357,8 @@\n '*latency': 'uint32' } }\n \n ##\n-# @AudiodevPipewireOptions: Options of the PipeWire audio backend.\n+# @AudiodevPipewireOptions:\n+# Options of the PipeWire audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -355,8 +372,9 @@\n '*out': 'AudiodevPipewirePerDirectionOptions' } }\n \n ##\n-# @AudiodevSdlPerDirectionOptions: Options of the SDL audio backend\n-# that are used for both playback and recording.\n+# @AudiodevSdlPerDirectionOptions:\n+# Options of the SDL audio backend that are used for both playback\n+# and recording.\n #\n # @buffer-count: number of buffers (default 4)\n #\n@@ -368,7 +386,8 @@\n '*buffer-count': 'uint32' } }\n \n ##\n-# @AudiodevSdlOptions: Options of the SDL audio backend.\n+# @AudiodevSdlOptions:\n+# Options of the SDL audio backend.\n #\n # @in: options of the recording stream\n #\n@@ -382,7 +401,8 @@\n '*out': 'AudiodevSdlPerDirectionOptions' } }\n \n ##\n-# @AudiodevWavOptions: Options of the wav audio backend.\n+# @AudiodevWavOptions:\n+# Options of the wav audio backend.\n #\n # @in: options of the capture stream\n #\n@@ -399,7 +419,8 @@\n '*path': 'str' } }\n \n ##\n-# @AudioFormat: An enumeration of possible audio formats.\n+# @AudioFormat:\n+# An enumeration of possible audio formats.\n #\n # @u8: unsigned 8 bit integer\n #\n@@ -421,7 +442,8 @@\n 'data': [ 'u8', 's8', 'u16', 's16', 'u32', 's32', 'f32' ] }\n \n ##\n-# @AudiodevDriver: An enumeration of possible audio backend drivers.\n+# @AudiodevDriver:\n+# An enumeration of possible audio backend drivers.\n #\n # @jack: JACK audio backend (since 5.1)\n #\n@@ -443,7 +465,8 @@\n 'wav' ] }\n \n ##\n-# @Audiodev: Options of an audio backend.\n+# @Audiodev:\n+# Options of an audio backend.\n #\n # @id: identifier of the backend\n #\n@@ -487,7 +510,8 @@\n 'wav': 'AudiodevWavOptions' } }\n \n ##\n-# @query-audiodevs: Return information about audiodev configuration\n+# @query-audiodevs:\n+# Return information about audiodev configuration\n #\n # Since: 8.0\n ##\ndiff --git a/scripts/qapi/parser.py b/scripts/qapi/parser.py\nindex c23fd26aaa7..8ff2a2c4c0b 100644\n--- a/scripts/qapi/parser.py\n+++ b/scripts/qapi/parser.py\n@@ -530,23 +530,17 @@ def _get_doc_intro(\n line: str,\n info: QAPISourceInfo\n ) -> Tuple['QAPIDoc', Optional[str]]:\n- match = self._match_at_name_colon(line)\n- if not match:\n- raise QAPIParseError(self, \"@name must end with ':'\")\n+ if not line.endswith(':'):\n+ raise QAPIParseError(self, \"line should end with ':'\")\n \n # Invalid names are not checked here, but the name\n # provided *must* match the following definition,\n # which *is* validated in expr.py.\n- symbol = match.group(1)\n+ symbol = line[1:-1]\n if not symbol:\n raise QAPIParseError(self, \"name required after '@'\")\n doc = QAPIDoc(info, symbol)\n-\n doc.ensure_untagged_section(info, QAPIDoc.Kind.INTRO)\n- text = line[match.end():]\n- if text:\n- doc.append_line(text)\n-\n return doc, self.get_doc_indented(doc)\n \n def get_doc(self) -> 'QAPIDoc':\ndiff --git a/tests/qapi-schema/doc-missing-colon.err b/tests/qapi-schema/doc-missing-colon.err\nindex bd5862b30f3..cbcea007153 100644\n--- a/tests/qapi-schema/doc-missing-colon.err\n+++ b/tests/qapi-schema/doc-missing-colon.err\n@@ -1 +1 @@\n-doc-missing-colon.json:4:1: @name must end with ':'\n+doc-missing-colon.json:4:1: line should end with ':'\n", "prefixes": [ "v2", "13/13" ] }