qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 2/2] qapi: Rename .json to .qapi


From: Dr. David Alan Gilbert
Subject: Re: [Qemu-devel] [PATCH v2 2/2] qapi: Rename .json to .qapi
Date: Fri, 20 Apr 2018 10:46:52 +0100
User-agent: Mutt/1.9.5 (2018-04-13)

* Eric Blake (address@hidden) wrote:
> Our QAPI input files aren't quite true JSON (comments being one obvious
> difference); naming things .json doesn't make that obvious.  Use a new
> suffix .qapi that makes it easy to identify our files.
> 
> This change is mostly mechanical, but it is not just a global
> search-and-replace as some instances of '.json' really do refer
> to JSON files, or to a URL that can't change, and so on.
> 
> Signed-off-by: Eric Blake <address@hidden>

For migration and HMP

Acked-by: Dr. David Alan Gilbert <address@hidden>

> 
> ---
> v2: rebase to master
> ---
>  docs/devel/blkdebug.txt                            |   2 +-
>  docs/devel/qapi-code-gen.txt                       |   6 +-
>  docs/devel/testing.rst                             |   4 +-
>  docs/devel/writing-qmp-commands.txt                |   4 +-
>  docs/interop/live-block-operations.rst             |   4 +-
>  docs/interop/qmp-intro.txt                         |   2 +-
>  Makefile                                           |  32 +-
>  qapi/{block-core.json => block-core.qapi}          |   6 +-
>  qapi/{block.json => block.qapi}                    |   2 +-
>  qapi/{char.json => char.qapi}                      |   2 +-
>  qapi/{common.json => common.qapi}                  |   0
>  qapi/{crypto.json => crypto.qapi}                  |   0
>  qapi/{introspect.json => introspect.qapi}          |   0
>  qapi/{migration.json => migration.qapi}            |   2 +-
>  qapi/{misc.json => misc.qapi}                      |   0
>  qapi/{net.json => net.qapi}                        |   2 +-
>  qapi/{qga-schema.json => qga-schema.qapi}          |   0
>  qapi/{qmp-schema.json => qmp-schema.qapi}          |  30 +-
>  qapi/{rocker.json => rocker.qapi}                  |   0
>  qapi/{run-state.json => run-state.qapi}            |   0
>  qapi/{sockets.json => sockets.qapi}                |   2 +-
>  qapi/{tpm.json => tpm.qapi}                        |   0
>  qapi/{trace.json => trace.qapi}                    |   0
>  qapi/{transaction.json => transaction.qapi}        |   2 +-
>  qapi/{ui.json => ui.qapi}                          |   2 +-
>  include/crypto/block.h                             |   2 +-
>  include/crypto/cipher.h                            |   2 +-
>  include/crypto/hash.h                              |   2 +-
>  include/crypto/ivgen.h                             |   2 +-
>  MAINTAINERS                                        |  26 +-
>  scripts/git.orderfile                              |   2 +-
>  tests/Makefile.include                             | 336 
> ++++++++++-----------
>  tests/qapi-schema/alternate-any.err                |   2 +-
>  .../{alternate-any.json => alternate-any.qapi}     |   0
>  tests/qapi-schema/alternate-array.err              |   2 +-
>  .../{alternate-array.json => alternate-array.qapi} |   0
>  tests/qapi-schema/alternate-base.err               |   2 +-
>  .../{alternate-base.json => alternate-base.qapi}   |   0
>  tests/qapi-schema/alternate-clash.err              |   2 +-
>  .../{alternate-clash.json => alternate-clash.qapi} |   0
>  .../qapi-schema/alternate-conflict-bool-string.err |   2 +-
>  ...ng.json => alternate-conflict-bool-string.qapi} |   0
>  tests/qapi-schema/alternate-conflict-dict.err      |   2 +-
>  ...lict-dict.json => alternate-conflict-dict.qapi} |   0
>  tests/qapi-schema/alternate-conflict-enum-bool.err |   2 +-
>  ...bool.json => alternate-conflict-enum-bool.qapi} |   0
>  tests/qapi-schema/alternate-conflict-enum-int.err  |   2 +-
>  ...m-int.json => alternate-conflict-enum-int.qapi} |   0
>  .../qapi-schema/alternate-conflict-num-string.err  |   2 +-
>  ...ing.json => alternate-conflict-num-string.qapi} |   0
>  tests/qapi-schema/alternate-conflict-string.err    |   2 +-
>  ...-string.json => alternate-conflict-string.qapi} |   0
>  tests/qapi-schema/alternate-empty.err              |   2 +-
>  .../{alternate-empty.json => alternate-empty.qapi} |   0
>  tests/qapi-schema/alternate-nested.err             |   2 +-
>  ...alternate-nested.json => alternate-nested.qapi} |   0
>  tests/qapi-schema/alternate-unknown.err            |   2 +-
>  ...ternate-unknown.json => alternate-unknown.qapi} |   0
>  tests/qapi-schema/args-alternate.err               |   2 +-
>  .../{args-alternate.json => args-alternate.qapi}   |   0
>  tests/qapi-schema/args-any.err                     |   2 +-
>  tests/qapi-schema/{args-any.json => args-any.qapi} |   0
>  tests/qapi-schema/args-array-empty.err             |   2 +-
>  ...args-array-empty.json => args-array-empty.qapi} |   0
>  tests/qapi-schema/args-array-unknown.err           |   2 +-
>  ...-array-unknown.json => args-array-unknown.qapi} |   0
>  tests/qapi-schema/args-bad-boxed.err               |   2 +-
>  .../{args-bad-boxed.json => args-bad-boxed.qapi}   |   0
>  tests/qapi-schema/args-boxed-anon.err              |   2 +-
>  .../{args-boxed-anon.json => args-boxed-anon.qapi} |   0
>  tests/qapi-schema/args-boxed-empty.err             |   2 +-
>  ...args-boxed-empty.json => args-boxed-empty.qapi} |   0
>  tests/qapi-schema/args-boxed-string.err            |   2 +-
>  ...gs-boxed-string.json => args-boxed-string.qapi} |   0
>  tests/qapi-schema/args-int.err                     |   2 +-
>  tests/qapi-schema/{args-int.json => args-int.qapi} |   0
>  tests/qapi-schema/args-invalid.err                 |   2 +-
>  .../{args-invalid.json => args-invalid.qapi}       |   0
>  tests/qapi-schema/args-member-array-bad.err        |   2 +-
>  ...r-array-bad.json => args-member-array-bad.qapi} |   0
>  tests/qapi-schema/args-member-case.err             |   2 +-
>  ...args-member-case.json => args-member-case.qapi} |   0
>  tests/qapi-schema/args-member-unknown.err          |   2 +-
>  ...ember-unknown.json => args-member-unknown.qapi} |   0
>  tests/qapi-schema/args-name-clash.err              |   2 +-
>  .../{args-name-clash.json => args-name-clash.qapi} |   0
>  tests/qapi-schema/args-union.err                   |   2 +-
>  .../{args-union.json => args-union.qapi}           |   0
>  tests/qapi-schema/args-unknown.err                 |   2 +-
>  .../{args-unknown.json => args-unknown.qapi}       |   0
>  tests/qapi-schema/bad-base.err                     |   2 +-
>  tests/qapi-schema/{bad-base.json => bad-base.qapi} |   0
>  tests/qapi-schema/bad-data.err                     |   2 +-
>  tests/qapi-schema/{bad-data.json => bad-data.qapi} |   0
>  tests/qapi-schema/bad-ident.err                    |   2 +-
>  .../qapi-schema/{bad-ident.json => bad-ident.qapi} |   0
>  tests/qapi-schema/bad-type-bool.err                |   2 +-
>  .../{bad-type-bool.json => bad-type-bool.qapi}     |   0
>  tests/qapi-schema/bad-type-dict.err                |   2 +-
>  .../{bad-type-dict.json => bad-type-dict.qapi}     |   0
>  tests/qapi-schema/bad-type-int.err                 |   2 +-
>  .../{bad-type-int.json => bad-type-int.qapi}       |   0
>  tests/qapi-schema/base-cycle-direct.err            |   2 +-
>  ...se-cycle-direct.json => base-cycle-direct.qapi} |   0
>  tests/qapi-schema/base-cycle-indirect.err          |   2 +-
>  ...ycle-indirect.json => base-cycle-indirect.qapi} |   0
>  tests/qapi-schema/command-int.err                  |   2 +-
>  .../{command-int.json => command-int.qapi}         |   0
>  tests/qapi-schema/comments.out                     |   2 +-
>  tests/qapi-schema/{comments.json => comments.qapi} |   0
>  tests/qapi-schema/doc-bad-alternate-member.err     |   2 +-
>  ...e-member.json => doc-bad-alternate-member.qapi} |   0
>  tests/qapi-schema/doc-bad-command-arg.err          |   2 +-
>  ...d-command-arg.json => doc-bad-command-arg.qapi} |   0
>  tests/qapi-schema/doc-bad-section.out              |   2 +-
>  .../{doc-bad-section.json => doc-bad-section.qapi} |   0
>  tests/qapi-schema/doc-bad-symbol.err               |   2 +-
>  .../{doc-bad-symbol.json => doc-bad-symbol.qapi}   |   0
>  tests/qapi-schema/doc-bad-union-member.err         |   2 +-
>  ...union-member.json => doc-bad-union-member.qapi} |   0
>  tests/qapi-schema/doc-before-include.err           |   2 +-
>  ...before-include.json => doc-before-include.qapi} |   2 +-
>  tests/qapi-schema/doc-before-pragma.err            |   2 +-
>  ...c-before-pragma.json => doc-before-pragma.qapi} |   0
>  tests/qapi-schema/doc-duplicated-arg.err           |   2 +-
>  ...duplicated-arg.json => doc-duplicated-arg.qapi} |   0
>  tests/qapi-schema/doc-duplicated-return.err        |   2 +-
>  ...ated-return.json => doc-duplicated-return.qapi} |   0
>  tests/qapi-schema/doc-duplicated-since.err         |   2 +-
>  ...icated-since.json => doc-duplicated-since.qapi} |   0
>  tests/qapi-schema/doc-empty-arg.err                |   2 +-
>  .../{doc-empty-arg.json => doc-empty-arg.qapi}     |   0
>  tests/qapi-schema/doc-empty-section.err            |   2 +-
>  ...c-empty-section.json => doc-empty-section.qapi} |   0
>  tests/qapi-schema/doc-empty-symbol.err             |   2 +-
>  ...doc-empty-symbol.json => doc-empty-symbol.qapi} |   0
>  tests/qapi-schema/doc-good.out                     |   2 +-
>  tests/qapi-schema/{doc-good.json => doc-good.qapi} |   0
>  tests/qapi-schema/doc-interleaved-section.err      |   2 +-
>  ...d-section.json => doc-interleaved-section.qapi} |   0
>  tests/qapi-schema/doc-invalid-end.err              |   2 +-
>  .../{doc-invalid-end.json => doc-invalid-end.qapi} |   0
>  tests/qapi-schema/doc-invalid-end2.err             |   2 +-
>  ...doc-invalid-end2.json => doc-invalid-end2.qapi} |   0
>  tests/qapi-schema/doc-invalid-return.err           |   2 +-
>  ...invalid-return.json => doc-invalid-return.qapi} |   0
>  tests/qapi-schema/doc-invalid-section.err          |   2 +-
>  ...valid-section.json => doc-invalid-section.qapi} |   0
>  tests/qapi-schema/doc-invalid-start.err            |   2 +-
>  ...c-invalid-start.json => doc-invalid-start.qapi} |   0
>  tests/qapi-schema/doc-missing-colon.err            |   2 +-
>  ...c-missing-colon.json => doc-missing-colon.qapi} |   0
>  tests/qapi-schema/doc-missing-expr.err             |   2 +-
>  ...doc-missing-expr.json => doc-missing-expr.qapi} |   0
>  tests/qapi-schema/doc-missing-space.err            |   2 +-
>  ...c-missing-space.json => doc-missing-space.qapi} |   0
>  tests/qapi-schema/doc-missing.err                  |   2 +-
>  .../{doc-missing.json => doc-missing.qapi}         |   0
>  tests/qapi-schema/doc-no-symbol.err                |   2 +-
>  .../{doc-no-symbol.json => doc-no-symbol.qapi}     |   0
>  tests/qapi-schema/double-data.err                  |   2 +-
>  .../{double-data.json => double-data.qapi}         |   0
>  tests/qapi-schema/double-type.err                  |   2 +-
>  .../{double-type.json => double-type.qapi}         |   0
>  tests/qapi-schema/duplicate-key.err                |   2 +-
>  .../{duplicate-key.json => duplicate-key.qapi}     |   0
>  tests/qapi-schema/{empty.json => empty.qapi}       |   0
>  tests/qapi-schema/enum-bad-name.err                |   2 +-
>  .../{enum-bad-name.json => enum-bad-name.qapi}     |   0
>  tests/qapi-schema/enum-bad-prefix.err              |   2 +-
>  .../{enum-bad-prefix.json => enum-bad-prefix.qapi} |   0
>  tests/qapi-schema/enum-clash-member.err            |   2 +-
>  ...um-clash-member.json => enum-clash-member.qapi} |   0
>  tests/qapi-schema/enum-dict-member.err             |   2 +-
>  ...enum-dict-member.json => enum-dict-member.qapi} |   0
>  tests/qapi-schema/enum-int-member.err              |   2 +-
>  .../{enum-int-member.json => enum-int-member.qapi} |   0
>  tests/qapi-schema/enum-member-case.err             |   2 +-
>  ...enum-member-case.json => enum-member-case.qapi} |   0
>  tests/qapi-schema/enum-missing-data.err            |   2 +-
>  ...um-missing-data.json => enum-missing-data.qapi} |   0
>  tests/qapi-schema/enum-wrong-data.err              |   2 +-
>  .../{enum-wrong-data.json => enum-wrong-data.qapi} |   0
>  tests/qapi-schema/escape-outside-string.err        |   2 +-
>  ...side-string.json => escape-outside-string.qapi} |   0
>  tests/qapi-schema/escape-too-big.err               |   2 +-
>  .../{escape-too-big.json => escape-too-big.qapi}   |   0
>  tests/qapi-schema/escape-too-short.err             |   2 +-
>  ...escape-too-short.json => escape-too-short.qapi} |   0
>  tests/qapi-schema/event-boxed-empty.err            |   2 +-
>  ...ent-boxed-empty.json => event-boxed-empty.qapi} |   0
>  tests/qapi-schema/event-case.out                   |   2 +-
>  .../{event-case.json => event-case.qapi}           |   0
>  tests/qapi-schema/event-nest-struct.err            |   2 +-
>  ...ent-nest-struct.json => event-nest-struct.qapi} |   0
>  tests/qapi-schema/flat-union-array-branch.err      |   2 +-
>  ...ay-branch.json => flat-union-array-branch.qapi} |   0
>  tests/qapi-schema/flat-union-bad-base.err          |   2 +-
>  ...nion-bad-base.json => flat-union-bad-base.qapi} |   0
>  tests/qapi-schema/flat-union-bad-discriminator.err |   2 +-
>  ...ator.json => flat-union-bad-discriminator.qapi} |   0
>  tests/qapi-schema/flat-union-base-any.err          |   2 +-
>  ...nion-base-any.json => flat-union-base-any.qapi} |   0
>  tests/qapi-schema/flat-union-base-union.err        |   2 +-
>  ...-base-union.json => flat-union-base-union.qapi} |   0
>  tests/qapi-schema/flat-union-clash-member.err      |   2 +-
>  ...sh-member.json => flat-union-clash-member.qapi} |   0
>  tests/qapi-schema/flat-union-empty.err             |   2 +-
>  ...flat-union-empty.json => flat-union-empty.qapi} |   0
>  tests/qapi-schema/flat-union-incomplete-branch.err |   2 +-
>  ...anch.json => flat-union-incomplete-branch.qapi} |   0
>  tests/qapi-schema/flat-union-inline.err            |   2 +-
>  ...at-union-inline.json => flat-union-inline.qapi} |   0
>  tests/qapi-schema/flat-union-int-branch.err        |   2 +-
>  ...-int-branch.json => flat-union-int-branch.qapi} |   0
>  .../qapi-schema/flat-union-invalid-branch-key.err  |   2 +-
>  ...key.json => flat-union-invalid-branch-key.qapi} |   0
>  .../flat-union-invalid-discriminator.err           |   2 +-
>  ....json => flat-union-invalid-discriminator.qapi} |   0
>  tests/qapi-schema/flat-union-no-base.err           |   2 +-
>  ...-union-no-base.json => flat-union-no-base.qapi} |   0
>  .../flat-union-optional-discriminator.err          |   2 +-
>  ...json => flat-union-optional-discriminator.qapi} |   0
>  .../flat-union-string-discriminator.err            |   2 +-
>  ...r.json => flat-union-string-discriminator.qapi} |   0
>  tests/qapi-schema/funny-char.err                   |   2 +-
>  .../{funny-char.json => funny-char.qapi}           |   0
>  tests/qapi-schema/ident-with-escape.out            |   2 +-
>  ...ent-with-escape.json => ident-with-escape.qapi} |   0
>  tests/qapi-schema/include-before-err.err           |   2 +-
>  tests/qapi-schema/include-before-err.json          |   2 -
>  tests/qapi-schema/include-before-err.qapi          |   2 +
>  tests/qapi-schema/include-cycle-b.json             |   1 -
>  tests/qapi-schema/include-cycle-b.qapi             |   1 +
>  tests/qapi-schema/include-cycle-c.json             |   1 -
>  tests/qapi-schema/include-cycle-c.qapi             |   1 +
>  tests/qapi-schema/include-cycle.err                |   6 +-
>  tests/qapi-schema/include-cycle.json               |   1 -
>  tests/qapi-schema/include-cycle.qapi               |   1 +
>  tests/qapi-schema/include-extra-junk.err           |   2 +-
>  tests/qapi-schema/include-extra-junk.json          |   3 -
>  tests/qapi-schema/include-extra-junk.qapi          |   3 +
>  tests/qapi-schema/include-format-err.err           |   2 +-
>  tests/qapi-schema/include-format-err.json          |   2 -
>  tests/qapi-schema/include-format-err.qapi          |   2 +
>  tests/qapi-schema/include-nested-err.err           |   4 +-
>  tests/qapi-schema/include-nested-err.json          |   1 -
>  tests/qapi-schema/include-nested-err.qapi          |   1 +
>  tests/qapi-schema/include-no-file.err              |   2 +-
>  tests/qapi-schema/include-no-file.json             |   1 -
>  tests/qapi-schema/include-no-file.qapi             |   1 +
>  tests/qapi-schema/include-non-file.err             |   2 +-
>  ...include-non-file.json => include-non-file.qapi} |   0
>  ...e-relpath-sub.json => include-relpath-sub.qapi} |   0
>  tests/qapi-schema/include-relpath.json             |   1 -
>  tests/qapi-schema/include-relpath.out              |  10 +-
>  tests/qapi-schema/include-relpath.qapi             |   1 +
>  tests/qapi-schema/include-repetition-sub.json      |   2 -
>  tests/qapi-schema/include-repetition-sub.qapi      |   2 +
>  tests/qapi-schema/include-repetition.json          |   3 -
>  tests/qapi-schema/include-repetition.out           |  20 +-
>  tests/qapi-schema/include-repetition.qapi          |   3 +
>  tests/qapi-schema/include-self-cycle.err           |   2 +-
>  tests/qapi-schema/include-self-cycle.json          |   1 -
>  tests/qapi-schema/include-self-cycle.qapi          |   1 +
>  ...ude-simple-sub.json => include-simple-sub.qapi} |   0
>  tests/qapi-schema/include-simple.json              |   1 -
>  tests/qapi-schema/include-simple.out               |   6 +-
>  tests/qapi-schema/include-simple.qapi              |   1 +
>  tests/qapi-schema/include/relpath.json             |   1 -
>  tests/qapi-schema/include/relpath.qapi             |   1 +
>  tests/qapi-schema/indented-expr.out                |   2 +-
>  .../{indented-expr.json => indented-expr.qapi}     |   0
>  tests/qapi-schema/leading-comma-list.err           |   2 +-
>  ...ing-comma-list.json => leading-comma-list.qapi} |   0
>  tests/qapi-schema/leading-comma-object.err         |   2 +-
>  ...comma-object.json => leading-comma-object.qapi} |   0
>  tests/qapi-schema/missing-colon.err                |   2 +-
>  .../{missing-colon.json => missing-colon.qapi}     |   0
>  tests/qapi-schema/missing-comma-list.err           |   2 +-
>  ...ing-comma-list.json => missing-comma-list.qapi} |   0
>  tests/qapi-schema/missing-comma-object.err         |   2 +-
>  ...comma-object.json => missing-comma-object.qapi} |   0
>  tests/qapi-schema/missing-type.err                 |   2 +-
>  .../{missing-type.json => missing-type.qapi}       |   0
>  tests/qapi-schema/nested-struct-data.err           |   2 +-
>  ...ed-struct-data.json => nested-struct-data.qapi} |   0
>  tests/qapi-schema/non-objects.err                  |   2 +-
>  .../{non-objects.json => non-objects.qapi}         |   0
>  tests/qapi-schema/oob-test.err                     |   2 +-
>  tests/qapi-schema/{oob-test.json => oob-test.qapi} |   0
>  tests/qapi-schema/pragma-doc-required-crap.err     |   2 +-
>  ...red-crap.json => pragma-doc-required-crap.qapi} |   0
>  tests/qapi-schema/pragma-extra-junk.err            |   2 +-
>  ...agma-extra-junk.json => pragma-extra-junk.qapi} |   0
>  .../pragma-name-case-whitelist-crap.err            |   2 +-
>  ...p.json => pragma-name-case-whitelist-crap.qapi} |   0
>  tests/qapi-schema/pragma-non-dict.err              |   2 +-
>  .../{pragma-non-dict.json => pragma-non-dict.qapi} |   0
>  .../qapi-schema/pragma-returns-whitelist-crap.err  |   2 +-
>  ...rap.json => pragma-returns-whitelist-crap.qapi} |   0
>  tests/qapi-schema/qapi-schema-test.out             |   2 +-
>  ...qapi-schema-test.json => qapi-schema-test.qapi} |   0
>  tests/qapi-schema/quoted-structural-chars.err      |   2 +-
>  ...ral-chars.json => quoted-structural-chars.qapi} |   0
>  tests/qapi-schema/redefined-builtin.err            |   2 +-
>  ...defined-builtin.json => redefined-builtin.qapi} |   0
>  tests/qapi-schema/redefined-command.err            |   2 +-
>  ...defined-command.json => redefined-command.qapi} |   0
>  tests/qapi-schema/redefined-event.err              |   2 +-
>  .../{redefined-event.json => redefined-event.qapi} |   0
>  tests/qapi-schema/redefined-type.err               |   2 +-
>  .../{redefined-type.json => redefined-type.qapi}   |   0
>  tests/qapi-schema/reserved-command-q.err           |   2 +-
>  ...rved-command-q.json => reserved-command-q.qapi} |   0
>  tests/qapi-schema/reserved-enum-q.err              |   2 +-
>  .../{reserved-enum-q.json => reserved-enum-q.qapi} |   0
>  tests/qapi-schema/reserved-member-has.err          |   2 +-
>  ...ed-member-has.json => reserved-member-has.qapi} |   0
>  tests/qapi-schema/reserved-member-q.err            |   2 +-
>  ...served-member-q.json => reserved-member-q.qapi} |   0
>  tests/qapi-schema/reserved-member-u.err            |   2 +-
>  ...served-member-u.json => reserved-member-u.qapi} |   0
>  tests/qapi-schema/reserved-member-underscore.err   |   2 +-
>  ...rscore.json => reserved-member-underscore.qapi} |   0
>  tests/qapi-schema/reserved-type-kind.err           |   2 +-
>  ...rved-type-kind.json => reserved-type-kind.qapi} |   0
>  tests/qapi-schema/reserved-type-list.err           |   2 +-
>  ...rved-type-list.json => reserved-type-list.qapi} |   0
>  tests/qapi-schema/returns-alternate.err            |   2 +-
>  ...turns-alternate.json => returns-alternate.qapi} |   0
>  tests/qapi-schema/returns-array-bad.err            |   2 +-
>  ...turns-array-bad.json => returns-array-bad.qapi} |   0
>  tests/qapi-schema/returns-dict.err                 |   2 +-
>  .../{returns-dict.json => returns-dict.qapi}       |   0
>  tests/qapi-schema/returns-unknown.err              |   2 +-
>  .../{returns-unknown.json => returns-unknown.qapi} |   0
>  tests/qapi-schema/returns-whitelist.err            |   2 +-
>  ...turns-whitelist.json => returns-whitelist.qapi} |   0
>  tests/qapi-schema/struct-base-clash-deep.err       |   2 +-
>  ...clash-deep.json => struct-base-clash-deep.qapi} |   0
>  tests/qapi-schema/struct-base-clash.err            |   2 +-
>  ...ruct-base-clash.json => struct-base-clash.qapi} |   0
>  tests/qapi-schema/struct-data-invalid.err          |   2 +-
>  ...-data-invalid.json => struct-data-invalid.qapi} |   0
>  tests/qapi-schema/struct-member-invalid.err        |   2 +-
>  ...ber-invalid.json => struct-member-invalid.qapi} |   0
>  tests/qapi-schema/trailing-comma-list.err          |   2 +-
>  ...ng-comma-list.json => trailing-comma-list.qapi} |   0
>  tests/qapi-schema/trailing-comma-object.err        |   2 +-
>  ...omma-object.json => trailing-comma-object.qapi} |   0
>  tests/qapi-schema/type-bypass-bad-gen.err          |   2 +-
>  ...ypass-bad-gen.json => type-bypass-bad-gen.qapi} |   0
>  tests/qapi-schema/unclosed-list.err                |   2 +-
>  .../{unclosed-list.json => unclosed-list.qapi}     |   0
>  tests/qapi-schema/unclosed-object.err              |   2 +-
>  .../{unclosed-object.json => unclosed-object.qapi} |   0
>  tests/qapi-schema/unclosed-string.err              |   2 +-
>  .../{unclosed-string.json => unclosed-string.qapi} |   0
>  tests/qapi-schema/unicode-str.err                  |   2 +-
>  .../{unicode-str.json => unicode-str.qapi}         |   0
>  tests/qapi-schema/union-base-empty.err             |   2 +-
>  ...union-base-empty.json => union-base-empty.qapi} |   0
>  tests/qapi-schema/union-base-no-discriminator.err  |   2 +-
>  ...nator.json => union-base-no-discriminator.qapi} |   0
>  tests/qapi-schema/union-branch-case.err            |   2 +-
>  ...ion-branch-case.json => union-branch-case.qapi} |   0
>  tests/qapi-schema/union-clash-branches.err         |   2 +-
>  ...ash-branches.json => union-clash-branches.qapi} |   0
>  tests/qapi-schema/union-empty.err                  |   2 +-
>  .../{union-empty.json => union-empty.qapi}         |   0
>  tests/qapi-schema/union-invalid-base.err           |   2 +-
>  ...n-invalid-base.json => union-invalid-base.qapi} |   0
>  tests/qapi-schema/union-optional-branch.err        |   2 +-
>  ...onal-branch.json => union-optional-branch.qapi} |   0
>  tests/qapi-schema/union-unknown.err                |   2 +-
>  .../{union-unknown.json => union-unknown.qapi}     |   0
>  tests/qapi-schema/unknown-escape.err               |   2 +-
>  .../{unknown-escape.json => unknown-escape.qapi}   |   0
>  tests/qapi-schema/unknown-expr-key.err             |   2 +-
>  ...unknown-expr-key.json => unknown-expr-key.qapi} |   0
>  381 files changed, 442 insertions(+), 442 deletions(-)
>  rename qapi/{block-core.json => block-core.qapi} (99%)
>  rename qapi/{block.json => block.qapi} (99%)
>  rename qapi/{char.json => char.qapi} (99%)
>  rename qapi/{common.json => common.qapi} (100%)
>  rename qapi/{crypto.json => crypto.qapi} (100%)
>  rename qapi/{introspect.json => introspect.qapi} (100%)
>  rename qapi/{migration.json => migration.qapi} (99%)
>  rename qapi/{misc.json => misc.qapi} (100%)
>  rename qapi/{net.json => net.qapi} (99%)
>  rename qapi/{qga-schema.json => qga-schema.qapi} (100%)
>  rename qapi/{qmp-schema.json => qmp-schema.qapi} (88%)
>  rename qapi/{rocker.json => rocker.qapi} (100%)
>  rename qapi/{run-state.json => run-state.qapi} (100%)
>  rename qapi/{sockets.json => sockets.qapi} (99%)
>  rename qapi/{tpm.json => tpm.qapi} (100%)
>  rename qapi/{trace.json => trace.qapi} (100%)
>  rename qapi/{transaction.json => transaction.qapi} (99%)
>  rename qapi/{ui.json => ui.qapi} (99%)
>  rename tests/qapi-schema/{alternate-any.json => alternate-any.qapi} (100%)
>  rename tests/qapi-schema/{alternate-array.json => alternate-array.qapi} 
> (100%)
>  rename tests/qapi-schema/{alternate-base.json => alternate-base.qapi} (100%)
>  rename tests/qapi-schema/{alternate-clash.json => alternate-clash.qapi} 
> (100%)
>  rename tests/qapi-schema/{alternate-conflict-bool-string.json => 
> alternate-conflict-bool-string.qapi} (100%)
>  rename tests/qapi-schema/{alternate-conflict-dict.json => 
> alternate-conflict-dict.qapi} (100%)
>  rename tests/qapi-schema/{alternate-conflict-enum-bool.json => 
> alternate-conflict-enum-bool.qapi} (100%)
>  rename tests/qapi-schema/{alternate-conflict-enum-int.json => 
> alternate-conflict-enum-int.qapi} (100%)
>  rename tests/qapi-schema/{alternate-conflict-num-string.json => 
> alternate-conflict-num-string.qapi} (100%)
>  rename tests/qapi-schema/{alternate-conflict-string.json => 
> alternate-conflict-string.qapi} (100%)
>  rename tests/qapi-schema/{alternate-empty.json => alternate-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{alternate-nested.json => alternate-nested.qapi} 
> (100%)
>  rename tests/qapi-schema/{alternate-unknown.json => alternate-unknown.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-alternate.json => args-alternate.qapi} (100%)
>  rename tests/qapi-schema/{args-any.json => args-any.qapi} (100%)
>  rename tests/qapi-schema/{args-array-empty.json => args-array-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-array-unknown.json => 
> args-array-unknown.qapi} (100%)
>  rename tests/qapi-schema/{args-bad-boxed.json => args-bad-boxed.qapi} (100%)
>  rename tests/qapi-schema/{args-boxed-anon.json => args-boxed-anon.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-boxed-empty.json => args-boxed-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-boxed-string.json => args-boxed-string.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-int.json => args-int.qapi} (100%)
>  rename tests/qapi-schema/{args-invalid.json => args-invalid.qapi} (100%)
>  rename tests/qapi-schema/{args-member-array-bad.json => 
> args-member-array-bad.qapi} (100%)
>  rename tests/qapi-schema/{args-member-case.json => args-member-case.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-member-unknown.json => 
> args-member-unknown.qapi} (100%)
>  rename tests/qapi-schema/{args-name-clash.json => args-name-clash.qapi} 
> (100%)
>  rename tests/qapi-schema/{args-union.json => args-union.qapi} (100%)
>  rename tests/qapi-schema/{args-unknown.json => args-unknown.qapi} (100%)
>  rename tests/qapi-schema/{bad-base.json => bad-base.qapi} (100%)
>  rename tests/qapi-schema/{bad-data.json => bad-data.qapi} (100%)
>  rename tests/qapi-schema/{bad-ident.json => bad-ident.qapi} (100%)
>  rename tests/qapi-schema/{bad-type-bool.json => bad-type-bool.qapi} (100%)
>  rename tests/qapi-schema/{bad-type-dict.json => bad-type-dict.qapi} (100%)
>  rename tests/qapi-schema/{bad-type-int.json => bad-type-int.qapi} (100%)
>  rename tests/qapi-schema/{base-cycle-direct.json => base-cycle-direct.qapi} 
> (100%)
>  rename tests/qapi-schema/{base-cycle-indirect.json => 
> base-cycle-indirect.qapi} (100%)
>  rename tests/qapi-schema/{command-int.json => command-int.qapi} (100%)
>  rename tests/qapi-schema/{comments.json => comments.qapi} (100%)
>  rename tests/qapi-schema/{doc-bad-alternate-member.json => 
> doc-bad-alternate-member.qapi} (100%)
>  rename tests/qapi-schema/{doc-bad-command-arg.json => 
> doc-bad-command-arg.qapi} (100%)
>  rename tests/qapi-schema/{doc-bad-section.json => doc-bad-section.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-bad-symbol.json => doc-bad-symbol.qapi} (100%)
>  rename tests/qapi-schema/{doc-bad-union-member.json => 
> doc-bad-union-member.qapi} (100%)
>  rename tests/qapi-schema/{doc-before-include.json => 
> doc-before-include.qapi} (81%)
>  rename tests/qapi-schema/{doc-before-pragma.json => doc-before-pragma.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-duplicated-arg.json => 
> doc-duplicated-arg.qapi} (100%)
>  rename tests/qapi-schema/{doc-duplicated-return.json => 
> doc-duplicated-return.qapi} (100%)
>  rename tests/qapi-schema/{doc-duplicated-since.json => 
> doc-duplicated-since.qapi} (100%)
>  rename tests/qapi-schema/{doc-empty-arg.json => doc-empty-arg.qapi} (100%)
>  rename tests/qapi-schema/{doc-empty-section.json => doc-empty-section.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-empty-symbol.json => doc-empty-symbol.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-good.json => doc-good.qapi} (100%)
>  rename tests/qapi-schema/{doc-interleaved-section.json => 
> doc-interleaved-section.qapi} (100%)
>  rename tests/qapi-schema/{doc-invalid-end.json => doc-invalid-end.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-invalid-end2.json => doc-invalid-end2.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-invalid-return.json => 
> doc-invalid-return.qapi} (100%)
>  rename tests/qapi-schema/{doc-invalid-section.json => 
> doc-invalid-section.qapi} (100%)
>  rename tests/qapi-schema/{doc-invalid-start.json => doc-invalid-start.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-missing-colon.json => doc-missing-colon.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-missing-expr.json => doc-missing-expr.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-missing-space.json => doc-missing-space.qapi} 
> (100%)
>  rename tests/qapi-schema/{doc-missing.json => doc-missing.qapi} (100%)
>  rename tests/qapi-schema/{doc-no-symbol.json => doc-no-symbol.qapi} (100%)
>  rename tests/qapi-schema/{double-data.json => double-data.qapi} (100%)
>  rename tests/qapi-schema/{double-type.json => double-type.qapi} (100%)
>  rename tests/qapi-schema/{duplicate-key.json => duplicate-key.qapi} (100%)
>  rename tests/qapi-schema/{empty.json => empty.qapi} (100%)
>  rename tests/qapi-schema/{enum-bad-name.json => enum-bad-name.qapi} (100%)
>  rename tests/qapi-schema/{enum-bad-prefix.json => enum-bad-prefix.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-clash-member.json => enum-clash-member.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-dict-member.json => enum-dict-member.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-int-member.json => enum-int-member.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-member-case.json => enum-member-case.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-missing-data.json => enum-missing-data.qapi} 
> (100%)
>  rename tests/qapi-schema/{enum-wrong-data.json => enum-wrong-data.qapi} 
> (100%)
>  rename tests/qapi-schema/{escape-outside-string.json => 
> escape-outside-string.qapi} (100%)
>  rename tests/qapi-schema/{escape-too-big.json => escape-too-big.qapi} (100%)
>  rename tests/qapi-schema/{escape-too-short.json => escape-too-short.qapi} 
> (100%)
>  rename tests/qapi-schema/{event-boxed-empty.json => event-boxed-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{event-case.json => event-case.qapi} (100%)
>  rename tests/qapi-schema/{event-nest-struct.json => event-nest-struct.qapi} 
> (100%)
>  rename tests/qapi-schema/{flat-union-array-branch.json => 
> flat-union-array-branch.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-bad-base.json => 
> flat-union-bad-base.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-bad-discriminator.json => 
> flat-union-bad-discriminator.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-base-any.json => 
> flat-union-base-any.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-base-union.json => 
> flat-union-base-union.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-clash-member.json => 
> flat-union-clash-member.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-empty.json => flat-union-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{flat-union-incomplete-branch.json => 
> flat-union-incomplete-branch.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-inline.json => flat-union-inline.qapi} 
> (100%)
>  rename tests/qapi-schema/{flat-union-int-branch.json => 
> flat-union-int-branch.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-invalid-branch-key.json => 
> flat-union-invalid-branch-key.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-invalid-discriminator.json => 
> flat-union-invalid-discriminator.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-no-base.json => 
> flat-union-no-base.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-optional-discriminator.json => 
> flat-union-optional-discriminator.qapi} (100%)
>  rename tests/qapi-schema/{flat-union-string-discriminator.json => 
> flat-union-string-discriminator.qapi} (100%)
>  rename tests/qapi-schema/{funny-char.json => funny-char.qapi} (100%)
>  rename tests/qapi-schema/{ident-with-escape.json => ident-with-escape.qapi} 
> (100%)
>  delete mode 100644 tests/qapi-schema/include-before-err.json
>  create mode 100644 tests/qapi-schema/include-before-err.qapi
>  delete mode 100644 tests/qapi-schema/include-cycle-b.json
>  create mode 100644 tests/qapi-schema/include-cycle-b.qapi
>  delete mode 100644 tests/qapi-schema/include-cycle-c.json
>  create mode 100644 tests/qapi-schema/include-cycle-c.qapi
>  delete mode 100644 tests/qapi-schema/include-cycle.json
>  create mode 100644 tests/qapi-schema/include-cycle.qapi
>  delete mode 100644 tests/qapi-schema/include-extra-junk.json
>  create mode 100644 tests/qapi-schema/include-extra-junk.qapi
>  delete mode 100644 tests/qapi-schema/include-format-err.json
>  create mode 100644 tests/qapi-schema/include-format-err.qapi
>  delete mode 100644 tests/qapi-schema/include-nested-err.json
>  create mode 100644 tests/qapi-schema/include-nested-err.qapi
>  delete mode 100644 tests/qapi-schema/include-no-file.json
>  create mode 100644 tests/qapi-schema/include-no-file.qapi
>  rename tests/qapi-schema/{include-non-file.json => include-non-file.qapi} 
> (100%)
>  rename tests/qapi-schema/{include-relpath-sub.json => 
> include-relpath-sub.qapi} (100%)
>  delete mode 100644 tests/qapi-schema/include-relpath.json
>  create mode 100644 tests/qapi-schema/include-relpath.qapi
>  delete mode 100644 tests/qapi-schema/include-repetition-sub.json
>  create mode 100644 tests/qapi-schema/include-repetition-sub.qapi
>  delete mode 100644 tests/qapi-schema/include-repetition.json
>  create mode 100644 tests/qapi-schema/include-repetition.qapi
>  delete mode 100644 tests/qapi-schema/include-self-cycle.json
>  create mode 100644 tests/qapi-schema/include-self-cycle.qapi
>  rename tests/qapi-schema/{include-simple-sub.json => 
> include-simple-sub.qapi} (100%)
>  delete mode 100644 tests/qapi-schema/include-simple.json
>  create mode 100644 tests/qapi-schema/include-simple.qapi
>  delete mode 100644 tests/qapi-schema/include/relpath.json
>  create mode 100644 tests/qapi-schema/include/relpath.qapi
>  rename tests/qapi-schema/{indented-expr.json => indented-expr.qapi} (100%)
>  rename tests/qapi-schema/{leading-comma-list.json => 
> leading-comma-list.qapi} (100%)
>  rename tests/qapi-schema/{leading-comma-object.json => 
> leading-comma-object.qapi} (100%)
>  rename tests/qapi-schema/{missing-colon.json => missing-colon.qapi} (100%)
>  rename tests/qapi-schema/{missing-comma-list.json => 
> missing-comma-list.qapi} (100%)
>  rename tests/qapi-schema/{missing-comma-object.json => 
> missing-comma-object.qapi} (100%)
>  rename tests/qapi-schema/{missing-type.json => missing-type.qapi} (100%)
>  rename tests/qapi-schema/{nested-struct-data.json => 
> nested-struct-data.qapi} (100%)
>  rename tests/qapi-schema/{non-objects.json => non-objects.qapi} (100%)
>  rename tests/qapi-schema/{oob-test.json => oob-test.qapi} (100%)
>  rename tests/qapi-schema/{pragma-doc-required-crap.json => 
> pragma-doc-required-crap.qapi} (100%)
>  rename tests/qapi-schema/{pragma-extra-junk.json => pragma-extra-junk.qapi} 
> (100%)
>  rename tests/qapi-schema/{pragma-name-case-whitelist-crap.json => 
> pragma-name-case-whitelist-crap.qapi} (100%)
>  rename tests/qapi-schema/{pragma-non-dict.json => pragma-non-dict.qapi} 
> (100%)
>  rename tests/qapi-schema/{pragma-returns-whitelist-crap.json => 
> pragma-returns-whitelist-crap.qapi} (100%)
>  rename tests/qapi-schema/{qapi-schema-test.json => qapi-schema-test.qapi} 
> (100%)
>  rename tests/qapi-schema/{quoted-structural-chars.json => 
> quoted-structural-chars.qapi} (100%)
>  rename tests/qapi-schema/{redefined-builtin.json => redefined-builtin.qapi} 
> (100%)
>  rename tests/qapi-schema/{redefined-command.json => redefined-command.qapi} 
> (100%)
>  rename tests/qapi-schema/{redefined-event.json => redefined-event.qapi} 
> (100%)
>  rename tests/qapi-schema/{redefined-type.json => redefined-type.qapi} (100%)
>  rename tests/qapi-schema/{reserved-command-q.json => 
> reserved-command-q.qapi} (100%)
>  rename tests/qapi-schema/{reserved-enum-q.json => reserved-enum-q.qapi} 
> (100%)
>  rename tests/qapi-schema/{reserved-member-has.json => 
> reserved-member-has.qapi} (100%)
>  rename tests/qapi-schema/{reserved-member-q.json => reserved-member-q.qapi} 
> (100%)
>  rename tests/qapi-schema/{reserved-member-u.json => reserved-member-u.qapi} 
> (100%)
>  rename tests/qapi-schema/{reserved-member-underscore.json => 
> reserved-member-underscore.qapi} (100%)
>  rename tests/qapi-schema/{reserved-type-kind.json => 
> reserved-type-kind.qapi} (100%)
>  rename tests/qapi-schema/{reserved-type-list.json => 
> reserved-type-list.qapi} (100%)
>  rename tests/qapi-schema/{returns-alternate.json => returns-alternate.qapi} 
> (100%)
>  rename tests/qapi-schema/{returns-array-bad.json => returns-array-bad.qapi} 
> (100%)
>  rename tests/qapi-schema/{returns-dict.json => returns-dict.qapi} (100%)
>  rename tests/qapi-schema/{returns-unknown.json => returns-unknown.qapi} 
> (100%)
>  rename tests/qapi-schema/{returns-whitelist.json => returns-whitelist.qapi} 
> (100%)
>  rename tests/qapi-schema/{struct-base-clash-deep.json => 
> struct-base-clash-deep.qapi} (100%)
>  rename tests/qapi-schema/{struct-base-clash.json => struct-base-clash.qapi} 
> (100%)
>  rename tests/qapi-schema/{struct-data-invalid.json => 
> struct-data-invalid.qapi} (100%)
>  rename tests/qapi-schema/{struct-member-invalid.json => 
> struct-member-invalid.qapi} (100%)
>  rename tests/qapi-schema/{trailing-comma-list.json => 
> trailing-comma-list.qapi} (100%)
>  rename tests/qapi-schema/{trailing-comma-object.json => 
> trailing-comma-object.qapi} (100%)
>  rename tests/qapi-schema/{type-bypass-bad-gen.json => 
> type-bypass-bad-gen.qapi} (100%)
>  rename tests/qapi-schema/{unclosed-list.json => unclosed-list.qapi} (100%)
>  rename tests/qapi-schema/{unclosed-object.json => unclosed-object.qapi} 
> (100%)
>  rename tests/qapi-schema/{unclosed-string.json => unclosed-string.qapi} 
> (100%)
>  rename tests/qapi-schema/{unicode-str.json => unicode-str.qapi} (100%)
>  rename tests/qapi-schema/{union-base-empty.json => union-base-empty.qapi} 
> (100%)
>  rename tests/qapi-schema/{union-base-no-discriminator.json => 
> union-base-no-discriminator.qapi} (100%)
>  rename tests/qapi-schema/{union-branch-case.json => union-branch-case.qapi} 
> (100%)
>  rename tests/qapi-schema/{union-clash-branches.json => 
> union-clash-branches.qapi} (100%)
>  rename tests/qapi-schema/{union-empty.json => union-empty.qapi} (100%)
>  rename tests/qapi-schema/{union-invalid-base.json => 
> union-invalid-base.qapi} (100%)
>  rename tests/qapi-schema/{union-optional-branch.json => 
> union-optional-branch.qapi} (100%)
>  rename tests/qapi-schema/{union-unknown.json => union-unknown.qapi} (100%)
>  rename tests/qapi-schema/{unknown-escape.json => unknown-escape.qapi} (100%)
>  rename tests/qapi-schema/{unknown-expr-key.json => unknown-expr-key.qapi} 
> (100%)
> 
> diff --git a/docs/devel/blkdebug.txt b/docs/devel/blkdebug.txt
> index 43d8e8f9c63..33b56daad1b 100644
> --- a/docs/devel/blkdebug.txt
> +++ b/docs/devel/blkdebug.txt
> @@ -92,7 +92,7 @@ The core events are:
> 
>    flush_to_disk - flush the host block device's disk cache
> 
> -See qapi/block-core.json:BlkdebugEvent for the full list of events.
> +See qapi/block-core.qapi:BlkdebugEvent for the full list of events.
>  You may need to grep block driver source code to understand the
>  meaning of specific events.
> 
> diff --git a/docs/devel/qapi-code-gen.txt b/docs/devel/qapi-code-gen.txt
> index a569d247455..4a5af251269 100644
> --- a/docs/devel/qapi-code-gen.txt
> +++ b/docs/devel/qapi-code-gen.txt
> @@ -293,7 +293,7 @@ Usage: { 'include': STRING }
> 
>  The QAPI schema definitions can be modularized using the 'include' directive:
> 
> - { 'include': 'path/to/file.json' }
> + { 'include': 'path/to/file.qapi' }
> 
>  The directive is evaluated recursively, and include paths are relative to the
>  file using the directive. Multiple includes of the same file are
> @@ -961,7 +961,7 @@ list of that type as a parameter, and returns a single 
> element of that
>  type.  The user is responsible for writing the implementation of
>  qmp_my_command(); everything else is produced by the generator.
> 
> -    $ cat example-schema.json
> +    $ cat example-schema.qapi
>      { 'struct': 'UserDefOne',
>        'data': { 'integer': 'int', '*string': 'str' } }
> 
> @@ -977,7 +977,7 @@ We run qapi-gen.py like this:
>      --prefix="example-" example-schema.json
> 
>  For a more thorough look at generated code, the testsuite includes
> -tests/qapi-schema/qapi-schema-tests.json that covers more examples of
> +tests/qapi-schema/qapi-schema-tests.qapi that covers more examples of
>  what the generator will accept, and compiles the resulting C code as
>  part of 'make check-unit'.
> 
> diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst
> index 0ca1a2d4b58..b7a1211591c 100644
> --- a/docs/devel/testing.rst
> +++ b/docs/devel/testing.rst
> @@ -132,7 +132,7 @@ output.
>  The input/output data is managed under the ``tests/qapi-schema`` directory.
>  Each test case includes four files that have a common base name:
> 
> -  * ``${casename}.json`` - the file contains the JSON input for feeding the
> +  * ``${casename}.qapi`` - the file contains the JSON input for feeding the
>      parser
>    * ``${casename}.out`` - the file contains the expected stdout from the 
> parser
>    * ``${casename}.err`` - the file contains the expected stderr from the 
> parser
> @@ -147,7 +147,7 @@ parser (either fixing a bug or extending/modifying the 
> syntax). To do this:
> 
>  2. Add the new test in ``tests/Makefile.include``. For example:
> 
> -  ``qapi-schema += foo.json``
> +  ``qapi-schema += foo.qapi``
> 
>  check-block
>  -----------
> diff --git a/docs/devel/writing-qmp-commands.txt 
> b/docs/devel/writing-qmp-commands.txt
> index 1cd3dbf48ac..056b9fa081f 100644
> --- a/docs/devel/writing-qmp-commands.txt
> +++ b/docs/devel/writing-qmp-commands.txt
> @@ -89,7 +89,7 @@ Our command will be called "hello-world". It takes no 
> arguments, nor does it
>  return any data.
> 
>  The first step is defining the command in the appropriate QAPI schema
> -module.  We pick module qapi/misc.json, and add the following line at
> +module.  We pick module qapi/misc.qapi, and add the following line at
>  the bottom:
> 
>  { 'command': 'hello-world' }
> @@ -239,7 +239,7 @@ There's only one step missing to make "hello-world"'s 
> implementation complete,
>  and that's its documentation in the schema file.
> 
>  There are many examples of such documentation in the schema file already, but
> -here goes "hello-world"'s new entry for qapi/misc.json:
> +here goes "hello-world"'s new entry for qapi/misc.qapi:
> 
>  ##
>  # @hello-world
> diff --git a/docs/interop/live-block-operations.rst 
> b/docs/interop/live-block-operations.rst
> index 734252bc804..f2967ad9514 100644
> --- a/docs/interop/live-block-operations.rst
> +++ b/docs/interop/live-block-operations.rst
> @@ -20,7 +20,7 @@ primitives, and some (non-exhaustive list of) examples to 
> illustrate
>  their use.
> 
>  .. note::
> -    The file ``qapi/block-core.json`` in the QEMU source tree has the
> +    The file ``qapi/block-core.qapi`` in the QEMU source tree has the
>      canonical QEMU API (QAPI) schema documentation for the QMP
>      primitives discussed here.
> 
> @@ -54,7 +54,7 @@ files in a disk image backing chain:
>  (1) Directional: 'base' and 'top'.  Given the simple disk image chain
>      above, image [A] can be referred to as 'base', and image [B] as
>      'top'.  (This terminology can be seen in in QAPI schema file,
> -    block-core.json.)
> +    block-core.qapi.)
> 
>  (2) Relational: 'backing file' and 'overlay'.  Again, taking the same
>      simple disk image chain from the above, disk image [A] is referred
> diff --git a/docs/interop/qmp-intro.txt b/docs/interop/qmp-intro.txt
> index 19ac6c573b6..705ee520073 100644
> --- a/docs/interop/qmp-intro.txt
> +++ b/docs/interop/qmp-intro.txt
> @@ -79,7 +79,7 @@ Escape character is '^]'.
>  }
> 
>  Please refer to docs/interop/qemu-qmp-ref.* for a complete command
> -reference, generated from qapi/qmp-schema.json.
> +reference, generated from qapi/qmp-schema.qapi.
> 
>  QMP wiki page
>  -------------
> diff --git a/Makefile b/Makefile
> index f5c2ace8b30..428ac423fba 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -571,27 +571,27 @@ qga/qapi-generated/qga-qapi-visit.c 
> qga/qapi-generated/qga-qapi-visit.h \
>  qga/qapi-generated/qga-qapi-commands.h 
> qga/qapi-generated/qga-qapi-commands.c \
>  qga/qapi-generated/qga-qapi-doc.texi: \
>  qga/qapi-generated/qga-gen-timestamp ;
> -qga/qapi-generated/qga-gen-timestamp: $(SRC_PATH)/qapi/qga-schema.json 
> $(qapi-py)
> +qga/qapi-generated/qga-gen-timestamp: $(SRC_PATH)/qapi/qga-schema.qapi 
> $(qapi-py)
>       $(call quiet-command,$(PYTHON_UTF8) $(SRC_PATH)/scripts/qapi-gen.py \
>               -o qga/qapi-generated -p "qga-" $<, \
>               "GEN","$(@:%-timestamp=%)")
>       @>$@
> 
> -qmp-modules = $(SRC_PATH)/qapi/qmp-schema.json $(SRC_PATH)/qapi/common.json \
> -               $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \
> -               $(SRC_PATH)/qapi/char.json \
> -               $(SRC_PATH)/qapi/crypto.json \
> -               $(SRC_PATH)/qapi/introspect.json \
> -               $(SRC_PATH)/qapi/migration.json \
> -               $(SRC_PATH)/qapi/misc.json \
> -               $(SRC_PATH)/qapi/net.json \
> -               $(SRC_PATH)/qapi/rocker.json \
> -               $(SRC_PATH)/qapi/run-state.json \
> -               $(SRC_PATH)/qapi/sockets.json \
> -               $(SRC_PATH)/qapi/tpm.json \
> -               $(SRC_PATH)/qapi/trace.json \
> -               $(SRC_PATH)/qapi/transaction.json \
> -               $(SRC_PATH)/qapi/ui.json
> +qmp-modules = $(SRC_PATH)/qapi/qmp-schema.qapi $(SRC_PATH)/qapi/common.qapi \
> +               $(SRC_PATH)/qapi/block.qapi $(SRC_PATH)/qapi/block-core.qapi \
> +               $(SRC_PATH)/qapi/char.qapi \
> +               $(SRC_PATH)/qapi/crypto.qapi \
> +               $(SRC_PATH)/qapi/introspect.qapi \
> +               $(SRC_PATH)/qapi/migration.qapi \
> +               $(SRC_PATH)/qapi/misc.qapi \
> +               $(SRC_PATH)/qapi/net.qapi \
> +               $(SRC_PATH)/qapi/rocker.qapi \
> +               $(SRC_PATH)/qapi/run-state.qapi \
> +               $(SRC_PATH)/qapi/sockets.qapi \
> +               $(SRC_PATH)/qapi/tpm.qapi \
> +               $(SRC_PATH)/qapi/trace.qapi \
> +               $(SRC_PATH)/qapi/transaction.qapi \
> +               $(SRC_PATH)/qapi/ui.qapi
> 
>  qapi/qapi-builtin-types.c qapi/qapi-builtin-types.h \
>  qapi/qapi-types.c qapi/qapi-types.h \
> diff --git a/qapi/block-core.json b/qapi/block-core.qapi
> similarity index 99%
> rename from qapi/block-core.json
> rename to qapi/block-core.qapi
> index c50517bff31..228060a137c 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.qapi
> @@ -4,9 +4,9 @@
>  # == Block core (VM unrelated)
>  ##
> 
> -{ 'include': 'common.json' }
> -{ 'include': 'crypto.json' }
> -{ 'include': 'sockets.json' }
> +{ 'include': 'common.qapi' }
> +{ 'include': 'crypto.qapi' }
> +{ 'include': 'sockets.qapi' }
> 
>  ##
>  # @SnapshotInfo:
> diff --git a/qapi/block.json b/qapi/block.qapi
> similarity index 99%
> rename from qapi/block.json
> rename to qapi/block.qapi
> index c6945240029..da85ef68886 100644
> --- a/qapi/block.json
> +++ b/qapi/block.qapi
> @@ -4,7 +4,7 @@
>  # = Block devices
>  ##
> 
> -{ 'include': 'block-core.json' }
> +{ 'include': 'block-core.qapi' }
> 
>  ##
>  # == Additional block stuff (VM related)
> diff --git a/qapi/char.json b/qapi/char.qapi
> similarity index 99%
> rename from qapi/char.json
> rename to qapi/char.qapi
> index ae19dcd1ed1..45901fb4502 100644
> --- a/qapi/char.json
> +++ b/qapi/char.qapi
> @@ -5,7 +5,7 @@
>  # = Character devices
>  ##
> 
> -{ 'include': 'sockets.json' }
> +{ 'include': 'sockets.qapi' }
> 
>  ##
>  # @ChardevInfo:
> diff --git a/qapi/common.json b/qapi/common.qapi
> similarity index 100%
> rename from qapi/common.json
> rename to qapi/common.qapi
> diff --git a/qapi/crypto.json b/qapi/crypto.qapi
> similarity index 100%
> rename from qapi/crypto.json
> rename to qapi/crypto.qapi
> diff --git a/qapi/introspect.json b/qapi/introspect.qapi
> similarity index 100%
> rename from qapi/introspect.json
> rename to qapi/introspect.qapi
> diff --git a/qapi/migration.json b/qapi/migration.qapi
> similarity index 99%
> rename from qapi/migration.json
> rename to qapi/migration.qapi
> index 9d0bf82cf46..dc64952ec4f 100644
> --- a/qapi/migration.json
> +++ b/qapi/migration.qapi
> @@ -5,7 +5,7 @@
>  # = Migration
>  ##
> 
> -{ 'include': 'common.json' }
> +{ 'include': 'common.qapi' }
> 
>  ##
>  # @MigrationStats:
> diff --git a/qapi/misc.json b/qapi/misc.qapi
> similarity index 100%
> rename from qapi/misc.json
> rename to qapi/misc.qapi
> diff --git a/qapi/net.json b/qapi/net.qapi
> similarity index 99%
> rename from qapi/net.json
> rename to qapi/net.qapi
> index 9117c569723..b28451758a8 100644
> --- a/qapi/net.json
> +++ b/qapi/net.qapi
> @@ -5,7 +5,7 @@
>  # = Net devices
>  ##
> 
> -{ 'include': 'common.json' }
> +{ 'include': 'common.qapi' }
> 
>  ##
>  # @set_link:
> diff --git a/qapi/qga-schema.json b/qapi/qga-schema.qapi
> similarity index 100%
> rename from qapi/qga-schema.json
> rename to qapi/qga-schema.qapi
> diff --git a/qapi/qmp-schema.json b/qapi/qmp-schema.qapi
> similarity index 88%
> rename from qapi/qmp-schema.json
> rename to qapi/qmp-schema.qapi
> index 25bce78352b..067a61fa6f3 100644
> --- a/qapi/qmp-schema.json
> +++ b/qapi/qmp-schema.qapi
> @@ -78,18 +78,18 @@
>  # stable order, it's best to include each sub-schema just once, or
>  # include it first right here.
> 
> -{ 'include': 'common.json' }
> -{ 'include': 'sockets.json' }
> -{ 'include': 'run-state.json' }
> -{ 'include': 'crypto.json' }
> -{ 'include': 'block.json' }
> -{ 'include': 'char.json' }
> -{ 'include': 'net.json' }
> -{ 'include': 'rocker.json' }
> -{ 'include': 'tpm.json' }
> -{ 'include': 'ui.json' }
> -{ 'include': 'migration.json' }
> -{ 'include': 'transaction.json' }
> -{ 'include': 'trace.json' }
> -{ 'include': 'introspect.json' }
> -{ 'include': 'misc.json' }
> +{ 'include': 'common.qapi' }
> +{ 'include': 'sockets.qapi' }
> +{ 'include': 'run-state.qapi' }
> +{ 'include': 'crypto.qapi' }
> +{ 'include': 'block.qapi' }
> +{ 'include': 'char.qapi' }
> +{ 'include': 'net.qapi' }
> +{ 'include': 'rocker.qapi' }
> +{ 'include': 'tpm.qapi' }
> +{ 'include': 'ui.qapi' }
> +{ 'include': 'migration.qapi' }
> +{ 'include': 'transaction.qapi' }
> +{ 'include': 'trace.qapi' }
> +{ 'include': 'introspect.qapi' }
> +{ 'include': 'misc.qapi' }
> diff --git a/qapi/rocker.json b/qapi/rocker.qapi
> similarity index 100%
> rename from qapi/rocker.json
> rename to qapi/rocker.qapi
> diff --git a/qapi/run-state.json b/qapi/run-state.qapi
> similarity index 100%
> rename from qapi/run-state.json
> rename to qapi/run-state.qapi
> diff --git a/qapi/sockets.json b/qapi/sockets.qapi
> similarity index 99%
> rename from qapi/sockets.json
> rename to qapi/sockets.qapi
> index fc81d8d5e8b..e58db0b8b03 100644
> --- a/qapi/sockets.json
> +++ b/qapi/sockets.qapi
> @@ -4,7 +4,7 @@
>  # = Socket data types
>  ##
> 
> -{ 'include': 'common.json' }
> +{ 'include': 'common.qapi' }
> 
>  ##
>  # @NetworkAddressFamily:
> diff --git a/qapi/tpm.json b/qapi/tpm.qapi
> similarity index 100%
> rename from qapi/tpm.json
> rename to qapi/tpm.qapi
> diff --git a/qapi/trace.json b/qapi/trace.qapi
> similarity index 100%
> rename from qapi/trace.json
> rename to qapi/trace.qapi
> diff --git a/qapi/transaction.json b/qapi/transaction.qapi
> similarity index 99%
> rename from qapi/transaction.json
> rename to qapi/transaction.qapi
> index bd312792dae..49118f49f1d 100644
> --- a/qapi/transaction.json
> +++ b/qapi/transaction.qapi
> @@ -5,7 +5,7 @@
>  # = Transactions
>  ##
> 
> -{ 'include': 'block.json' }
> +{ 'include': 'block.qapi' }
> 
>  ##
>  # @Abort:
> diff --git a/qapi/ui.json b/qapi/ui.qapi
> similarity index 99%
> rename from qapi/ui.json
> rename to qapi/ui.qapi
> index 5d01ad43045..cb8b7a86d1c 100644
> --- a/qapi/ui.json
> +++ b/qapi/ui.qapi
> @@ -5,7 +5,7 @@
>  # = Remote desktop
>  ##
> 
> -{ 'include': 'sockets.json' }
> +{ 'include': 'sockets.qapi' }
> 
>  ##
>  # @set_password:
> diff --git a/include/crypto/block.h b/include/crypto/block.h
> index cd18f46d56d..ccab4d2df8b 100644
> --- a/include/crypto/block.h
> +++ b/include/crypto/block.h
> @@ -27,7 +27,7 @@
>  typedef struct QCryptoBlock QCryptoBlock;
> 
>  /* See also QCryptoBlockFormat, QCryptoBlockCreateOptions
> - * and QCryptoBlockOpenOptions in qapi/crypto.json */
> + * and QCryptoBlockOpenOptions in qapi/crypto.qapi */
> 
>  typedef ssize_t (*QCryptoBlockReadFunc)(QCryptoBlock *block,
>                                          size_t offset,
> diff --git a/include/crypto/cipher.h b/include/crypto/cipher.h
> index bce2d4c8e46..287c921874d 100644
> --- a/include/crypto/cipher.h
> +++ b/include/crypto/cipher.h
> @@ -26,7 +26,7 @@
>  typedef struct QCryptoCipher QCryptoCipher;
> 
>  /* See also "QCryptoCipherAlgorithm" and "QCryptoCipherMode"
> - * enums defined in qapi/crypto.json */
> + * enums defined in qapi/crypto.qapi */
> 
>  /**
>   * QCryptoCipher:
> diff --git a/include/crypto/hash.h b/include/crypto/hash.h
> index 077ac7bea0e..d9ee11f5224 100644
> --- a/include/crypto/hash.h
> +++ b/include/crypto/hash.h
> @@ -23,7 +23,7 @@
> 
>  #include "qapi/qapi-types-crypto.h"
> 
> -/* See also "QCryptoHashAlgorithm" defined in qapi/crypto.json */
> +/* See also "QCryptoHashAlgorithm" defined in qapi/crypto.qapi */
> 
>  /**
>   * qcrypto_hash_supports:
> diff --git a/include/crypto/ivgen.h b/include/crypto/ivgen.h
> index 0350cd2a930..0609f4f1f94 100644
> --- a/include/crypto/ivgen.h
> +++ b/include/crypto/ivgen.h
> @@ -97,7 +97,7 @@
> 
>  typedef struct QCryptoIVGen QCryptoIVGen;
> 
> -/* See also QCryptoIVGenAlgorithm enum in qapi/crypto.json */
> +/* See also QCryptoIVGenAlgorithm enum in qapi/crypto.qapi */
> 
> 
>  /**
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 4a4b7aa2a64..cf2c0de6cd2 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1380,8 +1380,8 @@ M: Markus Armbruster <address@hidden>
>  S: Supported
>  F: blockdev.c
>  F: block/qapi.c
> -F: qapi/block*.json
> -F: qapi/transaction.json
> +F: qapi/block*.qapi
> +F: qapi/transaction.qapi
>  T: git git://repo.or.cz/qemu/armbru.git block-next
> 
>  Dirty Bitmaps
> @@ -1404,7 +1404,7 @@ M: Marc-André Lureau <address@hidden>
>  S: Maintained
>  F: chardev/
>  F: include/chardev/
> -F: qapi/char.json
> +F: qapi/char.qapi
> 
>  Character Devices (Braille)
>  M: Samuel Thibault <address@hidden>
> @@ -1482,14 +1482,14 @@ F: include/ui/spice-display.h
>  F: ui/spice-*.c
>  F: audio/spiceaudio.c
>  F: hw/display/qxl*
> -F: qapi/ui.json
> +F: qapi/ui.qapi
> 
>  Graphics
>  M: Gerd Hoffmann <address@hidden>
>  S: Odd Fixes
>  F: ui/
>  F: include/ui/
> -F: qapi/ui.json
> +F: qapi/ui.qapi
> 
>  Cocoa graphics
>  M: Peter Maydell <address@hidden>
> @@ -1503,7 +1503,7 @@ F: cpus.c
>  F: util/main-loop.c
>  F: util/qemu-timer.c
>  F: vl.c
> -F: qapi/run-state.json
> +F: qapi/run-state.qapi
> 
>  Human Monitor (HMP)
>  M: Dr. David Alan Gilbert <address@hidden>
> @@ -1520,7 +1520,7 @@ S: Maintained
>  F: net/
>  F: include/net/
>  T: git git://github.com/jasowang/qemu.git net
> -F: qapi/net.json
> +F: qapi/net.qapi
> 
>  Netmap network backend
>  M: Luigi Rizzo <address@hidden>
> @@ -1564,7 +1564,7 @@ M: Markus Armbruster <address@hidden>
>  M: Michael Roth <address@hidden>
>  S: Supported
>  F: qapi/
> -X: qapi/*.json
> +X: qapi/*.qapi
>  F: include/qapi/
>  X: include/qapi/qmp/
>  F: include/qapi/qmp/dispatch.h
> @@ -1581,7 +1581,7 @@ QAPI Schema
>  M: Eric Blake <address@hidden>
>  M: Markus Armbruster <address@hidden>
>  S: Supported
> -F: qapi/*.json
> +F: qapi/*.qapi
>  T: git git://repo.or.cz/qemu/armbru.git qapi-next
> 
>  QObject
> @@ -1602,7 +1602,7 @@ QEMU Guest Agent
>  M: Michael Roth <address@hidden>
>  S: Maintained
>  F: qga/
> -F: qapi/qga-schema.json
> +F: qapi/qga-schema.qapi
>  F: qemu-ga.texi
>  F: scripts/qemu-guest-agent/
>  F: tests/test-qga.c
> @@ -1669,7 +1669,7 @@ F: stubs/tpm.c
>  F: hw/tpm/*
>  F: include/hw/acpi/tpm.h
>  F: include/sysemu/tpm*
> -F: qapi/tpm.json
> +F: qapi/tpm.qapi
>  F: backends/tpm.c
>  F: tests/*tpm*
>  T: git git://github.com/stefanberger/qemu-tpm.git tpm-next
> @@ -1688,7 +1688,7 @@ F: scripts/vmstate-static-checker.py
>  F: tests/vmstate-static-checker-data/
>  F: tests/migration-test.c
>  F: docs/devel/migration.txt
> -F: qapi/migration.json
> +F: qapi/migration.qapi
> 
>  Seccomp
>  M: Eduardo Otubo <address@hidden>
> @@ -1732,7 +1732,7 @@ M: Paolo Bonzini <address@hidden>
>  S: Maintained
>  F: include/qemu/sockets.h
>  F: util/qemu-sockets.c
> -F: qapi/sockets.json
> +F: qapi/sockets.qapi
> 
>  Throttling infrastructure
>  M: Alberto Garcia <address@hidden>
> diff --git a/scripts/git.orderfile b/scripts/git.orderfile
> index ac699700b18..1549511d877 100644
> --- a/scripts/git.orderfile
> +++ b/scripts/git.orderfile
> @@ -19,7 +19,7 @@ Makefile*
>  *.mak
> 
>  # qapi schema
> -*.json
> +*.qapi
> 
>  # headers
>  *.h
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 3b9a5e31a2c..21abab15acd 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -404,171 +404,171 @@ check-qtest-generic-y += 
> tests/machine-none-test$(EXESUF)
>  check-qtest-generic-y += tests/qom-test$(EXESUF)
>  check-qtest-generic-y += tests/test-hmp$(EXESUF)
> 
> -qapi-schema += alternate-any.json
> -qapi-schema += alternate-array.json
> -qapi-schema += alternate-base.json
> -qapi-schema += alternate-clash.json
> -qapi-schema += alternate-conflict-dict.json
> -qapi-schema += alternate-conflict-enum-bool.json
> -qapi-schema += alternate-conflict-enum-int.json
> -qapi-schema += alternate-conflict-string.json
> -qapi-schema += alternate-conflict-bool-string.json
> -qapi-schema += alternate-conflict-num-string.json
> -qapi-schema += alternate-empty.json
> -qapi-schema += alternate-nested.json
> -qapi-schema += alternate-unknown.json
> -qapi-schema += args-alternate.json
> -qapi-schema += args-any.json
> -qapi-schema += args-array-empty.json
> -qapi-schema += args-array-unknown.json
> -qapi-schema += args-bad-boxed.json
> -qapi-schema += args-boxed-anon.json
> -qapi-schema += args-boxed-empty.json
> -qapi-schema += args-boxed-string.json
> -qapi-schema += args-int.json
> -qapi-schema += args-invalid.json
> -qapi-schema += args-member-array-bad.json
> -qapi-schema += args-member-case.json
> -qapi-schema += args-member-unknown.json
> -qapi-schema += args-name-clash.json
> -qapi-schema += args-union.json
> -qapi-schema += args-unknown.json
> -qapi-schema += bad-base.json
> -qapi-schema += bad-data.json
> -qapi-schema += bad-ident.json
> -qapi-schema += bad-type-bool.json
> -qapi-schema += bad-type-dict.json
> -qapi-schema += bad-type-int.json
> -qapi-schema += base-cycle-direct.json
> -qapi-schema += base-cycle-indirect.json
> -qapi-schema += command-int.json
> -qapi-schema += comments.json
> -qapi-schema += doc-bad-alternate-member.json
> -qapi-schema += doc-bad-command-arg.json
> -qapi-schema += doc-bad-section.json
> -qapi-schema += doc-bad-symbol.json
> -qapi-schema += doc-bad-union-member.json
> -qapi-schema += doc-before-include.json
> -qapi-schema += doc-before-pragma.json
> -qapi-schema += doc-duplicated-arg.json
> -qapi-schema += doc-duplicated-return.json
> -qapi-schema += doc-duplicated-since.json
> -qapi-schema += doc-empty-arg.json
> -qapi-schema += doc-empty-section.json
> -qapi-schema += doc-empty-symbol.json
> -qapi-schema += doc-good.json
> -qapi-schema += doc-interleaved-section.json
> -qapi-schema += doc-invalid-end.json
> -qapi-schema += doc-invalid-end2.json
> -qapi-schema += doc-invalid-return.json
> -qapi-schema += doc-invalid-section.json
> -qapi-schema += doc-invalid-start.json
> -qapi-schema += doc-missing-colon.json
> -qapi-schema += doc-missing-expr.json
> -qapi-schema += doc-missing-space.json
> -qapi-schema += doc-missing.json
> -qapi-schema += doc-no-symbol.json
> -qapi-schema += double-data.json
> -qapi-schema += double-type.json
> -qapi-schema += duplicate-key.json
> -qapi-schema += empty.json
> -qapi-schema += enum-bad-name.json
> -qapi-schema += enum-bad-prefix.json
> -qapi-schema += enum-clash-member.json
> -qapi-schema += enum-dict-member.json
> -qapi-schema += enum-int-member.json
> -qapi-schema += enum-member-case.json
> -qapi-schema += enum-missing-data.json
> -qapi-schema += enum-wrong-data.json
> -qapi-schema += escape-outside-string.json
> -qapi-schema += escape-too-big.json
> -qapi-schema += escape-too-short.json
> -qapi-schema += event-boxed-empty.json
> -qapi-schema += event-case.json
> -qapi-schema += event-nest-struct.json
> -qapi-schema += flat-union-array-branch.json
> -qapi-schema += flat-union-bad-base.json
> -qapi-schema += flat-union-bad-discriminator.json
> -qapi-schema += flat-union-base-any.json
> -qapi-schema += flat-union-base-union.json
> -qapi-schema += flat-union-clash-member.json
> -qapi-schema += flat-union-empty.json
> -qapi-schema += flat-union-incomplete-branch.json
> -qapi-schema += flat-union-inline.json
> -qapi-schema += flat-union-int-branch.json
> -qapi-schema += flat-union-invalid-branch-key.json
> -qapi-schema += flat-union-invalid-discriminator.json
> -qapi-schema += flat-union-no-base.json
> -qapi-schema += flat-union-optional-discriminator.json
> -qapi-schema += flat-union-string-discriminator.json
> -qapi-schema += funny-char.json
> -qapi-schema += ident-with-escape.json
> -qapi-schema += include-before-err.json
> -qapi-schema += include-cycle.json
> -qapi-schema += include-extra-junk.json
> -qapi-schema += include-format-err.json
> -qapi-schema += include-nested-err.json
> -qapi-schema += include-no-file.json
> -qapi-schema += include-non-file.json
> -qapi-schema += include-relpath.json
> -qapi-schema += include-repetition.json
> -qapi-schema += include-self-cycle.json
> -qapi-schema += include-simple.json
> -qapi-schema += indented-expr.json
> -qapi-schema += leading-comma-list.json
> -qapi-schema += leading-comma-object.json
> -qapi-schema += missing-colon.json
> -qapi-schema += missing-comma-list.json
> -qapi-schema += missing-comma-object.json
> -qapi-schema += missing-type.json
> -qapi-schema += nested-struct-data.json
> -qapi-schema += non-objects.json
> -qapi-schema += oob-test.json
> -qapi-schema += pragma-doc-required-crap.json
> -qapi-schema += pragma-extra-junk.json
> -qapi-schema += pragma-name-case-whitelist-crap.json
> -qapi-schema += pragma-non-dict.json
> -qapi-schema += pragma-returns-whitelist-crap.json
> -qapi-schema += qapi-schema-test.json
> -qapi-schema += quoted-structural-chars.json
> -qapi-schema += redefined-builtin.json
> -qapi-schema += redefined-command.json
> -qapi-schema += redefined-event.json
> -qapi-schema += redefined-type.json
> -qapi-schema += reserved-command-q.json
> -qapi-schema += reserved-enum-q.json
> -qapi-schema += reserved-member-has.json
> -qapi-schema += reserved-member-q.json
> -qapi-schema += reserved-member-u.json
> -qapi-schema += reserved-member-underscore.json
> -qapi-schema += reserved-type-kind.json
> -qapi-schema += reserved-type-list.json
> -qapi-schema += returns-alternate.json
> -qapi-schema += returns-array-bad.json
> -qapi-schema += returns-dict.json
> -qapi-schema += returns-unknown.json
> -qapi-schema += returns-whitelist.json
> -qapi-schema += struct-base-clash-deep.json
> -qapi-schema += struct-base-clash.json
> -qapi-schema += struct-data-invalid.json
> -qapi-schema += struct-member-invalid.json
> -qapi-schema += trailing-comma-list.json
> -qapi-schema += trailing-comma-object.json
> -qapi-schema += type-bypass-bad-gen.json
> -qapi-schema += unclosed-list.json
> -qapi-schema += unclosed-object.json
> -qapi-schema += unclosed-string.json
> -qapi-schema += unicode-str.json
> -qapi-schema += union-base-empty.json
> -qapi-schema += union-base-no-discriminator.json
> -qapi-schema += union-branch-case.json
> -qapi-schema += union-clash-branches.json
> -qapi-schema += union-empty.json
> -qapi-schema += union-invalid-base.json
> -qapi-schema += union-optional-branch.json
> -qapi-schema += union-unknown.json
> -qapi-schema += unknown-escape.json
> -qapi-schema += unknown-expr-key.json
> +qapi-schema += alternate-any.qapi
> +qapi-schema += alternate-array.qapi
> +qapi-schema += alternate-base.qapi
> +qapi-schema += alternate-clash.qapi
> +qapi-schema += alternate-conflict-dict.qapi
> +qapi-schema += alternate-conflict-enum-bool.qapi
> +qapi-schema += alternate-conflict-enum-int.qapi
> +qapi-schema += alternate-conflict-string.qapi
> +qapi-schema += alternate-conflict-bool-string.qapi
> +qapi-schema += alternate-conflict-num-string.qapi
> +qapi-schema += alternate-empty.qapi
> +qapi-schema += alternate-nested.qapi
> +qapi-schema += alternate-unknown.qapi
> +qapi-schema += args-alternate.qapi
> +qapi-schema += args-any.qapi
> +qapi-schema += args-array-empty.qapi
> +qapi-schema += args-array-unknown.qapi
> +qapi-schema += args-bad-boxed.qapi
> +qapi-schema += args-boxed-anon.qapi
> +qapi-schema += args-boxed-empty.qapi
> +qapi-schema += args-boxed-string.qapi
> +qapi-schema += args-int.qapi
> +qapi-schema += args-invalid.qapi
> +qapi-schema += args-member-array-bad.qapi
> +qapi-schema += args-member-case.qapi
> +qapi-schema += args-member-unknown.qapi
> +qapi-schema += args-name-clash.qapi
> +qapi-schema += args-union.qapi
> +qapi-schema += args-unknown.qapi
> +qapi-schema += bad-base.qapi
> +qapi-schema += bad-data.qapi
> +qapi-schema += bad-ident.qapi
> +qapi-schema += bad-type-bool.qapi
> +qapi-schema += bad-type-dict.qapi
> +qapi-schema += bad-type-int.qapi
> +qapi-schema += base-cycle-direct.qapi
> +qapi-schema += base-cycle-indirect.qapi
> +qapi-schema += command-int.qapi
> +qapi-schema += comments.qapi
> +qapi-schema += doc-bad-alternate-member.qapi
> +qapi-schema += doc-bad-command-arg.qapi
> +qapi-schema += doc-bad-section.qapi
> +qapi-schema += doc-bad-symbol.qapi
> +qapi-schema += doc-bad-union-member.qapi
> +qapi-schema += doc-before-include.qapi
> +qapi-schema += doc-before-pragma.qapi
> +qapi-schema += doc-duplicated-arg.qapi
> +qapi-schema += doc-duplicated-return.qapi
> +qapi-schema += doc-duplicated-since.qapi
> +qapi-schema += doc-empty-arg.qapi
> +qapi-schema += doc-empty-section.qapi
> +qapi-schema += doc-empty-symbol.qapi
> +qapi-schema += doc-good.qapi
> +qapi-schema += doc-interleaved-section.qapi
> +qapi-schema += doc-invalid-end.qapi
> +qapi-schema += doc-invalid-end2.qapi
> +qapi-schema += doc-invalid-return.qapi
> +qapi-schema += doc-invalid-section.qapi
> +qapi-schema += doc-invalid-start.qapi
> +qapi-schema += doc-missing-colon.qapi
> +qapi-schema += doc-missing-expr.qapi
> +qapi-schema += doc-missing-space.qapi
> +qapi-schema += doc-missing.qapi
> +qapi-schema += doc-no-symbol.qapi
> +qapi-schema += double-data.qapi
> +qapi-schema += double-type.qapi
> +qapi-schema += duplicate-key.qapi
> +qapi-schema += empty.qapi
> +qapi-schema += enum-bad-name.qapi
> +qapi-schema += enum-bad-prefix.qapi
> +qapi-schema += enum-clash-member.qapi
> +qapi-schema += enum-dict-member.qapi
> +qapi-schema += enum-int-member.qapi
> +qapi-schema += enum-member-case.qapi
> +qapi-schema += enum-missing-data.qapi
> +qapi-schema += enum-wrong-data.qapi
> +qapi-schema += escape-outside-string.qapi
> +qapi-schema += escape-too-big.qapi
> +qapi-schema += escape-too-short.qapi
> +qapi-schema += event-boxed-empty.qapi
> +qapi-schema += event-case.qapi
> +qapi-schema += event-nest-struct.qapi
> +qapi-schema += flat-union-array-branch.qapi
> +qapi-schema += flat-union-bad-base.qapi
> +qapi-schema += flat-union-bad-discriminator.qapi
> +qapi-schema += flat-union-base-any.qapi
> +qapi-schema += flat-union-base-union.qapi
> +qapi-schema += flat-union-clash-member.qapi
> +qapi-schema += flat-union-empty.qapi
> +qapi-schema += flat-union-incomplete-branch.qapi
> +qapi-schema += flat-union-inline.qapi
> +qapi-schema += flat-union-int-branch.qapi
> +qapi-schema += flat-union-invalid-branch-key.qapi
> +qapi-schema += flat-union-invalid-discriminator.qapi
> +qapi-schema += flat-union-no-base.qapi
> +qapi-schema += flat-union-optional-discriminator.qapi
> +qapi-schema += flat-union-string-discriminator.qapi
> +qapi-schema += funny-char.qapi
> +qapi-schema += ident-with-escape.qapi
> +qapi-schema += include-before-err.qapi
> +qapi-schema += include-cycle.qapi
> +qapi-schema += include-extra-junk.qapi
> +qapi-schema += include-format-err.qapi
> +qapi-schema += include-nested-err.qapi
> +qapi-schema += include-no-file.qapi
> +qapi-schema += include-non-file.qapi
> +qapi-schema += include-relpath.qapi
> +qapi-schema += include-repetition.qapi
> +qapi-schema += include-self-cycle.qapi
> +qapi-schema += include-simple.qapi
> +qapi-schema += indented-expr.qapi
> +qapi-schema += leading-comma-list.qapi
> +qapi-schema += leading-comma-object.qapi
> +qapi-schema += missing-colon.qapi
> +qapi-schema += missing-comma-list.qapi
> +qapi-schema += missing-comma-object.qapi
> +qapi-schema += missing-type.qapi
> +qapi-schema += nested-struct-data.qapi
> +qapi-schema += non-objects.qapi
> +qapi-schema += oob-test.qapi
> +qapi-schema += pragma-doc-required-crap.qapi
> +qapi-schema += pragma-extra-junk.qapi
> +qapi-schema += pragma-name-case-whitelist-crap.qapi
> +qapi-schema += pragma-non-dict.qapi
> +qapi-schema += pragma-returns-whitelist-crap.qapi
> +qapi-schema += qapi-schema-test.qapi
> +qapi-schema += quoted-structural-chars.qapi
> +qapi-schema += redefined-builtin.qapi
> +qapi-schema += redefined-command.qapi
> +qapi-schema += redefined-event.qapi
> +qapi-schema += redefined-type.qapi
> +qapi-schema += reserved-command-q.qapi
> +qapi-schema += reserved-enum-q.qapi
> +qapi-schema += reserved-member-has.qapi
> +qapi-schema += reserved-member-q.qapi
> +qapi-schema += reserved-member-u.qapi
> +qapi-schema += reserved-member-underscore.qapi
> +qapi-schema += reserved-type-kind.qapi
> +qapi-schema += reserved-type-list.qapi
> +qapi-schema += returns-alternate.qapi
> +qapi-schema += returns-array-bad.qapi
> +qapi-schema += returns-dict.qapi
> +qapi-schema += returns-unknown.qapi
> +qapi-schema += returns-whitelist.qapi
> +qapi-schema += struct-base-clash-deep.qapi
> +qapi-schema += struct-base-clash.qapi
> +qapi-schema += struct-data-invalid.qapi
> +qapi-schema += struct-member-invalid.qapi
> +qapi-schema += trailing-comma-list.qapi
> +qapi-schema += trailing-comma-object.qapi
> +qapi-schema += type-bypass-bad-gen.qapi
> +qapi-schema += unclosed-list.qapi
> +qapi-schema += unclosed-object.qapi
> +qapi-schema += unclosed-string.qapi
> +qapi-schema += unicode-str.qapi
> +qapi-schema += union-base-empty.qapi
> +qapi-schema += union-base-no-discriminator.qapi
> +qapi-schema += union-branch-case.qapi
> +qapi-schema += union-clash-branches.qapi
> +qapi-schema += union-empty.qapi
> +qapi-schema += union-invalid-base.qapi
> +qapi-schema += union-optional-branch.qapi
> +qapi-schema += union-unknown.qapi
> +qapi-schema += unknown-escape.qapi
> +qapi-schema += unknown-expr-key.qapi
> 
> 
>  check-qapi-schema-y := $(addprefix tests/qapi-schema/, $(qapi-schema))
> @@ -669,13 +669,13 @@ tests/test-qapi-commands.h tests/test-qapi-commands.c \
>  tests/test-qapi-events.c tests/test-qapi-events.h \
>  tests/test-qapi-introspect.c tests/test-qapi-introspect.h: \
>  tests/test-qapi-gen-timestamp ;
> -tests/test-qapi-gen-timestamp: 
> $(SRC_PATH)/tests/qapi-schema/qapi-schema-test.json $(qapi-py)
> +tests/test-qapi-gen-timestamp: 
> $(SRC_PATH)/tests/qapi-schema/qapi-schema-test.qapi $(qapi-py)
>       $(call quiet-command,$(PYTHON_UTF8) $(SRC_PATH)/scripts/qapi-gen.py \
>               -o tests -p "test-" $<, \
>               "GEN","$(@:%-timestamp=%)")
>       @>$@
> 
> -tests/qapi-schema/doc-good.test.texi: 
> $(SRC_PATH)/tests/qapi-schema/doc-good.json $(qapi-py)
> +tests/qapi-schema/doc-good.test.texi: 
> $(SRC_PATH)/tests/qapi-schema/doc-good.qapi $(qapi-py)
>       $(call quiet-command,$(PYTHON_UTF8) $(SRC_PATH)/scripts/qapi-gen.py \
>               -o tests/qapi-schema -p "doc-good-" $<, \
>               "GEN","$@")
> @@ -926,7 +926,7 @@ check-tests/qemu-iotests-quick.sh: 
> tests/qemu-iotests-quick.sh qemu-img$(EXESUF)
>       $<
> 
>  .PHONY: $(patsubst %, check-%, $(check-qapi-schema-y))
> -$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.json: 
> $(SRC_PATH)/%.json
> +$(patsubst %, check-%, $(check-qapi-schema-y)): check-%.qapi: 
> $(SRC_PATH)/%.qapi
>       $(call quiet-command, PYTHONPATH=$(SRC_PATH)/scripts \
>               $(PYTHON_UTF8) $(SRC_PATH)/tests/qapi-schema/test-qapi.py \
>               $^ >$*.test.out 2>$*.test.err; \
> diff --git a/tests/qapi-schema/alternate-any.err 
> b/tests/qapi-schema/alternate-any.err
> index aaa01547310..bf762f9afe8 100644
> --- a/tests/qapi-schema/alternate-any.err
> +++ b/tests/qapi-schema/alternate-any.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-any.json:2: Alternate 'Alt' member 'one' cannot 
> use type 'any'
> +tests/qapi-schema/alternate-any.qapi:2: Alternate 'Alt' member 'one' cannot 
> use type 'any'
> diff --git a/tests/qapi-schema/alternate-any.json 
> b/tests/qapi-schema/alternate-any.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-any.json
> rename to tests/qapi-schema/alternate-any.qapi
> diff --git a/tests/qapi-schema/alternate-array.err 
> b/tests/qapi-schema/alternate-array.err
> index 7b930c64abf..0e4a14e59d0 100644
> --- a/tests/qapi-schema/alternate-array.err
> +++ b/tests/qapi-schema/alternate-array.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-array.json:5: Member 'two' of alternate 'Alt' 
> cannot be an array
> +tests/qapi-schema/alternate-array.qapi:5: Member 'two' of alternate 'Alt' 
> cannot be an array
> diff --git a/tests/qapi-schema/alternate-array.json 
> b/tests/qapi-schema/alternate-array.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-array.json
> rename to tests/qapi-schema/alternate-array.qapi
> diff --git a/tests/qapi-schema/alternate-base.err 
> b/tests/qapi-schema/alternate-base.err
> index 30d8a343734..9560f452eb3 100644
> --- a/tests/qapi-schema/alternate-base.err
> +++ b/tests/qapi-schema/alternate-base.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-base.json:4: Unknown key 'base' in alternate 
> 'Alt'
> +tests/qapi-schema/alternate-base.qapi:4: Unknown key 'base' in alternate 
> 'Alt'
> diff --git a/tests/qapi-schema/alternate-base.json 
> b/tests/qapi-schema/alternate-base.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-base.json
> rename to tests/qapi-schema/alternate-base.qapi
> diff --git a/tests/qapi-schema/alternate-clash.err 
> b/tests/qapi-schema/alternate-clash.err
> index 604d8495eb0..d5eb85a256c 100644
> --- a/tests/qapi-schema/alternate-clash.err
> +++ b/tests/qapi-schema/alternate-clash.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-clash.json:7: 'a_b' (branch of Alt1) collides 
> with 'a-b' (branch of Alt1)
> +tests/qapi-schema/alternate-clash.qapi:7: 'a_b' (branch of Alt1) collides 
> with 'a-b' (branch of Alt1)
> diff --git a/tests/qapi-schema/alternate-clash.json 
> b/tests/qapi-schema/alternate-clash.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-clash.json
> rename to tests/qapi-schema/alternate-clash.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-bool-string.err 
> b/tests/qapi-schema/alternate-conflict-bool-string.err
> index e52fee76201..800267a2124 100644
> --- a/tests/qapi-schema/alternate-conflict-bool-string.err
> +++ b/tests/qapi-schema/alternate-conflict-bool-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-bool-string.json:2: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-bool-string.qapi:2: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-bool-string.json 
> b/tests/qapi-schema/alternate-conflict-bool-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-bool-string.json
> rename to tests/qapi-schema/alternate-conflict-bool-string.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-dict.err 
> b/tests/qapi-schema/alternate-conflict-dict.err
> index 0f411f4faf5..2aeff136883 100644
> --- a/tests/qapi-schema/alternate-conflict-dict.err
> +++ b/tests/qapi-schema/alternate-conflict-dict.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-dict.json:6: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-dict.qapi:6: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-dict.json 
> b/tests/qapi-schema/alternate-conflict-dict.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-dict.json
> rename to tests/qapi-schema/alternate-conflict-dict.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-enum-bool.err 
> b/tests/qapi-schema/alternate-conflict-enum-bool.err
> index 0dfc00242d8..cf166d6a3d4 100644
> --- a/tests/qapi-schema/alternate-conflict-enum-bool.err
> +++ b/tests/qapi-schema/alternate-conflict-enum-bool.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-enum-bool.json:4: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-enum-bool.qapi:4: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-enum-bool.json 
> b/tests/qapi-schema/alternate-conflict-enum-bool.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-enum-bool.json
> rename to tests/qapi-schema/alternate-conflict-enum-bool.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-enum-int.err 
> b/tests/qapi-schema/alternate-conflict-enum-int.err
> index 2cc8e7b9aa4..04298eae905 100644
> --- a/tests/qapi-schema/alternate-conflict-enum-int.err
> +++ b/tests/qapi-schema/alternate-conflict-enum-int.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-enum-int.json:4: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-enum-int.qapi:4: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-enum-int.json 
> b/tests/qapi-schema/alternate-conflict-enum-int.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-enum-int.json
> rename to tests/qapi-schema/alternate-conflict-enum-int.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-num-string.err 
> b/tests/qapi-schema/alternate-conflict-num-string.err
> index 5ba3827dd12..42a6dbc449f 100644
> --- a/tests/qapi-schema/alternate-conflict-num-string.err
> +++ b/tests/qapi-schema/alternate-conflict-num-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-num-string.json:2: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-num-string.qapi:2: Alternate 'Alt' 
> member 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-num-string.json 
> b/tests/qapi-schema/alternate-conflict-num-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-num-string.json
> rename to tests/qapi-schema/alternate-conflict-num-string.qapi
> diff --git a/tests/qapi-schema/alternate-conflict-string.err 
> b/tests/qapi-schema/alternate-conflict-string.err
> index fe2f188295b..ee70cad527b 100644
> --- a/tests/qapi-schema/alternate-conflict-string.err
> +++ b/tests/qapi-schema/alternate-conflict-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-conflict-string.json:2: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> +tests/qapi-schema/alternate-conflict-string.qapi:2: Alternate 'Alt' member 
> 'two' can't be distinguished from member 'one'
> diff --git a/tests/qapi-schema/alternate-conflict-string.json 
> b/tests/qapi-schema/alternate-conflict-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-conflict-string.json
> rename to tests/qapi-schema/alternate-conflict-string.qapi
> diff --git a/tests/qapi-schema/alternate-empty.err 
> b/tests/qapi-schema/alternate-empty.err
> index bb06c5bfec0..4253cac8af5 100644
> --- a/tests/qapi-schema/alternate-empty.err
> +++ b/tests/qapi-schema/alternate-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-empty.json:2: Alternate 'Alt' should have at 
> least two branches in 'data'
> +tests/qapi-schema/alternate-empty.qapi:2: Alternate 'Alt' should have at 
> least two branches in 'data'
> diff --git a/tests/qapi-schema/alternate-empty.json 
> b/tests/qapi-schema/alternate-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-empty.json
> rename to tests/qapi-schema/alternate-empty.qapi
> diff --git a/tests/qapi-schema/alternate-nested.err 
> b/tests/qapi-schema/alternate-nested.err
> index 4d1187e60ec..ae3aa1a73f0 100644
> --- a/tests/qapi-schema/alternate-nested.err
> +++ b/tests/qapi-schema/alternate-nested.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-nested.json:4: Member 'nested' of alternate 
> 'Alt2' cannot use alternate type 'Alt1'
> +tests/qapi-schema/alternate-nested.qapi:4: Member 'nested' of alternate 
> 'Alt2' cannot use alternate type 'Alt1'
> diff --git a/tests/qapi-schema/alternate-nested.json 
> b/tests/qapi-schema/alternate-nested.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-nested.json
> rename to tests/qapi-schema/alternate-nested.qapi
> diff --git a/tests/qapi-schema/alternate-unknown.err 
> b/tests/qapi-schema/alternate-unknown.err
> index dea45dc7302..706658d4959 100644
> --- a/tests/qapi-schema/alternate-unknown.err
> +++ b/tests/qapi-schema/alternate-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/alternate-unknown.json:2: Member 'unknown' of alternate 
> 'Alt' uses unknown type 'MissingType'
> +tests/qapi-schema/alternate-unknown.qapi:2: Member 'unknown' of alternate 
> 'Alt' uses unknown type 'MissingType'
> diff --git a/tests/qapi-schema/alternate-unknown.json 
> b/tests/qapi-schema/alternate-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/alternate-unknown.json
> rename to tests/qapi-schema/alternate-unknown.qapi
> diff --git a/tests/qapi-schema/args-alternate.err 
> b/tests/qapi-schema/args-alternate.err
> index 3086eae56b0..637d9884867 100644
> --- a/tests/qapi-schema/args-alternate.err
> +++ b/tests/qapi-schema/args-alternate.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-alternate.json:3: 'data' for command 'oops' cannot 
> use alternate type 'Alt'
> +tests/qapi-schema/args-alternate.qapi:3: 'data' for command 'oops' cannot 
> use alternate type 'Alt'
> diff --git a/tests/qapi-schema/args-alternate.json 
> b/tests/qapi-schema/args-alternate.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-alternate.json
> rename to tests/qapi-schema/args-alternate.qapi
> diff --git a/tests/qapi-schema/args-any.err b/tests/qapi-schema/args-any.err
> index bf9b5e0730b..2853bdb41ea 100644
> --- a/tests/qapi-schema/args-any.err
> +++ b/tests/qapi-schema/args-any.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-any.json:2: 'data' for command 'oops' cannot use 
> built-in type 'any'
> +tests/qapi-schema/args-any.qapi:2: 'data' for command 'oops' cannot use 
> built-in type 'any'
> diff --git a/tests/qapi-schema/args-any.json b/tests/qapi-schema/args-any.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-any.json
> rename to tests/qapi-schema/args-any.qapi
> diff --git a/tests/qapi-schema/args-array-empty.err 
> b/tests/qapi-schema/args-array-empty.err
> index cb7ed33b3fb..530d661b649 100644
> --- a/tests/qapi-schema/args-array-empty.err
> +++ b/tests/qapi-schema/args-array-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-array-empty.json:2: Member 'empty' of 'data' for 
> command 'oops': array type must contain single type name
> +tests/qapi-schema/args-array-empty.qapi:2: Member 'empty' of 'data' for 
> command 'oops': array type must contain single type name
> diff --git a/tests/qapi-schema/args-array-empty.json 
> b/tests/qapi-schema/args-array-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-array-empty.json
> rename to tests/qapi-schema/args-array-empty.qapi
> diff --git a/tests/qapi-schema/args-array-unknown.err 
> b/tests/qapi-schema/args-array-unknown.err
> index cd7a0f98d79..6273c088bb3 100644
> --- a/tests/qapi-schema/args-array-unknown.err
> +++ b/tests/qapi-schema/args-array-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-array-unknown.json:2: Member 'array' of 'data' for 
> command 'oops' uses unknown type 'NoSuchType'
> +tests/qapi-schema/args-array-unknown.qapi:2: Member 'array' of 'data' for 
> command 'oops' uses unknown type 'NoSuchType'
> diff --git a/tests/qapi-schema/args-array-unknown.json 
> b/tests/qapi-schema/args-array-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-array-unknown.json
> rename to tests/qapi-schema/args-array-unknown.qapi
> diff --git a/tests/qapi-schema/args-bad-boxed.err 
> b/tests/qapi-schema/args-bad-boxed.err
> index ad0d417321c..b059bcc3076 100644
> --- a/tests/qapi-schema/args-bad-boxed.err
> +++ b/tests/qapi-schema/args-bad-boxed.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-bad-boxed.json:2: 'boxed' of command 'foo' should 
> only use true value
> +tests/qapi-schema/args-bad-boxed.qapi:2: 'boxed' of command 'foo' should 
> only use true value
> diff --git a/tests/qapi-schema/args-bad-boxed.json 
> b/tests/qapi-schema/args-bad-boxed.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-bad-boxed.json
> rename to tests/qapi-schema/args-bad-boxed.qapi
> diff --git a/tests/qapi-schema/args-boxed-anon.err 
> b/tests/qapi-schema/args-boxed-anon.err
> index f24f3452185..fc5f2828c44 100644
> --- a/tests/qapi-schema/args-boxed-anon.err
> +++ b/tests/qapi-schema/args-boxed-anon.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-boxed-anon.json:2: 'data' for command 'foo' should be 
> a type name
> +tests/qapi-schema/args-boxed-anon.qapi:2: 'data' for command 'foo' should be 
> a type name
> diff --git a/tests/qapi-schema/args-boxed-anon.json 
> b/tests/qapi-schema/args-boxed-anon.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-boxed-anon.json
> rename to tests/qapi-schema/args-boxed-anon.qapi
> diff --git a/tests/qapi-schema/args-boxed-empty.err 
> b/tests/qapi-schema/args-boxed-empty.err
> index 039603e85ca..c144d317b7f 100644
> --- a/tests/qapi-schema/args-boxed-empty.err
> +++ b/tests/qapi-schema/args-boxed-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-boxed-empty.json:3: Cannot use 'boxed' with empty type
> +tests/qapi-schema/args-boxed-empty.qapi:3: Cannot use 'boxed' with empty type
> diff --git a/tests/qapi-schema/args-boxed-empty.json 
> b/tests/qapi-schema/args-boxed-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-boxed-empty.json
> rename to tests/qapi-schema/args-boxed-empty.qapi
> diff --git a/tests/qapi-schema/args-boxed-string.err 
> b/tests/qapi-schema/args-boxed-string.err
> index d326b48aefd..48d612261c1 100644
> --- a/tests/qapi-schema/args-boxed-string.err
> +++ b/tests/qapi-schema/args-boxed-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-boxed-string.json:2: 'data' for command 'foo' cannot 
> use built-in type 'str'
> +tests/qapi-schema/args-boxed-string.qapi:2: 'data' for command 'foo' cannot 
> use built-in type 'str'
> diff --git a/tests/qapi-schema/args-boxed-string.json 
> b/tests/qapi-schema/args-boxed-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-boxed-string.json
> rename to tests/qapi-schema/args-boxed-string.qapi
> diff --git a/tests/qapi-schema/args-int.err b/tests/qapi-schema/args-int.err
> index dc1d2504ff8..35b50e18825 100644
> --- a/tests/qapi-schema/args-int.err
> +++ b/tests/qapi-schema/args-int.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-int.json:2: 'data' for command 'oops' cannot use 
> built-in type 'int'
> +tests/qapi-schema/args-int.qapi:2: 'data' for command 'oops' cannot use 
> built-in type 'int'
> diff --git a/tests/qapi-schema/args-int.json b/tests/qapi-schema/args-int.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-int.json
> rename to tests/qapi-schema/args-int.qapi
> diff --git a/tests/qapi-schema/args-invalid.err 
> b/tests/qapi-schema/args-invalid.err
> index fe1e94975b9..5884976eeed 100644
> --- a/tests/qapi-schema/args-invalid.err
> +++ b/tests/qapi-schema/args-invalid.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-invalid.json:1: 'data' for command 'foo' should be a 
> dictionary or type name
> +tests/qapi-schema/args-invalid.qapi:1: 'data' for command 'foo' should be a 
> dictionary or type name
> diff --git a/tests/qapi-schema/args-invalid.json 
> b/tests/qapi-schema/args-invalid.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-invalid.json
> rename to tests/qapi-schema/args-invalid.qapi
> diff --git a/tests/qapi-schema/args-member-array-bad.err 
> b/tests/qapi-schema/args-member-array-bad.err
> index 881b4d954f2..19fb4f4bfb3 100644
> --- a/tests/qapi-schema/args-member-array-bad.err
> +++ b/tests/qapi-schema/args-member-array-bad.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-member-array-bad.json:2: Member 'member' of 'data' 
> for command 'oops': array type must contain single type name
> +tests/qapi-schema/args-member-array-bad.qapi:2: Member 'member' of 'data' 
> for command 'oops': array type must contain single type name
> diff --git a/tests/qapi-schema/args-member-array-bad.json 
> b/tests/qapi-schema/args-member-array-bad.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-member-array-bad.json
> rename to tests/qapi-schema/args-member-array-bad.qapi
> diff --git a/tests/qapi-schema/args-member-case.err 
> b/tests/qapi-schema/args-member-case.err
> index 19c44266015..62294827266 100644
> --- a/tests/qapi-schema/args-member-case.err
> +++ b/tests/qapi-schema/args-member-case.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-member-case.json:2: 'Arg' (parameter of 
> no-way-this-will-get-whitelisted) should not use uppercase
> +tests/qapi-schema/args-member-case.qapi:2: 'Arg' (parameter of 
> no-way-this-will-get-whitelisted) should not use uppercase
> diff --git a/tests/qapi-schema/args-member-case.json 
> b/tests/qapi-schema/args-member-case.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-member-case.json
> rename to tests/qapi-schema/args-member-case.qapi
> diff --git a/tests/qapi-schema/args-member-unknown.err 
> b/tests/qapi-schema/args-member-unknown.err
> index f6f82828ce5..c9e58b2d074 100644
> --- a/tests/qapi-schema/args-member-unknown.err
> +++ b/tests/qapi-schema/args-member-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-member-unknown.json:2: Member 'member' of 'data' for 
> command 'oops' uses unknown type 'NoSuchType'
> +tests/qapi-schema/args-member-unknown.qapi:2: Member 'member' of 'data' for 
> command 'oops' uses unknown type 'NoSuchType'
> diff --git a/tests/qapi-schema/args-member-unknown.json 
> b/tests/qapi-schema/args-member-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-member-unknown.json
> rename to tests/qapi-schema/args-member-unknown.qapi
> diff --git a/tests/qapi-schema/args-name-clash.err 
> b/tests/qapi-schema/args-name-clash.err
> index d953e8d2416..5e9dc79a3dd 100644
> --- a/tests/qapi-schema/args-name-clash.err
> +++ b/tests/qapi-schema/args-name-clash.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-name-clash.json:4: 'a_b' (parameter of oops) collides 
> with 'a-b' (parameter of oops)
> +tests/qapi-schema/args-name-clash.qapi:4: 'a_b' (parameter of oops) collides 
> with 'a-b' (parameter of oops)
> diff --git a/tests/qapi-schema/args-name-clash.json 
> b/tests/qapi-schema/args-name-clash.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-name-clash.json
> rename to tests/qapi-schema/args-name-clash.qapi
> diff --git a/tests/qapi-schema/args-union.err 
> b/tests/qapi-schema/args-union.err
> index f8ad223ddee..8b84f4034e8 100644
> --- a/tests/qapi-schema/args-union.err
> +++ b/tests/qapi-schema/args-union.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-union.json:3: 'data' for command 'oops' cannot use 
> union type 'Uni'
> +tests/qapi-schema/args-union.qapi:3: 'data' for command 'oops' cannot use 
> union type 'Uni'
> diff --git a/tests/qapi-schema/args-union.json 
> b/tests/qapi-schema/args-union.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-union.json
> rename to tests/qapi-schema/args-union.qapi
> diff --git a/tests/qapi-schema/args-unknown.err 
> b/tests/qapi-schema/args-unknown.err
> index 4d91ec869f9..86b4d123566 100644
> --- a/tests/qapi-schema/args-unknown.err
> +++ b/tests/qapi-schema/args-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/args-unknown.json:2: 'data' for command 'oops' uses 
> unknown type 'NoSuchType'
> +tests/qapi-schema/args-unknown.qapi:2: 'data' for command 'oops' uses 
> unknown type 'NoSuchType'
> diff --git a/tests/qapi-schema/args-unknown.json 
> b/tests/qapi-schema/args-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/args-unknown.json
> rename to tests/qapi-schema/args-unknown.qapi
> diff --git a/tests/qapi-schema/bad-base.err b/tests/qapi-schema/bad-base.err
> index 154274bdd3f..2329ecc605e 100644
> --- a/tests/qapi-schema/bad-base.err
> +++ b/tests/qapi-schema/bad-base.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-base.json:3: 'base' for struct 'MyType' cannot use 
> union type 'Union'
> +tests/qapi-schema/bad-base.qapi:3: 'base' for struct 'MyType' cannot use 
> union type 'Union'
> diff --git a/tests/qapi-schema/bad-base.json b/tests/qapi-schema/bad-base.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-base.json
> rename to tests/qapi-schema/bad-base.qapi
> diff --git a/tests/qapi-schema/bad-data.err b/tests/qapi-schema/bad-data.err
> index 8523ac4f46d..7f6c19eaf0d 100644
> --- a/tests/qapi-schema/bad-data.err
> +++ b/tests/qapi-schema/bad-data.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-data.json:2: 'data' for command 'oops' cannot be an 
> array
> +tests/qapi-schema/bad-data.qapi:2: 'data' for command 'oops' cannot be an 
> array
> diff --git a/tests/qapi-schema/bad-data.json b/tests/qapi-schema/bad-data.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-data.json
> rename to tests/qapi-schema/bad-data.qapi
> diff --git a/tests/qapi-schema/bad-ident.err b/tests/qapi-schema/bad-ident.err
> index c4190602b5c..0733e38d4cd 100644
> --- a/tests/qapi-schema/bad-ident.err
> +++ b/tests/qapi-schema/bad-ident.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-ident.json:2: 'struct' does not allow optional name 
> '*oops'
> +tests/qapi-schema/bad-ident.qapi:2: 'struct' does not allow optional name 
> '*oops'
> diff --git a/tests/qapi-schema/bad-ident.json 
> b/tests/qapi-schema/bad-ident.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-ident.json
> rename to tests/qapi-schema/bad-ident.qapi
> diff --git a/tests/qapi-schema/bad-type-bool.err 
> b/tests/qapi-schema/bad-type-bool.err
> index 62fd70baafd..824d0b737e7 100644
> --- a/tests/qapi-schema/bad-type-bool.err
> +++ b/tests/qapi-schema/bad-type-bool.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-type-bool.json:2: 'struct' key must have a string value
> +tests/qapi-schema/bad-type-bool.qapi:2: 'struct' key must have a string value
> diff --git a/tests/qapi-schema/bad-type-bool.json 
> b/tests/qapi-schema/bad-type-bool.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-type-bool.json
> rename to tests/qapi-schema/bad-type-bool.qapi
> diff --git a/tests/qapi-schema/bad-type-dict.err 
> b/tests/qapi-schema/bad-type-dict.err
> index 0b2a2aeac42..fc5302bd9af 100644
> --- a/tests/qapi-schema/bad-type-dict.err
> +++ b/tests/qapi-schema/bad-type-dict.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-type-dict.json:2: 'command' key must have a string 
> value
> +tests/qapi-schema/bad-type-dict.qapi:2: 'command' key must have a string 
> value
> diff --git a/tests/qapi-schema/bad-type-dict.json 
> b/tests/qapi-schema/bad-type-dict.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-type-dict.json
> rename to tests/qapi-schema/bad-type-dict.qapi
> diff --git a/tests/qapi-schema/bad-type-int.err 
> b/tests/qapi-schema/bad-type-int.err
> index da898954046..a6c074644bb 100644
> --- a/tests/qapi-schema/bad-type-int.err
> +++ b/tests/qapi-schema/bad-type-int.err
> @@ -1 +1 @@
> -tests/qapi-schema/bad-type-int.json:3:13: Stray "1"
> +tests/qapi-schema/bad-type-int.qapi:3:13: Stray "1"
> diff --git a/tests/qapi-schema/bad-type-int.json 
> b/tests/qapi-schema/bad-type-int.qapi
> similarity index 100%
> rename from tests/qapi-schema/bad-type-int.json
> rename to tests/qapi-schema/bad-type-int.qapi
> diff --git a/tests/qapi-schema/base-cycle-direct.err 
> b/tests/qapi-schema/base-cycle-direct.err
> index 9c68f6543d3..7b83d041ea4 100644
> --- a/tests/qapi-schema/base-cycle-direct.err
> +++ b/tests/qapi-schema/base-cycle-direct.err
> @@ -1 +1 @@
> -tests/qapi-schema/base-cycle-direct.json:2: Object Loopy contains itself
> +tests/qapi-schema/base-cycle-direct.qapi:2: Object Loopy contains itself
> diff --git a/tests/qapi-schema/base-cycle-direct.json 
> b/tests/qapi-schema/base-cycle-direct.qapi
> similarity index 100%
> rename from tests/qapi-schema/base-cycle-direct.json
> rename to tests/qapi-schema/base-cycle-direct.qapi
> diff --git a/tests/qapi-schema/base-cycle-indirect.err 
> b/tests/qapi-schema/base-cycle-indirect.err
> index fc92fe47f82..585c95aea24 100644
> --- a/tests/qapi-schema/base-cycle-indirect.err
> +++ b/tests/qapi-schema/base-cycle-indirect.err
> @@ -1 +1 @@
> -tests/qapi-schema/base-cycle-indirect.json:2: Object Base1 contains itself
> +tests/qapi-schema/base-cycle-indirect.qapi:2: Object Base1 contains itself
> diff --git a/tests/qapi-schema/base-cycle-indirect.json 
> b/tests/qapi-schema/base-cycle-indirect.qapi
> similarity index 100%
> rename from tests/qapi-schema/base-cycle-indirect.json
> rename to tests/qapi-schema/base-cycle-indirect.qapi
> diff --git a/tests/qapi-schema/command-int.err 
> b/tests/qapi-schema/command-int.err
> index 0f9300679b3..10c53335fa9 100644
> --- a/tests/qapi-schema/command-int.err
> +++ b/tests/qapi-schema/command-int.err
> @@ -1 +1 @@
> -tests/qapi-schema/command-int.json:2: built-in 'int' is already defined
> +tests/qapi-schema/command-int.qapi:2: built-in 'int' is already defined
> diff --git a/tests/qapi-schema/command-int.json 
> b/tests/qapi-schema/command-int.qapi
> similarity index 100%
> rename from tests/qapi-schema/command-int.json
> rename to tests/qapi-schema/command-int.qapi
> diff --git a/tests/qapi-schema/comments.out b/tests/qapi-schema/comments.out
> index 8d2f1ce8a2e..6c0d162bc0a 100644
> --- a/tests/qapi-schema/comments.out
> +++ b/tests/qapi-schema/comments.out
> @@ -1,5 +1,5 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module comments.json
> +module comments.qapi
>  enum Status ['good', 'bad', 'ugly']
> diff --git a/tests/qapi-schema/comments.json b/tests/qapi-schema/comments.qapi
> similarity index 100%
> rename from tests/qapi-schema/comments.json
> rename to tests/qapi-schema/comments.qapi
> diff --git a/tests/qapi-schema/doc-bad-alternate-member.err 
> b/tests/qapi-schema/doc-bad-alternate-member.err
> index 387f7824daa..318d1df8748 100644
> --- a/tests/qapi-schema/doc-bad-alternate-member.err
> +++ b/tests/qapi-schema/doc-bad-alternate-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-bad-alternate-member.json:3: The following documented 
> members are not in the declaration: aa, bb
> +tests/qapi-schema/doc-bad-alternate-member.qapi:3: The following documented 
> members are not in the declaration: aa, bb
> diff --git a/tests/qapi-schema/doc-bad-alternate-member.json 
> b/tests/qapi-schema/doc-bad-alternate-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-bad-alternate-member.json
> rename to tests/qapi-schema/doc-bad-alternate-member.qapi
> diff --git a/tests/qapi-schema/doc-bad-command-arg.err 
> b/tests/qapi-schema/doc-bad-command-arg.err
> index 8075b146ae3..bd236a1f819 100644
> --- a/tests/qapi-schema/doc-bad-command-arg.err
> +++ b/tests/qapi-schema/doc-bad-command-arg.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-bad-command-arg.json:3: The following documented 
> members are not in the declaration: b
> +tests/qapi-schema/doc-bad-command-arg.qapi:3: The following documented 
> members are not in the declaration: b
> diff --git a/tests/qapi-schema/doc-bad-command-arg.json 
> b/tests/qapi-schema/doc-bad-command-arg.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-bad-command-arg.json
> rename to tests/qapi-schema/doc-bad-command-arg.qapi
> diff --git a/tests/qapi-schema/doc-bad-section.out 
> b/tests/qapi-schema/doc-bad-section.out
> index cd287215689..3a8b8d3fe0b 100644
> --- a/tests/qapi-schema/doc-bad-section.out
> +++ b/tests/qapi-schema/doc-bad-section.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module doc-bad-section.json
> +module doc-bad-section.qapi
>  enum Enum ['one', 'two']
>  doc symbol=Enum
>      body=
> diff --git a/tests/qapi-schema/doc-bad-section.json 
> b/tests/qapi-schema/doc-bad-section.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-bad-section.json
> rename to tests/qapi-schema/doc-bad-section.qapi
> diff --git a/tests/qapi-schema/doc-bad-symbol.err 
> b/tests/qapi-schema/doc-bad-symbol.err
> index 8472030c791..5fe61db4e79 100644
> --- a/tests/qapi-schema/doc-bad-symbol.err
> +++ b/tests/qapi-schema/doc-bad-symbol.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-bad-symbol.json:6: Definition of 'foo' follows 
> documentation for 'food'
> +tests/qapi-schema/doc-bad-symbol.qapi:6: Definition of 'foo' follows 
> documentation for 'food'
> diff --git a/tests/qapi-schema/doc-bad-symbol.json 
> b/tests/qapi-schema/doc-bad-symbol.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-bad-symbol.json
> rename to tests/qapi-schema/doc-bad-symbol.qapi
> diff --git a/tests/qapi-schema/doc-bad-union-member.err 
> b/tests/qapi-schema/doc-bad-union-member.err
> index 4b016df7ff7..0bb90004cc9 100644
> --- a/tests/qapi-schema/doc-bad-union-member.err
> +++ b/tests/qapi-schema/doc-bad-union-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-bad-union-member.json:3: The following documented 
> members are not in the declaration: a, b
> +tests/qapi-schema/doc-bad-union-member.qapi:3: The following documented 
> members are not in the declaration: a, b
> diff --git a/tests/qapi-schema/doc-bad-union-member.json 
> b/tests/qapi-schema/doc-bad-union-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-bad-union-member.json
> rename to tests/qapi-schema/doc-bad-union-member.qapi
> diff --git a/tests/qapi-schema/doc-before-include.err 
> b/tests/qapi-schema/doc-before-include.err
> index a649d38a630..a7b903fc1e9 100644
> --- a/tests/qapi-schema/doc-before-include.err
> +++ b/tests/qapi-schema/doc-before-include.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-before-include.json:3: Documentation for 'foo' is not 
> followed by the definition
> +tests/qapi-schema/doc-before-include.qapi:3: Documentation for 'foo' is not 
> followed by the definition
> diff --git a/tests/qapi-schema/doc-before-include.json 
> b/tests/qapi-schema/doc-before-include.qapi
> similarity index 81%
> rename from tests/qapi-schema/doc-before-include.json
> rename to tests/qapi-schema/doc-before-include.qapi
> index 0caa0ae0791..7fae0a67550 100644
> --- a/tests/qapi-schema/doc-before-include.json
> +++ b/tests/qapi-schema/doc-before-include.qapi
> @@ -3,5 +3,5 @@
>  ##
>  # @foo:
>  ##
> -{ 'include': 'empty.json' }
> +{ 'include': 'empty.qapi' }
>  { 'struct': 'foo', 'data': {} }
> diff --git a/tests/qapi-schema/doc-before-pragma.err 
> b/tests/qapi-schema/doc-before-pragma.err
> index c0fb0660d14..2dbc7e00de8 100644
> --- a/tests/qapi-schema/doc-before-pragma.err
> +++ b/tests/qapi-schema/doc-before-pragma.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-before-pragma.json:3: Documentation for 'foo' is not 
> followed by the definition
> +tests/qapi-schema/doc-before-pragma.qapi:3: Documentation for 'foo' is not 
> followed by the definition
> diff --git a/tests/qapi-schema/doc-before-pragma.json 
> b/tests/qapi-schema/doc-before-pragma.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-before-pragma.json
> rename to tests/qapi-schema/doc-before-pragma.qapi
> diff --git a/tests/qapi-schema/doc-duplicated-arg.err 
> b/tests/qapi-schema/doc-duplicated-arg.err
> index 1c3f8e0a542..4929ac53cf3 100644
> --- a/tests/qapi-schema/doc-duplicated-arg.err
> +++ b/tests/qapi-schema/doc-duplicated-arg.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-duplicated-arg.json:6:1: 'a' parameter name duplicated
> +tests/qapi-schema/doc-duplicated-arg.qapi:6:1: 'a' parameter name duplicated
> diff --git a/tests/qapi-schema/doc-duplicated-arg.json 
> b/tests/qapi-schema/doc-duplicated-arg.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-duplicated-arg.json
> rename to tests/qapi-schema/doc-duplicated-arg.qapi
> diff --git a/tests/qapi-schema/doc-duplicated-return.err 
> b/tests/qapi-schema/doc-duplicated-return.err
> index e48039f8e53..92f7b655d4c 100644
> --- a/tests/qapi-schema/doc-duplicated-return.err
> +++ b/tests/qapi-schema/doc-duplicated-return.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-duplicated-return.json:7:1: Duplicated 'Returns' 
> section
> +tests/qapi-schema/doc-duplicated-return.qapi:7:1: Duplicated 'Returns' 
> section
> diff --git a/tests/qapi-schema/doc-duplicated-return.json 
> b/tests/qapi-schema/doc-duplicated-return.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-duplicated-return.json
> rename to tests/qapi-schema/doc-duplicated-return.qapi
> diff --git a/tests/qapi-schema/doc-duplicated-since.err 
> b/tests/qapi-schema/doc-duplicated-since.err
> index 3fb890744a4..2bb0097fb09 100644
> --- a/tests/qapi-schema/doc-duplicated-since.err
> +++ b/tests/qapi-schema/doc-duplicated-since.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-duplicated-since.json:7:1: Duplicated 'Since' section
> +tests/qapi-schema/doc-duplicated-since.qapi:7:1: Duplicated 'Since' section
> diff --git a/tests/qapi-schema/doc-duplicated-since.json 
> b/tests/qapi-schema/doc-duplicated-since.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-duplicated-since.json
> rename to tests/qapi-schema/doc-duplicated-since.qapi
> diff --git a/tests/qapi-schema/doc-empty-arg.err 
> b/tests/qapi-schema/doc-empty-arg.err
> index 2895518fa7f..873eddca052 100644
> --- a/tests/qapi-schema/doc-empty-arg.err
> +++ b/tests/qapi-schema/doc-empty-arg.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-empty-arg.json:5:1: Invalid parameter name
> +tests/qapi-schema/doc-empty-arg.qapi:5:1: Invalid parameter name
> diff --git a/tests/qapi-schema/doc-empty-arg.json 
> b/tests/qapi-schema/doc-empty-arg.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-empty-arg.json
> rename to tests/qapi-schema/doc-empty-arg.qapi
> diff --git a/tests/qapi-schema/doc-empty-section.err 
> b/tests/qapi-schema/doc-empty-section.err
> index b61e4a78860..ed54e31ba5e 100644
> --- a/tests/qapi-schema/doc-empty-section.err
> +++ b/tests/qapi-schema/doc-empty-section.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-empty-section.json:7:1: Empty doc section 'Note'
> +tests/qapi-schema/doc-empty-section.qapi:7:1: Empty doc section 'Note'
> diff --git a/tests/qapi-schema/doc-empty-section.json 
> b/tests/qapi-schema/doc-empty-section.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-empty-section.json
> rename to tests/qapi-schema/doc-empty-section.qapi
> diff --git a/tests/qapi-schema/doc-empty-symbol.err 
> b/tests/qapi-schema/doc-empty-symbol.err
> index 1936ad094f8..ca349b1ec47 100644
> --- a/tests/qapi-schema/doc-empty-symbol.err
> +++ b/tests/qapi-schema/doc-empty-symbol.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-empty-symbol.json:4:1: Invalid name
> +tests/qapi-schema/doc-empty-symbol.qapi:4:1: Invalid name
> diff --git a/tests/qapi-schema/doc-empty-symbol.json 
> b/tests/qapi-schema/doc-empty-symbol.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-empty-symbol.json
> rename to tests/qapi-schema/doc-empty-symbol.qapi
> diff --git a/tests/qapi-schema/doc-good.out b/tests/qapi-schema/doc-good.out
> index 63058b1590a..e5aede089b1 100644
> --- a/tests/qapi-schema/doc-good.out
> +++ b/tests/qapi-schema/doc-good.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module doc-good.json
> +module doc-good.qapi
>  enum Enum ['one', 'two']
>  object Base
>      member base1: Enum optional=False
> diff --git a/tests/qapi-schema/doc-good.json b/tests/qapi-schema/doc-good.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-good.json
> rename to tests/qapi-schema/doc-good.qapi
> diff --git a/tests/qapi-schema/doc-interleaved-section.err 
> b/tests/qapi-schema/doc-interleaved-section.err
> index d373eabc556..f5e347f391b 100644
> --- a/tests/qapi-schema/doc-interleaved-section.err
> +++ b/tests/qapi-schema/doc-interleaved-section.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-interleaved-section.json:15:1: '@foobar:' can't follow 
> 'Note' section
> +tests/qapi-schema/doc-interleaved-section.qapi:15:1: '@foobar:' can't follow 
> 'Note' section
> diff --git a/tests/qapi-schema/doc-interleaved-section.json 
> b/tests/qapi-schema/doc-interleaved-section.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-interleaved-section.json
> rename to tests/qapi-schema/doc-interleaved-section.qapi
> diff --git a/tests/qapi-schema/doc-invalid-end.err 
> b/tests/qapi-schema/doc-invalid-end.err
> index 2bda28cb548..2152663541e 100644
> --- a/tests/qapi-schema/doc-invalid-end.err
> +++ b/tests/qapi-schema/doc-invalid-end.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-invalid-end.json:5:2: Documentation comment must end 
> with '##'
> +tests/qapi-schema/doc-invalid-end.qapi:5:2: Documentation comment must end 
> with '##'
> diff --git a/tests/qapi-schema/doc-invalid-end.json 
> b/tests/qapi-schema/doc-invalid-end.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-invalid-end.json
> rename to tests/qapi-schema/doc-invalid-end.qapi
> diff --git a/tests/qapi-schema/doc-invalid-end2.err 
> b/tests/qapi-schema/doc-invalid-end2.err
> index 6fad9c789e7..077931d8500 100644
> --- a/tests/qapi-schema/doc-invalid-end2.err
> +++ b/tests/qapi-schema/doc-invalid-end2.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-invalid-end2.json:5:1: Junk after '##' at end of 
> documentation comment
> +tests/qapi-schema/doc-invalid-end2.qapi:5:1: Junk after '##' at end of 
> documentation comment
> diff --git a/tests/qapi-schema/doc-invalid-end2.json 
> b/tests/qapi-schema/doc-invalid-end2.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-invalid-end2.json
> rename to tests/qapi-schema/doc-invalid-end2.qapi
> diff --git a/tests/qapi-schema/doc-invalid-return.err 
> b/tests/qapi-schema/doc-invalid-return.err
> index 5aaba33bb42..32eb8db5e53 100644
> --- a/tests/qapi-schema/doc-invalid-return.err
> +++ b/tests/qapi-schema/doc-invalid-return.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-invalid-return.json:3: 'Returns:' is only valid for 
> commands
> +tests/qapi-schema/doc-invalid-return.qapi:3: 'Returns:' is only valid for 
> commands
> diff --git a/tests/qapi-schema/doc-invalid-return.json 
> b/tests/qapi-schema/doc-invalid-return.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-invalid-return.json
> rename to tests/qapi-schema/doc-invalid-return.qapi
> diff --git a/tests/qapi-schema/doc-invalid-section.err 
> b/tests/qapi-schema/doc-invalid-section.err
> index bda93b44fde..810957cfc16 100644
> --- a/tests/qapi-schema/doc-invalid-section.err
> +++ b/tests/qapi-schema/doc-invalid-section.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-invalid-section.json:5:1: '@note:' not allowed in 
> free-form documentation
> +tests/qapi-schema/doc-invalid-section.qapi:5:1: '@note:' not allowed in 
> free-form documentation
> diff --git a/tests/qapi-schema/doc-invalid-section.json 
> b/tests/qapi-schema/doc-invalid-section.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-invalid-section.json
> rename to tests/qapi-schema/doc-invalid-section.qapi
> diff --git a/tests/qapi-schema/doc-invalid-start.err 
> b/tests/qapi-schema/doc-invalid-start.err
> index 149af2bfacd..08dce5feafe 100644
> --- a/tests/qapi-schema/doc-invalid-start.err
> +++ b/tests/qapi-schema/doc-invalid-start.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-invalid-start.json:3:1: Junk after '##' at start of 
> documentation comment
> +tests/qapi-schema/doc-invalid-start.qapi:3:1: Junk after '##' at start of 
> documentation comment
> diff --git a/tests/qapi-schema/doc-invalid-start.json 
> b/tests/qapi-schema/doc-invalid-start.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-invalid-start.json
> rename to tests/qapi-schema/doc-invalid-start.qapi
> diff --git a/tests/qapi-schema/doc-missing-colon.err 
> b/tests/qapi-schema/doc-missing-colon.err
> index 817398b8e42..0052605c972 100644
> --- a/tests/qapi-schema/doc-missing-colon.err
> +++ b/tests/qapi-schema/doc-missing-colon.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-missing-colon.json:4:1: Line should end with :
> +tests/qapi-schema/doc-missing-colon.qapi:4:1: Line should end with :
> diff --git a/tests/qapi-schema/doc-missing-colon.json 
> b/tests/qapi-schema/doc-missing-colon.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-missing-colon.json
> rename to tests/qapi-schema/doc-missing-colon.qapi
> diff --git a/tests/qapi-schema/doc-missing-expr.err 
> b/tests/qapi-schema/doc-missing-expr.err
> index c909e26eca5..d2af40b1c68 100644
> --- a/tests/qapi-schema/doc-missing-expr.err
> +++ b/tests/qapi-schema/doc-missing-expr.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-missing-expr.json:3: Documentation for 'bar' is not 
> followed by the definition
> +tests/qapi-schema/doc-missing-expr.qapi:3: Documentation for 'bar' is not 
> followed by the definition
> diff --git a/tests/qapi-schema/doc-missing-expr.json 
> b/tests/qapi-schema/doc-missing-expr.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-missing-expr.json
> rename to tests/qapi-schema/doc-missing-expr.qapi
> diff --git a/tests/qapi-schema/doc-missing-space.err 
> b/tests/qapi-schema/doc-missing-space.err
> index d6b46ffd778..756122f26b1 100644
> --- a/tests/qapi-schema/doc-missing-space.err
> +++ b/tests/qapi-schema/doc-missing-space.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-missing-space.json:5:1: Missing space after #
> +tests/qapi-schema/doc-missing-space.qapi:5:1: Missing space after #
> diff --git a/tests/qapi-schema/doc-missing-space.json 
> b/tests/qapi-schema/doc-missing-space.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-missing-space.json
> rename to tests/qapi-schema/doc-missing-space.qapi
> diff --git a/tests/qapi-schema/doc-missing.err 
> b/tests/qapi-schema/doc-missing.err
> index 7f2f326b30a..2b44937a201 100644
> --- a/tests/qapi-schema/doc-missing.err
> +++ b/tests/qapi-schema/doc-missing.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-missing.json:5: Expression missing documentation 
> comment
> +tests/qapi-schema/doc-missing.qapi:5: Expression missing documentation 
> comment
> diff --git a/tests/qapi-schema/doc-missing.json 
> b/tests/qapi-schema/doc-missing.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-missing.json
> rename to tests/qapi-schema/doc-missing.qapi
> diff --git a/tests/qapi-schema/doc-no-symbol.err 
> b/tests/qapi-schema/doc-no-symbol.err
> index 75f032a9421..212c1241d7d 100644
> --- a/tests/qapi-schema/doc-no-symbol.err
> +++ b/tests/qapi-schema/doc-no-symbol.err
> @@ -1 +1 @@
> -tests/qapi-schema/doc-no-symbol.json:3: Expression documentation required
> +tests/qapi-schema/doc-no-symbol.qapi:3: Expression documentation required
> diff --git a/tests/qapi-schema/doc-no-symbol.json 
> b/tests/qapi-schema/doc-no-symbol.qapi
> similarity index 100%
> rename from tests/qapi-schema/doc-no-symbol.json
> rename to tests/qapi-schema/doc-no-symbol.qapi
> diff --git a/tests/qapi-schema/double-data.err 
> b/tests/qapi-schema/double-data.err
> index cc765c4ff23..afa6b9ec681 100644
> --- a/tests/qapi-schema/double-data.err
> +++ b/tests/qapi-schema/double-data.err
> @@ -1 +1 @@
> -tests/qapi-schema/double-data.json:2:41: Duplicate key "data"
> +tests/qapi-schema/double-data.qapi:2:41: Duplicate key "data"
> diff --git a/tests/qapi-schema/double-data.json 
> b/tests/qapi-schema/double-data.qapi
> similarity index 100%
> rename from tests/qapi-schema/double-data.json
> rename to tests/qapi-schema/double-data.qapi
> diff --git a/tests/qapi-schema/double-type.err 
> b/tests/qapi-schema/double-type.err
> index f9613c6d6b5..95df26ced22 100644
> --- a/tests/qapi-schema/double-type.err
> +++ b/tests/qapi-schema/double-type.err
> @@ -1 +1 @@
> -tests/qapi-schema/double-type.json:2: Unknown key 'command' in struct 'bar'
> +tests/qapi-schema/double-type.qapi:2: Unknown key 'command' in struct 'bar'
> diff --git a/tests/qapi-schema/double-type.json 
> b/tests/qapi-schema/double-type.qapi
> similarity index 100%
> rename from tests/qapi-schema/double-type.json
> rename to tests/qapi-schema/double-type.qapi
> diff --git a/tests/qapi-schema/duplicate-key.err 
> b/tests/qapi-schema/duplicate-key.err
> index 6d02f835388..2bf72416f56 100644
> --- a/tests/qapi-schema/duplicate-key.err
> +++ b/tests/qapi-schema/duplicate-key.err
> @@ -1 +1 @@
> -tests/qapi-schema/duplicate-key.json:3:10: Duplicate key "key"
> +tests/qapi-schema/duplicate-key.qapi:3:10: Duplicate key "key"
> diff --git a/tests/qapi-schema/duplicate-key.json 
> b/tests/qapi-schema/duplicate-key.qapi
> similarity index 100%
> rename from tests/qapi-schema/duplicate-key.json
> rename to tests/qapi-schema/duplicate-key.qapi
> diff --git a/tests/qapi-schema/empty.json b/tests/qapi-schema/empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/empty.json
> rename to tests/qapi-schema/empty.qapi
> diff --git a/tests/qapi-schema/enum-bad-name.err 
> b/tests/qapi-schema/enum-bad-name.err
> index 9c3c1002b78..485965dfb99 100644
> --- a/tests/qapi-schema/enum-bad-name.err
> +++ b/tests/qapi-schema/enum-bad-name.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-bad-name.json:2: Member of enum 'MyEnum' uses invalid 
> name 'not^possible'
> +tests/qapi-schema/enum-bad-name.qapi:2: Member of enum 'MyEnum' uses invalid 
> name 'not^possible'
> diff --git a/tests/qapi-schema/enum-bad-name.json 
> b/tests/qapi-schema/enum-bad-name.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-bad-name.json
> rename to tests/qapi-schema/enum-bad-name.qapi
> diff --git a/tests/qapi-schema/enum-bad-prefix.err 
> b/tests/qapi-schema/enum-bad-prefix.err
> index 399f5f7af5c..10ef1ca6192 100644
> --- a/tests/qapi-schema/enum-bad-prefix.err
> +++ b/tests/qapi-schema/enum-bad-prefix.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-bad-prefix.json:2: Enum 'MyEnum' requires a string 
> for 'prefix'
> +tests/qapi-schema/enum-bad-prefix.qapi:2: Enum 'MyEnum' requires a string 
> for 'prefix'
> diff --git a/tests/qapi-schema/enum-bad-prefix.json 
> b/tests/qapi-schema/enum-bad-prefix.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-bad-prefix.json
> rename to tests/qapi-schema/enum-bad-prefix.qapi
> diff --git a/tests/qapi-schema/enum-clash-member.err 
> b/tests/qapi-schema/enum-clash-member.err
> index 5403c785079..3a1b6d95e23 100644
> --- a/tests/qapi-schema/enum-clash-member.err
> +++ b/tests/qapi-schema/enum-clash-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-clash-member.json:2: 'one_two' (member of MyEnum) 
> collides with 'one-two' (member of MyEnum)
> +tests/qapi-schema/enum-clash-member.qapi:2: 'one_two' (member of MyEnum) 
> collides with 'one-two' (member of MyEnum)
> diff --git a/tests/qapi-schema/enum-clash-member.json 
> b/tests/qapi-schema/enum-clash-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-clash-member.json
> rename to tests/qapi-schema/enum-clash-member.qapi
> diff --git a/tests/qapi-schema/enum-dict-member.err 
> b/tests/qapi-schema/enum-dict-member.err
> index 8ca146ea592..e758d0f4de1 100644
> --- a/tests/qapi-schema/enum-dict-member.err
> +++ b/tests/qapi-schema/enum-dict-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-dict-member.json:2: Member of enum 'MyEnum' requires 
> a string name
> +tests/qapi-schema/enum-dict-member.qapi:2: Member of enum 'MyEnum' requires 
> a string name
> diff --git a/tests/qapi-schema/enum-dict-member.json 
> b/tests/qapi-schema/enum-dict-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-dict-member.json
> rename to tests/qapi-schema/enum-dict-member.qapi
> diff --git a/tests/qapi-schema/enum-int-member.err 
> b/tests/qapi-schema/enum-int-member.err
> index 071c5213d8e..25d0034786f 100644
> --- a/tests/qapi-schema/enum-int-member.err
> +++ b/tests/qapi-schema/enum-int-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-int-member.json:3:31: Stray "1"
> +tests/qapi-schema/enum-int-member.qapi:3:31: Stray "1"
> diff --git a/tests/qapi-schema/enum-int-member.json 
> b/tests/qapi-schema/enum-int-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-int-member.json
> rename to tests/qapi-schema/enum-int-member.qapi
> diff --git a/tests/qapi-schema/enum-member-case.err 
> b/tests/qapi-schema/enum-member-case.err
> index 3c67a3a067e..73bb81caf72 100644
> --- a/tests/qapi-schema/enum-member-case.err
> +++ b/tests/qapi-schema/enum-member-case.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-member-case.json:4: 'Value' (member of 
> NoWayThisWillGetWhitelisted) should not use uppercase
> +tests/qapi-schema/enum-member-case.qapi:4: 'Value' (member of 
> NoWayThisWillGetWhitelisted) should not use uppercase
> diff --git a/tests/qapi-schema/enum-member-case.json 
> b/tests/qapi-schema/enum-member-case.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-member-case.json
> rename to tests/qapi-schema/enum-member-case.qapi
> diff --git a/tests/qapi-schema/enum-missing-data.err 
> b/tests/qapi-schema/enum-missing-data.err
> index ba4873ae69a..ed90e42f0c8 100644
> --- a/tests/qapi-schema/enum-missing-data.err
> +++ b/tests/qapi-schema/enum-missing-data.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-missing-data.json:2: Key 'data' is missing from enum 
> 'MyEnum'
> +tests/qapi-schema/enum-missing-data.qapi:2: Key 'data' is missing from enum 
> 'MyEnum'
> diff --git a/tests/qapi-schema/enum-missing-data.json 
> b/tests/qapi-schema/enum-missing-data.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-missing-data.json
> rename to tests/qapi-schema/enum-missing-data.qapi
> diff --git a/tests/qapi-schema/enum-wrong-data.err 
> b/tests/qapi-schema/enum-wrong-data.err
> index 11b43471cf3..8cb349fc51a 100644
> --- a/tests/qapi-schema/enum-wrong-data.err
> +++ b/tests/qapi-schema/enum-wrong-data.err
> @@ -1 +1 @@
> -tests/qapi-schema/enum-wrong-data.json:2: Enum 'MyEnum' requires an array 
> for 'data'
> +tests/qapi-schema/enum-wrong-data.qapi:2: Enum 'MyEnum' requires an array 
> for 'data'
> diff --git a/tests/qapi-schema/enum-wrong-data.json 
> b/tests/qapi-schema/enum-wrong-data.qapi
> similarity index 100%
> rename from tests/qapi-schema/enum-wrong-data.json
> rename to tests/qapi-schema/enum-wrong-data.qapi
> diff --git a/tests/qapi-schema/escape-outside-string.err 
> b/tests/qapi-schema/escape-outside-string.err
> index b9b8837fd2e..3e3bcd76f6e 100644
> --- a/tests/qapi-schema/escape-outside-string.err
> +++ b/tests/qapi-schema/escape-outside-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/escape-outside-string.json:3:27: Stray "\"
> +tests/qapi-schema/escape-outside-string.qapi:3:27: Stray "\"
> diff --git a/tests/qapi-schema/escape-outside-string.json 
> b/tests/qapi-schema/escape-outside-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/escape-outside-string.json
> rename to tests/qapi-schema/escape-outside-string.qapi
> diff --git a/tests/qapi-schema/escape-too-big.err 
> b/tests/qapi-schema/escape-too-big.err
> index d9aeb5dc38a..9ade8c10de1 100644
> --- a/tests/qapi-schema/escape-too-big.err
> +++ b/tests/qapi-schema/escape-too-big.err
> @@ -1 +1 @@
> -tests/qapi-schema/escape-too-big.json:3:14: For now, \u escape only supports 
> non-zero values up to \u007f
> +tests/qapi-schema/escape-too-big.qapi:3:14: For now, \u escape only supports 
> non-zero values up to \u007f
> diff --git a/tests/qapi-schema/escape-too-big.json 
> b/tests/qapi-schema/escape-too-big.qapi
> similarity index 100%
> rename from tests/qapi-schema/escape-too-big.json
> rename to tests/qapi-schema/escape-too-big.qapi
> diff --git a/tests/qapi-schema/escape-too-short.err 
> b/tests/qapi-schema/escape-too-short.err
> index 934de598ee2..7c36fe81a54 100644
> --- a/tests/qapi-schema/escape-too-short.err
> +++ b/tests/qapi-schema/escape-too-short.err
> @@ -1 +1 @@
> -tests/qapi-schema/escape-too-short.json:3:14: \u escape needs 4 hex digits
> +tests/qapi-schema/escape-too-short.qapi:3:14: \u escape needs 4 hex digits
> diff --git a/tests/qapi-schema/escape-too-short.json 
> b/tests/qapi-schema/escape-too-short.qapi
> similarity index 100%
> rename from tests/qapi-schema/escape-too-short.json
> rename to tests/qapi-schema/escape-too-short.qapi
> diff --git a/tests/qapi-schema/event-boxed-empty.err 
> b/tests/qapi-schema/event-boxed-empty.err
> index 68ec6f2d2bd..5ae28cd9319 100644
> --- a/tests/qapi-schema/event-boxed-empty.err
> +++ b/tests/qapi-schema/event-boxed-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/event-boxed-empty.json:2: Use of 'boxed' requires 'data'
> +tests/qapi-schema/event-boxed-empty.qapi:2: Use of 'boxed' requires 'data'
> diff --git a/tests/qapi-schema/event-boxed-empty.json 
> b/tests/qapi-schema/event-boxed-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/event-boxed-empty.json
> rename to tests/qapi-schema/event-boxed-empty.qapi
> diff --git a/tests/qapi-schema/event-case.out 
> b/tests/qapi-schema/event-case.out
> index 88c0964917a..6fbaefb98c3 100644
> --- a/tests/qapi-schema/event-case.out
> +++ b/tests/qapi-schema/event-case.out
> @@ -1,6 +1,6 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module event-case.json
> +module event-case.qapi
>  event oops None
>     boxed=False
> diff --git a/tests/qapi-schema/event-case.json 
> b/tests/qapi-schema/event-case.qapi
> similarity index 100%
> rename from tests/qapi-schema/event-case.json
> rename to tests/qapi-schema/event-case.qapi
> diff --git a/tests/qapi-schema/event-nest-struct.err 
> b/tests/qapi-schema/event-nest-struct.err
> index 5a42701b8f2..7d94765c06f 100644
> --- a/tests/qapi-schema/event-nest-struct.err
> +++ b/tests/qapi-schema/event-nest-struct.err
> @@ -1 +1 @@
> -tests/qapi-schema/event-nest-struct.json:1: Member 'a' of 'data' for event 
> 'EVENT_A' should be a type name
> +tests/qapi-schema/event-nest-struct.qapi:1: Member 'a' of 'data' for event 
> 'EVENT_A' should be a type name
> diff --git a/tests/qapi-schema/event-nest-struct.json 
> b/tests/qapi-schema/event-nest-struct.qapi
> similarity index 100%
> rename from tests/qapi-schema/event-nest-struct.json
> rename to tests/qapi-schema/event-nest-struct.qapi
> diff --git a/tests/qapi-schema/flat-union-array-branch.err 
> b/tests/qapi-schema/flat-union-array-branch.err
> index 8ea91eadb2d..cd767b524c3 100644
> --- a/tests/qapi-schema/flat-union-array-branch.err
> +++ b/tests/qapi-schema/flat-union-array-branch.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-array-branch.json:8: Member 'value1' of union 
> 'TestUnion' cannot be an array
> +tests/qapi-schema/flat-union-array-branch.qapi:8: Member 'value1' of union 
> 'TestUnion' cannot be an array
> diff --git a/tests/qapi-schema/flat-union-array-branch.json 
> b/tests/qapi-schema/flat-union-array-branch.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-array-branch.json
> rename to tests/qapi-schema/flat-union-array-branch.qapi
> diff --git a/tests/qapi-schema/flat-union-bad-base.err 
> b/tests/qapi-schema/flat-union-bad-base.err
> index bee24a217ae..e09b8b3cdf0 100644
> --- a/tests/qapi-schema/flat-union-bad-base.err
> +++ b/tests/qapi-schema/flat-union-bad-base.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-bad-base.json:8: 'string' (member of TestTypeA) 
> collides with 'string' (base of TestUnion)
> +tests/qapi-schema/flat-union-bad-base.qapi:8: 'string' (member of TestTypeA) 
> collides with 'string' (base of TestUnion)
> diff --git a/tests/qapi-schema/flat-union-bad-base.json 
> b/tests/qapi-schema/flat-union-bad-base.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-bad-base.json
> rename to tests/qapi-schema/flat-union-bad-base.qapi
> diff --git a/tests/qapi-schema/flat-union-bad-discriminator.err 
> b/tests/qapi-schema/flat-union-bad-discriminator.err
> index c38cc8e4dfd..c2817008c5f 100644
> --- a/tests/qapi-schema/flat-union-bad-discriminator.err
> +++ b/tests/qapi-schema/flat-union-bad-discriminator.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-bad-discriminator.json:11: Discriminator of 
> flat union 'TestUnion' requires a string name
> +tests/qapi-schema/flat-union-bad-discriminator.qapi:11: Discriminator of 
> flat union 'TestUnion' requires a string name
> diff --git a/tests/qapi-schema/flat-union-bad-discriminator.json 
> b/tests/qapi-schema/flat-union-bad-discriminator.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-bad-discriminator.json
> rename to tests/qapi-schema/flat-union-bad-discriminator.qapi
> diff --git a/tests/qapi-schema/flat-union-base-any.err 
> b/tests/qapi-schema/flat-union-base-any.err
> index 646f1c9cd11..feed578a29b 100644
> --- a/tests/qapi-schema/flat-union-base-any.err
> +++ b/tests/qapi-schema/flat-union-base-any.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-base-any.json:8: 'base' for union 'TestUnion' 
> cannot use built-in type 'any'
> +tests/qapi-schema/flat-union-base-any.qapi:8: 'base' for union 'TestUnion' 
> cannot use built-in type 'any'
> diff --git a/tests/qapi-schema/flat-union-base-any.json 
> b/tests/qapi-schema/flat-union-base-any.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-base-any.json
> rename to tests/qapi-schema/flat-union-base-any.qapi
> diff --git a/tests/qapi-schema/flat-union-base-union.err 
> b/tests/qapi-schema/flat-union-base-union.err
> index f138395e456..9fca152d2c8 100644
> --- a/tests/qapi-schema/flat-union-base-union.err
> +++ b/tests/qapi-schema/flat-union-base-union.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-base-union.json:14: 'base' for union 
> 'TestUnion' cannot use union type 'UnionBase'
> +tests/qapi-schema/flat-union-base-union.qapi:14: 'base' for union 
> 'TestUnion' cannot use union type 'UnionBase'
> diff --git a/tests/qapi-schema/flat-union-base-union.json 
> b/tests/qapi-schema/flat-union-base-union.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-base-union.json
> rename to tests/qapi-schema/flat-union-base-union.qapi
> diff --git a/tests/qapi-schema/flat-union-clash-member.err 
> b/tests/qapi-schema/flat-union-clash-member.err
> index 2adf69755ab..bd8dc62222e 100644
> --- a/tests/qapi-schema/flat-union-clash-member.err
> +++ b/tests/qapi-schema/flat-union-clash-member.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-clash-member.json:11: 'name' (member of 
> Branch1) collides with 'name' (member of Base)
> +tests/qapi-schema/flat-union-clash-member.qapi:11: 'name' (member of 
> Branch1) collides with 'name' (member of Base)
> diff --git a/tests/qapi-schema/flat-union-clash-member.json 
> b/tests/qapi-schema/flat-union-clash-member.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-clash-member.json
> rename to tests/qapi-schema/flat-union-clash-member.qapi
> diff --git a/tests/qapi-schema/flat-union-empty.err 
> b/tests/qapi-schema/flat-union-empty.err
> index 15754f54eb9..b39f0761e94 100644
> --- a/tests/qapi-schema/flat-union-empty.err
> +++ b/tests/qapi-schema/flat-union-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-empty.json:4: Union 'Union' cannot have empty 
> 'data'
> +tests/qapi-schema/flat-union-empty.qapi:4: Union 'Union' cannot have empty 
> 'data'
> diff --git a/tests/qapi-schema/flat-union-empty.json 
> b/tests/qapi-schema/flat-union-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-empty.json
> rename to tests/qapi-schema/flat-union-empty.qapi
> diff --git a/tests/qapi-schema/flat-union-incomplete-branch.err 
> b/tests/qapi-schema/flat-union-incomplete-branch.err
> index e826bf07893..9fe7d2f43cd 100644
> --- a/tests/qapi-schema/flat-union-incomplete-branch.err
> +++ b/tests/qapi-schema/flat-union-incomplete-branch.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-incomplete-branch.json:6: Union 'TestUnion' 
> data missing 'value2' branch
> +tests/qapi-schema/flat-union-incomplete-branch.qapi:6: Union 'TestUnion' 
> data missing 'value2' branch
> diff --git a/tests/qapi-schema/flat-union-incomplete-branch.json 
> b/tests/qapi-schema/flat-union-incomplete-branch.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-incomplete-branch.json
> rename to tests/qapi-schema/flat-union-incomplete-branch.qapi
> diff --git a/tests/qapi-schema/flat-union-inline.err 
> b/tests/qapi-schema/flat-union-inline.err
> index 2333358d28b..d16e6cd87c5 100644
> --- a/tests/qapi-schema/flat-union-inline.err
> +++ b/tests/qapi-schema/flat-union-inline.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-inline.json:7: Member 'value1' of union 
> 'TestUnion' should be a type name
> +tests/qapi-schema/flat-union-inline.qapi:7: Member 'value1' of union 
> 'TestUnion' should be a type name
> diff --git a/tests/qapi-schema/flat-union-inline.json 
> b/tests/qapi-schema/flat-union-inline.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-inline.json
> rename to tests/qapi-schema/flat-union-inline.qapi
> diff --git a/tests/qapi-schema/flat-union-int-branch.err 
> b/tests/qapi-schema/flat-union-int-branch.err
> index faf01573b79..8baf223a691 100644
> --- a/tests/qapi-schema/flat-union-int-branch.err
> +++ b/tests/qapi-schema/flat-union-int-branch.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-int-branch.json:8: Member 'value1' of union 
> 'TestUnion' cannot use built-in type 'int'
> +tests/qapi-schema/flat-union-int-branch.qapi:8: Member 'value1' of union 
> 'TestUnion' cannot use built-in type 'int'
> diff --git a/tests/qapi-schema/flat-union-int-branch.json 
> b/tests/qapi-schema/flat-union-int-branch.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-int-branch.json
> rename to tests/qapi-schema/flat-union-int-branch.qapi
> diff --git a/tests/qapi-schema/flat-union-invalid-branch-key.err 
> b/tests/qapi-schema/flat-union-invalid-branch-key.err
> index ccf72d2dfe2..3dfc7521810 100644
> --- a/tests/qapi-schema/flat-union-invalid-branch-key.err
> +++ b/tests/qapi-schema/flat-union-invalid-branch-key.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-invalid-branch-key.json:13: Discriminator value 
> 'value_wrong' is not found in enum 'TestEnum'
> +tests/qapi-schema/flat-union-invalid-branch-key.qapi:13: Discriminator value 
> 'value_wrong' is not found in enum 'TestEnum'
> diff --git a/tests/qapi-schema/flat-union-invalid-branch-key.json 
> b/tests/qapi-schema/flat-union-invalid-branch-key.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-invalid-branch-key.json
> rename to tests/qapi-schema/flat-union-invalid-branch-key.qapi
> diff --git a/tests/qapi-schema/flat-union-invalid-discriminator.err 
> b/tests/qapi-schema/flat-union-invalid-discriminator.err
> index 5f4055614ea..5490a3fa942 100644
> --- a/tests/qapi-schema/flat-union-invalid-discriminator.err
> +++ b/tests/qapi-schema/flat-union-invalid-discriminator.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-invalid-discriminator.json:13: Discriminator 
> 'enum_wrong' is not a member of base struct 'TestBase'
> +tests/qapi-schema/flat-union-invalid-discriminator.qapi:13: Discriminator 
> 'enum_wrong' is not a member of base struct 'TestBase'
> diff --git a/tests/qapi-schema/flat-union-invalid-discriminator.json 
> b/tests/qapi-schema/flat-union-invalid-discriminator.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-invalid-discriminator.json
> rename to tests/qapi-schema/flat-union-invalid-discriminator.qapi
> diff --git a/tests/qapi-schema/flat-union-no-base.err 
> b/tests/qapi-schema/flat-union-no-base.err
> index 841c93b5544..b0de89317d8 100644
> --- a/tests/qapi-schema/flat-union-no-base.err
> +++ b/tests/qapi-schema/flat-union-no-base.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-no-base.json:9: Flat union 'TestUnion' must 
> have a base
> +tests/qapi-schema/flat-union-no-base.qapi:9: Flat union 'TestUnion' must 
> have a base
> diff --git a/tests/qapi-schema/flat-union-no-base.json 
> b/tests/qapi-schema/flat-union-no-base.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-no-base.json
> rename to tests/qapi-schema/flat-union-no-base.qapi
> diff --git a/tests/qapi-schema/flat-union-optional-discriminator.err 
> b/tests/qapi-schema/flat-union-optional-discriminator.err
> index aaabedb3bd6..d905598456b 100644
> --- a/tests/qapi-schema/flat-union-optional-discriminator.err
> +++ b/tests/qapi-schema/flat-union-optional-discriminator.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-optional-discriminator.json:6: Discriminator of 
> flat union 'MyUnion' does not allow optional name '*switch'
> +tests/qapi-schema/flat-union-optional-discriminator.qapi:6: Discriminator of 
> flat union 'MyUnion' does not allow optional name '*switch'
> diff --git a/tests/qapi-schema/flat-union-optional-discriminator.json 
> b/tests/qapi-schema/flat-union-optional-discriminator.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-optional-discriminator.json
> rename to tests/qapi-schema/flat-union-optional-discriminator.qapi
> diff --git a/tests/qapi-schema/flat-union-string-discriminator.err 
> b/tests/qapi-schema/flat-union-string-discriminator.err
> index 200016bd5c5..d8ce54a09f0 100644
> --- a/tests/qapi-schema/flat-union-string-discriminator.err
> +++ b/tests/qapi-schema/flat-union-string-discriminator.err
> @@ -1 +1 @@
> -tests/qapi-schema/flat-union-string-discriminator.json:13: Discriminator 
> 'kind' must be of enumeration type
> +tests/qapi-schema/flat-union-string-discriminator.qapi:13: Discriminator 
> 'kind' must be of enumeration type
> diff --git a/tests/qapi-schema/flat-union-string-discriminator.json 
> b/tests/qapi-schema/flat-union-string-discriminator.qapi
> similarity index 100%
> rename from tests/qapi-schema/flat-union-string-discriminator.json
> rename to tests/qapi-schema/flat-union-string-discriminator.qapi
> diff --git a/tests/qapi-schema/funny-char.err 
> b/tests/qapi-schema/funny-char.err
> index bfc890cd9f2..990b44e1468 100644
> --- a/tests/qapi-schema/funny-char.err
> +++ b/tests/qapi-schema/funny-char.err
> @@ -1 +1 @@
> -tests/qapi-schema/funny-char.json:2:36: Stray ";"
> +tests/qapi-schema/funny-char.qapi:2:36: Stray ";"
> diff --git a/tests/qapi-schema/funny-char.json 
> b/tests/qapi-schema/funny-char.qapi
> similarity index 100%
> rename from tests/qapi-schema/funny-char.json
> rename to tests/qapi-schema/funny-char.qapi
> diff --git a/tests/qapi-schema/ident-with-escape.out 
> b/tests/qapi-schema/ident-with-escape.out
> index 82213aa51dd..3bb7c434340 100644
> --- a/tests/qapi-schema/ident-with-escape.out
> +++ b/tests/qapi-schema/ident-with-escape.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module ident-with-escape.json
> +module ident-with-escape.qapi
>  object q_obj_fooA-arg
>      member bar1: str optional=False
>  command fooA q_obj_fooA-arg -> None
> diff --git a/tests/qapi-schema/ident-with-escape.json 
> b/tests/qapi-schema/ident-with-escape.qapi
> similarity index 100%
> rename from tests/qapi-schema/ident-with-escape.json
> rename to tests/qapi-schema/ident-with-escape.qapi
> diff --git a/tests/qapi-schema/include-before-err.err 
> b/tests/qapi-schema/include-before-err.err
> index 55652751e10..d9f0cf5db10 100644
> --- a/tests/qapi-schema/include-before-err.err
> +++ b/tests/qapi-schema/include-before-err.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-before-err.json:2:13: Expected ":"
> +tests/qapi-schema/include-before-err.qapi:2:13: Expected ":"
> diff --git a/tests/qapi-schema/include-before-err.json 
> b/tests/qapi-schema/include-before-err.json
> deleted file mode 100644
> index afb6cb63c47..00000000000
> --- a/tests/qapi-schema/include-before-err.json
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -{ 'include': 'include-simple-sub.json' }
> -{ 'command' 'missing-colon' }
> diff --git a/tests/qapi-schema/include-before-err.qapi 
> b/tests/qapi-schema/include-before-err.qapi
> new file mode 100644
> index 00000000000..f1e5fa6d417
> --- /dev/null
> +++ b/tests/qapi-schema/include-before-err.qapi
> @@ -0,0 +1,2 @@
> +{ 'include': 'include-simple-sub.qapi' }
> +{ 'command' 'missing-colon' }
> diff --git a/tests/qapi-schema/include-cycle-b.json 
> b/tests/qapi-schema/include-cycle-b.json
> deleted file mode 100644
> index 4fa985dcd59..00000000000
> --- a/tests/qapi-schema/include-cycle-b.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-cycle-c.json' }
> diff --git a/tests/qapi-schema/include-cycle-b.qapi 
> b/tests/qapi-schema/include-cycle-b.qapi
> new file mode 100644
> index 00000000000..ef8aa0d8bdb
> --- /dev/null
> +++ b/tests/qapi-schema/include-cycle-b.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-cycle-c.qapi' }
> diff --git a/tests/qapi-schema/include-cycle-c.json 
> b/tests/qapi-schema/include-cycle-c.json
> deleted file mode 100644
> index d12b5924a36..00000000000
> --- a/tests/qapi-schema/include-cycle-c.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-cycle.json' }
> diff --git a/tests/qapi-schema/include-cycle-c.qapi 
> b/tests/qapi-schema/include-cycle-c.qapi
> new file mode 100644
> index 00000000000..dfa26a712ab
> --- /dev/null
> +++ b/tests/qapi-schema/include-cycle-c.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-cycle.qapi' }
> diff --git a/tests/qapi-schema/include-cycle.err 
> b/tests/qapi-schema/include-cycle.err
> index bdcd07dce25..99a1ea20fc8 100644
> --- a/tests/qapi-schema/include-cycle.err
> +++ b/tests/qapi-schema/include-cycle.err
> @@ -1,3 +1,3 @@
> -In file included from tests/qapi-schema/include-cycle.json:1:
> -In file included from tests/qapi-schema/include-cycle-b.json:1:
> -tests/qapi-schema/include-cycle-c.json:1: Inclusion loop for 
> include-cycle.json
> +In file included from tests/qapi-schema/include-cycle.qapi:1:
> +In file included from tests/qapi-schema/include-cycle-b.qapi:1:
> +tests/qapi-schema/include-cycle-c.qapi:1: Inclusion loop for 
> include-cycle.qapi
> diff --git a/tests/qapi-schema/include-cycle.json 
> b/tests/qapi-schema/include-cycle.json
> deleted file mode 100644
> index 6fcf1ebaac8..00000000000
> --- a/tests/qapi-schema/include-cycle.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-cycle-b.json' }
> diff --git a/tests/qapi-schema/include-cycle.qapi 
> b/tests/qapi-schema/include-cycle.qapi
> new file mode 100644
> index 00000000000..9feca30e6de
> --- /dev/null
> +++ b/tests/qapi-schema/include-cycle.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-cycle-b.qapi' }
> diff --git a/tests/qapi-schema/include-extra-junk.err 
> b/tests/qapi-schema/include-extra-junk.err
> index e6ef2a3720d..4a98d794483 100644
> --- a/tests/qapi-schema/include-extra-junk.err
> +++ b/tests/qapi-schema/include-extra-junk.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-extra-junk.json:3: Invalid 'include' directive
> +tests/qapi-schema/include-extra-junk.qapi:3: Invalid 'include' directive
> diff --git a/tests/qapi-schema/include-extra-junk.json 
> b/tests/qapi-schema/include-extra-junk.json
> deleted file mode 100644
> index 25fe85078de..00000000000
> --- a/tests/qapi-schema/include-extra-junk.json
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -# 'include' must be the sole member
> -
> -{ 'include': 'comments.json', 'junk': true }
> diff --git a/tests/qapi-schema/include-extra-junk.qapi 
> b/tests/qapi-schema/include-extra-junk.qapi
> new file mode 100644
> index 00000000000..609f9d5449f
> --- /dev/null
> +++ b/tests/qapi-schema/include-extra-junk.qapi
> @@ -0,0 +1,3 @@
> +# 'include' must be the sole member
> +
> +{ 'include': 'comments.qapi', 'junk': true }
> diff --git a/tests/qapi-schema/include-format-err.err 
> b/tests/qapi-schema/include-format-err.err
> index 721ff4eccc0..1143089323b 100644
> --- a/tests/qapi-schema/include-format-err.err
> +++ b/tests/qapi-schema/include-format-err.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-format-err.json:1: Invalid 'include' directive
> +tests/qapi-schema/include-format-err.qapi:1: Invalid 'include' directive
> diff --git a/tests/qapi-schema/include-format-err.json 
> b/tests/qapi-schema/include-format-err.json
> deleted file mode 100644
> index 44980f026f8..00000000000
> --- a/tests/qapi-schema/include-format-err.json
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -{ 'include': 'include-simple-sub.json',
> -  'foo': 'bar' }
> diff --git a/tests/qapi-schema/include-format-err.qapi 
> b/tests/qapi-schema/include-format-err.qapi
> new file mode 100644
> index 00000000000..f17f16e6dc3
> --- /dev/null
> +++ b/tests/qapi-schema/include-format-err.qapi
> @@ -0,0 +1,2 @@
> +{ 'include': 'include-simple-sub.qapi',
> +  'foo': 'bar' }
> diff --git a/tests/qapi-schema/include-nested-err.err 
> b/tests/qapi-schema/include-nested-err.err
> index 1b7b22706be..9a13aa8a802 100644
> --- a/tests/qapi-schema/include-nested-err.err
> +++ b/tests/qapi-schema/include-nested-err.err
> @@ -1,2 +1,2 @@
> -In file included from tests/qapi-schema/include-nested-err.json:1:
> -tests/qapi-schema/missing-colon.json:1:10: Expected ":"
> +In file included from tests/qapi-schema/include-nested-err.qapi:1:
> +tests/qapi-schema/missing-colon.qapi:1:10: Expected ":"
> diff --git a/tests/qapi-schema/include-nested-err.json 
> b/tests/qapi-schema/include-nested-err.json
> deleted file mode 100644
> index 5631e56ea0d..00000000000
> --- a/tests/qapi-schema/include-nested-err.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'missing-colon.json' }
> diff --git a/tests/qapi-schema/include-nested-err.qapi 
> b/tests/qapi-schema/include-nested-err.qapi
> new file mode 100644
> index 00000000000..34b249824fb
> --- /dev/null
> +++ b/tests/qapi-schema/include-nested-err.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'missing-colon.qapi' }
> diff --git a/tests/qapi-schema/include-no-file.err 
> b/tests/qapi-schema/include-no-file.err
> index e42bcf4bc1a..770db16793c 100644
> --- a/tests/qapi-schema/include-no-file.err
> +++ b/tests/qapi-schema/include-no-file.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-no-file.json:1: No such file or directory: 
> tests/qapi-schema/include-no-file-sub.json
> +tests/qapi-schema/include-no-file.qapi:1: No such file or directory: 
> tests/qapi-schema/include-no-file-sub.qapi
> diff --git a/tests/qapi-schema/include-no-file.json 
> b/tests/qapi-schema/include-no-file.json
> deleted file mode 100644
> index 9249ebd50c2..00000000000
> --- a/tests/qapi-schema/include-no-file.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-no-file-sub.json' }
> diff --git a/tests/qapi-schema/include-no-file.qapi 
> b/tests/qapi-schema/include-no-file.qapi
> new file mode 100644
> index 00000000000..2f0d0633eb5
> --- /dev/null
> +++ b/tests/qapi-schema/include-no-file.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-no-file-sub.qapi' }
> diff --git a/tests/qapi-schema/include-non-file.err 
> b/tests/qapi-schema/include-non-file.err
> index faae1eacf1a..5f60d553727 100644
> --- a/tests/qapi-schema/include-non-file.err
> +++ b/tests/qapi-schema/include-non-file.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-non-file.json:1: Value of 'include' must be a 
> string
> +tests/qapi-schema/include-non-file.qapi:1: Value of 'include' must be a 
> string
> diff --git a/tests/qapi-schema/include-non-file.json 
> b/tests/qapi-schema/include-non-file.qapi
> similarity index 100%
> rename from tests/qapi-schema/include-non-file.json
> rename to tests/qapi-schema/include-non-file.qapi
> diff --git a/tests/qapi-schema/include-relpath-sub.json 
> b/tests/qapi-schema/include-relpath-sub.qapi
> similarity index 100%
> rename from tests/qapi-schema/include-relpath-sub.json
> rename to tests/qapi-schema/include-relpath-sub.qapi
> diff --git a/tests/qapi-schema/include-relpath.json 
> b/tests/qapi-schema/include-relpath.json
> deleted file mode 100644
> index 05018f39083..00000000000
> --- a/tests/qapi-schema/include-relpath.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include/relpath.json' }
> diff --git a/tests/qapi-schema/include-relpath.out 
> b/tests/qapi-schema/include-relpath.out
> index ebbabd7a186..67828f2cebd 100644
> --- a/tests/qapi-schema/include-relpath.out
> +++ b/tests/qapi-schema/include-relpath.out
> @@ -1,9 +1,9 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module include-relpath.json
> -include include/relpath.json
> -module include/relpath.json
> -include include-relpath-sub.json
> -module include-relpath-sub.json
> +module include-relpath.qapi
> +include include/relpath.qapi
> +module include/relpath.qapi
> +include include-relpath-sub.qapi
> +module include-relpath-sub.qapi
>  enum Status ['good', 'bad', 'ugly']
> diff --git a/tests/qapi-schema/include-relpath.qapi 
> b/tests/qapi-schema/include-relpath.qapi
> new file mode 100644
> index 00000000000..f4e5205084f
> --- /dev/null
> +++ b/tests/qapi-schema/include-relpath.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include/relpath.qapi' }
> diff --git a/tests/qapi-schema/include-repetition-sub.json 
> b/tests/qapi-schema/include-repetition-sub.json
> deleted file mode 100644
> index 6bfffdfd556..00000000000
> --- a/tests/qapi-schema/include-repetition-sub.json
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -{ 'include': 'comments.json' }
> -{ 'include': 'comments.json' }
> diff --git a/tests/qapi-schema/include-repetition-sub.qapi 
> b/tests/qapi-schema/include-repetition-sub.qapi
> new file mode 100644
> index 00000000000..92bcc7fab47
> --- /dev/null
> +++ b/tests/qapi-schema/include-repetition-sub.qapi
> @@ -0,0 +1,2 @@
> +{ 'include': 'comments.qapi' }
> +{ 'include': 'comments.qapi' }
> diff --git a/tests/qapi-schema/include-repetition.json 
> b/tests/qapi-schema/include-repetition.json
> deleted file mode 100644
> index ec329dde586..00000000000
> --- a/tests/qapi-schema/include-repetition.json
> +++ /dev/null
> @@ -1,3 +0,0 @@
> -{ 'include': 'comments.json' }
> -{ 'include': 'include-repetition-sub.json' }
> -{ 'include': 'comments.json' }
> diff --git a/tests/qapi-schema/include-repetition.out 
> b/tests/qapi-schema/include-repetition.out
> index 7235e055bc1..6c4c8aec5d8 100644
> --- a/tests/qapi-schema/include-repetition.out
> +++ b/tests/qapi-schema/include-repetition.out
> @@ -1,14 +1,14 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module include-repetition.json
> -include comments.json
> -module comments.json
> +module include-repetition.qapi
> +include comments.qapi
> +module comments.qapi
>  enum Status ['good', 'bad', 'ugly']
> -module include-repetition.json
> -include include-repetition-sub.json
> -module include-repetition-sub.json
> -include comments.json
> -include comments.json
> -module include-repetition.json
> -include comments.json
> +module include-repetition.qapi
> +include include-repetition-sub.qapi
> +module include-repetition-sub.qapi
> +include comments.qapi
> +include comments.qapi
> +module include-repetition.qapi
> +include comments.qapi
> diff --git a/tests/qapi-schema/include-repetition.qapi 
> b/tests/qapi-schema/include-repetition.qapi
> new file mode 100644
> index 00000000000..7d0dd95c233
> --- /dev/null
> +++ b/tests/qapi-schema/include-repetition.qapi
> @@ -0,0 +1,3 @@
> +{ 'include': 'comments.qapi' }
> +{ 'include': 'include-repetition-sub.qapi' }
> +{ 'include': 'comments.qapi' }
> diff --git a/tests/qapi-schema/include-self-cycle.err 
> b/tests/qapi-schema/include-self-cycle.err
> index 981742ae5f5..7c0f7711777 100644
> --- a/tests/qapi-schema/include-self-cycle.err
> +++ b/tests/qapi-schema/include-self-cycle.err
> @@ -1 +1 @@
> -tests/qapi-schema/include-self-cycle.json:1: Inclusion loop for 
> include-self-cycle.json
> +tests/qapi-schema/include-self-cycle.qapi:1: Inclusion loop for 
> include-self-cycle.qapi
> diff --git a/tests/qapi-schema/include-self-cycle.json 
> b/tests/qapi-schema/include-self-cycle.json
> deleted file mode 100644
> index 55fb1b596fa..00000000000
> --- a/tests/qapi-schema/include-self-cycle.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-self-cycle.json' }
> diff --git a/tests/qapi-schema/include-self-cycle.qapi 
> b/tests/qapi-schema/include-self-cycle.qapi
> new file mode 100644
> index 00000000000..8517ba9e202
> --- /dev/null
> +++ b/tests/qapi-schema/include-self-cycle.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-self-cycle.qapi' }
> diff --git a/tests/qapi-schema/include-simple-sub.json 
> b/tests/qapi-schema/include-simple-sub.qapi
> similarity index 100%
> rename from tests/qapi-schema/include-simple-sub.json
> rename to tests/qapi-schema/include-simple-sub.qapi
> diff --git a/tests/qapi-schema/include-simple.json 
> b/tests/qapi-schema/include-simple.json
> deleted file mode 100644
> index 1dd391a5925..00000000000
> --- a/tests/qapi-schema/include-simple.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': 'include-simple-sub.json' }
> diff --git a/tests/qapi-schema/include-simple.out 
> b/tests/qapi-schema/include-simple.out
> index 006f723eebc..3ec2d051c33 100644
> --- a/tests/qapi-schema/include-simple.out
> +++ b/tests/qapi-schema/include-simple.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module include-simple.json
> -include include-simple-sub.json
> -module include-simple-sub.json
> +module include-simple.qapi
> +include include-simple-sub.qapi
> +module include-simple-sub.qapi
>  enum Status ['good', 'bad', 'ugly']
> diff --git a/tests/qapi-schema/include-simple.qapi 
> b/tests/qapi-schema/include-simple.qapi
> new file mode 100644
> index 00000000000..312aa7ed7f3
> --- /dev/null
> +++ b/tests/qapi-schema/include-simple.qapi
> @@ -0,0 +1 @@
> +{ 'include': 'include-simple-sub.qapi' }
> diff --git a/tests/qapi-schema/include/relpath.json 
> b/tests/qapi-schema/include/relpath.json
> deleted file mode 100644
> index 45dee247048..00000000000
> --- a/tests/qapi-schema/include/relpath.json
> +++ /dev/null
> @@ -1 +0,0 @@
> -{ 'include': '../include-relpath-sub.json' }
> diff --git a/tests/qapi-schema/include/relpath.qapi 
> b/tests/qapi-schema/include/relpath.qapi
> new file mode 100644
> index 00000000000..081be90ef70
> --- /dev/null
> +++ b/tests/qapi-schema/include/relpath.qapi
> @@ -0,0 +1 @@
> +{ 'include': '../include-relpath-sub.qapi' }
> diff --git a/tests/qapi-schema/indented-expr.out 
> b/tests/qapi-schema/indented-expr.out
> index 862678f8f4c..8c59290610d 100644
> --- a/tests/qapi-schema/indented-expr.out
> +++ b/tests/qapi-schema/indented-expr.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module indented-expr.json
> +module indented-expr.qapi
>  command eins None -> None
>     gen=True success_response=True boxed=False oob=False
>  command zwei None -> None
> diff --git a/tests/qapi-schema/indented-expr.json 
> b/tests/qapi-schema/indented-expr.qapi
> similarity index 100%
> rename from tests/qapi-schema/indented-expr.json
> rename to tests/qapi-schema/indented-expr.qapi
> diff --git a/tests/qapi-schema/leading-comma-list.err 
> b/tests/qapi-schema/leading-comma-list.err
> index f5c870bb9c4..0c8eb27cb5d 100644
> --- a/tests/qapi-schema/leading-comma-list.err
> +++ b/tests/qapi-schema/leading-comma-list.err
> @@ -1 +1 @@
> -tests/qapi-schema/leading-comma-list.json:2:13: Expected "{", "[", "]", 
> string, boolean or "null"
> +tests/qapi-schema/leading-comma-list.qapi:2:13: Expected "{", "[", "]", 
> string, boolean or "null"
> diff --git a/tests/qapi-schema/leading-comma-list.json 
> b/tests/qapi-schema/leading-comma-list.qapi
> similarity index 100%
> rename from tests/qapi-schema/leading-comma-list.json
> rename to tests/qapi-schema/leading-comma-list.qapi
> diff --git a/tests/qapi-schema/leading-comma-object.err 
> b/tests/qapi-schema/leading-comma-object.err
> index f767b95544e..ca86113ddd7 100644
> --- a/tests/qapi-schema/leading-comma-object.err
> +++ b/tests/qapi-schema/leading-comma-object.err
> @@ -1 +1 @@
> -tests/qapi-schema/leading-comma-object.json:1:3: Expected string or "}"
> +tests/qapi-schema/leading-comma-object.qapi:1:3: Expected string or "}"
> diff --git a/tests/qapi-schema/leading-comma-object.json 
> b/tests/qapi-schema/leading-comma-object.qapi
> similarity index 100%
> rename from tests/qapi-schema/leading-comma-object.json
> rename to tests/qapi-schema/leading-comma-object.qapi
> diff --git a/tests/qapi-schema/missing-colon.err 
> b/tests/qapi-schema/missing-colon.err
> index d9d66b377af..0b72b631c4e 100644
> --- a/tests/qapi-schema/missing-colon.err
> +++ b/tests/qapi-schema/missing-colon.err
> @@ -1 +1 @@
> -tests/qapi-schema/missing-colon.json:1:10: Expected ":"
> +tests/qapi-schema/missing-colon.qapi:1:10: Expected ":"
> diff --git a/tests/qapi-schema/missing-colon.json 
> b/tests/qapi-schema/missing-colon.qapi
> similarity index 100%
> rename from tests/qapi-schema/missing-colon.json
> rename to tests/qapi-schema/missing-colon.qapi
> diff --git a/tests/qapi-schema/missing-comma-list.err 
> b/tests/qapi-schema/missing-comma-list.err
> index e73d2770d63..786cd6a95a6 100644
> --- a/tests/qapi-schema/missing-comma-list.err
> +++ b/tests/qapi-schema/missing-comma-list.err
> @@ -1 +1 @@
> -tests/qapi-schema/missing-comma-list.json:2:20: Expected "," or "]"
> +tests/qapi-schema/missing-comma-list.qapi:2:20: Expected "," or "]"
> diff --git a/tests/qapi-schema/missing-comma-list.json 
> b/tests/qapi-schema/missing-comma-list.qapi
> similarity index 100%
> rename from tests/qapi-schema/missing-comma-list.json
> rename to tests/qapi-schema/missing-comma-list.qapi
> diff --git a/tests/qapi-schema/missing-comma-object.err 
> b/tests/qapi-schema/missing-comma-object.err
> index 52b3a8a1ec8..60bf1d014eb 100644
> --- a/tests/qapi-schema/missing-comma-object.err
> +++ b/tests/qapi-schema/missing-comma-object.err
> @@ -1 +1 @@
> -tests/qapi-schema/missing-comma-object.json:2:3: Expected "," or "}"
> +tests/qapi-schema/missing-comma-object.qapi:2:3: Expected "," or "}"
> diff --git a/tests/qapi-schema/missing-comma-object.json 
> b/tests/qapi-schema/missing-comma-object.qapi
> similarity index 100%
> rename from tests/qapi-schema/missing-comma-object.json
> rename to tests/qapi-schema/missing-comma-object.qapi
> diff --git a/tests/qapi-schema/missing-type.err 
> b/tests/qapi-schema/missing-type.err
> index b3e7b14e420..b8cb5d116c4 100644
> --- a/tests/qapi-schema/missing-type.err
> +++ b/tests/qapi-schema/missing-type.err
> @@ -1 +1 @@
> -tests/qapi-schema/missing-type.json:2: Expression is missing metatype
> +tests/qapi-schema/missing-type.qapi:2: Expression is missing metatype
> diff --git a/tests/qapi-schema/missing-type.json 
> b/tests/qapi-schema/missing-type.qapi
> similarity index 100%
> rename from tests/qapi-schema/missing-type.json
> rename to tests/qapi-schema/missing-type.qapi
> diff --git a/tests/qapi-schema/nested-struct-data.err 
> b/tests/qapi-schema/nested-struct-data.err
> index da767bade23..6783e25ecf1 100644
> --- a/tests/qapi-schema/nested-struct-data.err
> +++ b/tests/qapi-schema/nested-struct-data.err
> @@ -1 +1 @@
> -tests/qapi-schema/nested-struct-data.json:2: Member 'a' of 'data' for 
> command 'foo' should be a type name
> +tests/qapi-schema/nested-struct-data.qapi:2: Member 'a' of 'data' for 
> command 'foo' should be a type name
> diff --git a/tests/qapi-schema/nested-struct-data.json 
> b/tests/qapi-schema/nested-struct-data.qapi
> similarity index 100%
> rename from tests/qapi-schema/nested-struct-data.json
> rename to tests/qapi-schema/nested-struct-data.qapi
> diff --git a/tests/qapi-schema/non-objects.err 
> b/tests/qapi-schema/non-objects.err
> index 334f0c91aea..3749ddf5159 100644
> --- a/tests/qapi-schema/non-objects.err
> +++ b/tests/qapi-schema/non-objects.err
> @@ -1 +1 @@
> -tests/qapi-schema/non-objects.json:1:1: Expected "{"
> +tests/qapi-schema/non-objects.qapi:1:1: Expected "{"
> diff --git a/tests/qapi-schema/non-objects.json 
> b/tests/qapi-schema/non-objects.qapi
> similarity index 100%
> rename from tests/qapi-schema/non-objects.json
> rename to tests/qapi-schema/non-objects.qapi
> diff --git a/tests/qapi-schema/oob-test.err b/tests/qapi-schema/oob-test.err
> index 35b60f74800..04ecc0921fb 100644
> --- a/tests/qapi-schema/oob-test.err
> +++ b/tests/qapi-schema/oob-test.err
> @@ -1 +1 @@
> -tests/qapi-schema/oob-test.json:2: 'allow-oob' of command 'oob-command-1' 
> should only use true value
> +tests/qapi-schema/oob-test.qapi:2: 'allow-oob' of command 'oob-command-1' 
> should only use true value
> diff --git a/tests/qapi-schema/oob-test.json b/tests/qapi-schema/oob-test.qapi
> similarity index 100%
> rename from tests/qapi-schema/oob-test.json
> rename to tests/qapi-schema/oob-test.qapi
> diff --git a/tests/qapi-schema/pragma-doc-required-crap.err 
> b/tests/qapi-schema/pragma-doc-required-crap.err
> index 39cd56cd483..08ed951aaf8 100644
> --- a/tests/qapi-schema/pragma-doc-required-crap.err
> +++ b/tests/qapi-schema/pragma-doc-required-crap.err
> @@ -1 +1 @@
> -tests/qapi-schema/pragma-doc-required-crap.json:3: Pragma 'doc-required' 
> must be boolean
> +tests/qapi-schema/pragma-doc-required-crap.qapi:3: Pragma 'doc-required' 
> must be boolean
> diff --git a/tests/qapi-schema/pragma-doc-required-crap.json 
> b/tests/qapi-schema/pragma-doc-required-crap.qapi
> similarity index 100%
> rename from tests/qapi-schema/pragma-doc-required-crap.json
> rename to tests/qapi-schema/pragma-doc-required-crap.qapi
> diff --git a/tests/qapi-schema/pragma-extra-junk.err 
> b/tests/qapi-schema/pragma-extra-junk.err
> index 4481688dbf0..20a8ddc06fa 100644
> --- a/tests/qapi-schema/pragma-extra-junk.err
> +++ b/tests/qapi-schema/pragma-extra-junk.err
> @@ -1 +1 @@
> -tests/qapi-schema/pragma-extra-junk.json:3: Invalid 'pragma' directive
> +tests/qapi-schema/pragma-extra-junk.qapi:3: Invalid 'pragma' directive
> diff --git a/tests/qapi-schema/pragma-extra-junk.json 
> b/tests/qapi-schema/pragma-extra-junk.qapi
> similarity index 100%
> rename from tests/qapi-schema/pragma-extra-junk.json
> rename to tests/qapi-schema/pragma-extra-junk.qapi
> diff --git a/tests/qapi-schema/pragma-name-case-whitelist-crap.err 
> b/tests/qapi-schema/pragma-name-case-whitelist-crap.err
> index f83b97e075a..6f377553683 100644
> --- a/tests/qapi-schema/pragma-name-case-whitelist-crap.err
> +++ b/tests/qapi-schema/pragma-name-case-whitelist-crap.err
> @@ -1 +1 @@
> -tests/qapi-schema/pragma-name-case-whitelist-crap.json:3: Pragma 
> name-case-whitelist must be a list of strings
> +tests/qapi-schema/pragma-name-case-whitelist-crap.qapi:3: Pragma 
> name-case-whitelist must be a list of strings
> diff --git a/tests/qapi-schema/pragma-name-case-whitelist-crap.json 
> b/tests/qapi-schema/pragma-name-case-whitelist-crap.qapi
> similarity index 100%
> rename from tests/qapi-schema/pragma-name-case-whitelist-crap.json
> rename to tests/qapi-schema/pragma-name-case-whitelist-crap.qapi
> diff --git a/tests/qapi-schema/pragma-non-dict.err 
> b/tests/qapi-schema/pragma-non-dict.err
> index 75bc335aea4..d8a31c2ecd1 100644
> --- a/tests/qapi-schema/pragma-non-dict.err
> +++ b/tests/qapi-schema/pragma-non-dict.err
> @@ -1 +1 @@
> -tests/qapi-schema/pragma-non-dict.json:3: Value of 'pragma' must be a 
> dictionary
> +tests/qapi-schema/pragma-non-dict.qapi:3: Value of 'pragma' must be a 
> dictionary
> diff --git a/tests/qapi-schema/pragma-non-dict.json 
> b/tests/qapi-schema/pragma-non-dict.qapi
> similarity index 100%
> rename from tests/qapi-schema/pragma-non-dict.json
> rename to tests/qapi-schema/pragma-non-dict.qapi
> diff --git a/tests/qapi-schema/pragma-returns-whitelist-crap.err 
> b/tests/qapi-schema/pragma-returns-whitelist-crap.err
> index 5d770216749..12926a6d949 100644
> --- a/tests/qapi-schema/pragma-returns-whitelist-crap.err
> +++ b/tests/qapi-schema/pragma-returns-whitelist-crap.err
> @@ -1 +1 @@
> -tests/qapi-schema/pragma-returns-whitelist-crap.json:3: Pragma 
> returns-whitelist must be a list of strings
> +tests/qapi-schema/pragma-returns-whitelist-crap.qapi:3: Pragma 
> returns-whitelist must be a list of strings
> diff --git a/tests/qapi-schema/pragma-returns-whitelist-crap.json 
> b/tests/qapi-schema/pragma-returns-whitelist-crap.qapi
> similarity index 100%
> rename from tests/qapi-schema/pragma-returns-whitelist-crap.json
> rename to tests/qapi-schema/pragma-returns-whitelist-crap.qapi
> diff --git a/tests/qapi-schema/qapi-schema-test.out 
> b/tests/qapi-schema/qapi-schema-test.out
> index 467577d770b..672bcda08a6 100644
> --- a/tests/qapi-schema/qapi-schema-test.out
> +++ b/tests/qapi-schema/qapi-schema-test.out
> @@ -1,7 +1,7 @@
>  object q_empty
>  enum QType ['none', 'qnull', 'qnum', 'qstring', 'qdict', 'qlist', 'qbool']
>      prefix QTYPE
> -module qapi-schema-test.json
> +module qapi-schema-test.qapi
>  object TestStruct
>      member integer: int optional=False
>      member boolean: bool optional=False
> diff --git a/tests/qapi-schema/qapi-schema-test.json 
> b/tests/qapi-schema/qapi-schema-test.qapi
> similarity index 100%
> rename from tests/qapi-schema/qapi-schema-test.json
> rename to tests/qapi-schema/qapi-schema-test.qapi
> diff --git a/tests/qapi-schema/quoted-structural-chars.err 
> b/tests/qapi-schema/quoted-structural-chars.err
> index 9b183841ddd..33c160b6eb9 100644
> --- a/tests/qapi-schema/quoted-structural-chars.err
> +++ b/tests/qapi-schema/quoted-structural-chars.err
> @@ -1 +1 @@
> -tests/qapi-schema/quoted-structural-chars.json:1:1: Expected "{"
> +tests/qapi-schema/quoted-structural-chars.qapi:1:1: Expected "{"
> diff --git a/tests/qapi-schema/quoted-structural-chars.json 
> b/tests/qapi-schema/quoted-structural-chars.qapi
> similarity index 100%
> rename from tests/qapi-schema/quoted-structural-chars.json
> rename to tests/qapi-schema/quoted-structural-chars.qapi
> diff --git a/tests/qapi-schema/redefined-builtin.err 
> b/tests/qapi-schema/redefined-builtin.err
> index b2757225c4e..45d5eb0b6bf 100644
> --- a/tests/qapi-schema/redefined-builtin.err
> +++ b/tests/qapi-schema/redefined-builtin.err
> @@ -1 +1 @@
> -tests/qapi-schema/redefined-builtin.json:2: built-in 'size' is already 
> defined
> +tests/qapi-schema/redefined-builtin.qapi:2: built-in 'size' is already 
> defined
> diff --git a/tests/qapi-schema/redefined-builtin.json 
> b/tests/qapi-schema/redefined-builtin.qapi
> similarity index 100%
> rename from tests/qapi-schema/redefined-builtin.json
> rename to tests/qapi-schema/redefined-builtin.qapi
> diff --git a/tests/qapi-schema/redefined-command.err 
> b/tests/qapi-schema/redefined-command.err
> index 82ae256e639..e18fa60ee27 100644
> --- a/tests/qapi-schema/redefined-command.err
> +++ b/tests/qapi-schema/redefined-command.err
> @@ -1 +1 @@
> -tests/qapi-schema/redefined-command.json:3: command 'foo' is already defined
> +tests/qapi-schema/redefined-command.qapi:3: command 'foo' is already defined
> diff --git a/tests/qapi-schema/redefined-command.json 
> b/tests/qapi-schema/redefined-command.qapi
> similarity index 100%
> rename from tests/qapi-schema/redefined-command.json
> rename to tests/qapi-schema/redefined-command.qapi
> diff --git a/tests/qapi-schema/redefined-event.err 
> b/tests/qapi-schema/redefined-event.err
> index 35429cb4818..843cb650d91 100644
> --- a/tests/qapi-schema/redefined-event.err
> +++ b/tests/qapi-schema/redefined-event.err
> @@ -1 +1 @@
> -tests/qapi-schema/redefined-event.json:3: event 'EVENT_A' is already defined
> +tests/qapi-schema/redefined-event.qapi:3: event 'EVENT_A' is already defined
> diff --git a/tests/qapi-schema/redefined-event.json 
> b/tests/qapi-schema/redefined-event.qapi
> similarity index 100%
> rename from tests/qapi-schema/redefined-event.json
> rename to tests/qapi-schema/redefined-event.qapi
> diff --git a/tests/qapi-schema/redefined-type.err 
> b/tests/qapi-schema/redefined-type.err
> index 06ea78c4781..67d273c1221 100644
> --- a/tests/qapi-schema/redefined-type.err
> +++ b/tests/qapi-schema/redefined-type.err
> @@ -1 +1 @@
> -tests/qapi-schema/redefined-type.json:3: struct 'foo' is already defined
> +tests/qapi-schema/redefined-type.qapi:3: struct 'foo' is already defined
> diff --git a/tests/qapi-schema/redefined-type.json 
> b/tests/qapi-schema/redefined-type.qapi
> similarity index 100%
> rename from tests/qapi-schema/redefined-type.json
> rename to tests/qapi-schema/redefined-type.qapi
> diff --git a/tests/qapi-schema/reserved-command-q.err 
> b/tests/qapi-schema/reserved-command-q.err
> index f939e044eba..91dd7ed8f08 100644
> --- a/tests/qapi-schema/reserved-command-q.err
> +++ b/tests/qapi-schema/reserved-command-q.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-command-q.json:5: 'command' uses invalid name 
> 'q-unix'
> +tests/qapi-schema/reserved-command-q.qapi:5: 'command' uses invalid name 
> 'q-unix'
> diff --git a/tests/qapi-schema/reserved-command-q.json 
> b/tests/qapi-schema/reserved-command-q.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-command-q.json
> rename to tests/qapi-schema/reserved-command-q.qapi
> diff --git a/tests/qapi-schema/reserved-enum-q.err 
> b/tests/qapi-schema/reserved-enum-q.err
> index e1c3480ee22..034c9bd6cfe 100644
> --- a/tests/qapi-schema/reserved-enum-q.err
> +++ b/tests/qapi-schema/reserved-enum-q.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-enum-q.json:4: Member of enum 'Foo' uses invalid 
> name 'q-Unix'
> +tests/qapi-schema/reserved-enum-q.qapi:4: Member of enum 'Foo' uses invalid 
> name 'q-Unix'
> diff --git a/tests/qapi-schema/reserved-enum-q.json 
> b/tests/qapi-schema/reserved-enum-q.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-enum-q.json
> rename to tests/qapi-schema/reserved-enum-q.qapi
> diff --git a/tests/qapi-schema/reserved-member-has.err 
> b/tests/qapi-schema/reserved-member-has.err
> index e7557714461..33630aa5689 100644
> --- a/tests/qapi-schema/reserved-member-has.err
> +++ b/tests/qapi-schema/reserved-member-has.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-member-has.json:5: Member of 'data' for command 
> 'oops' uses reserved name 'has-a'
> +tests/qapi-schema/reserved-member-has.qapi:5: Member of 'data' for command 
> 'oops' uses reserved name 'has-a'
> diff --git a/tests/qapi-schema/reserved-member-has.json 
> b/tests/qapi-schema/reserved-member-has.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-member-has.json
> rename to tests/qapi-schema/reserved-member-has.qapi
> diff --git a/tests/qapi-schema/reserved-member-q.err 
> b/tests/qapi-schema/reserved-member-q.err
> index f3d5dd78187..6ccd4f0c70f 100644
> --- a/tests/qapi-schema/reserved-member-q.err
> +++ b/tests/qapi-schema/reserved-member-q.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-member-q.json:4: Member of 'data' for struct 
> 'Foo' uses invalid name 'q-unix'
> +tests/qapi-schema/reserved-member-q.qapi:4: Member of 'data' for struct 
> 'Foo' uses invalid name 'q-unix'
> diff --git a/tests/qapi-schema/reserved-member-q.json 
> b/tests/qapi-schema/reserved-member-q.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-member-q.json
> rename to tests/qapi-schema/reserved-member-q.qapi
> diff --git a/tests/qapi-schema/reserved-member-u.err 
> b/tests/qapi-schema/reserved-member-u.err
> index 87d42296cc1..2587d3a1548 100644
> --- a/tests/qapi-schema/reserved-member-u.err
> +++ b/tests/qapi-schema/reserved-member-u.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-member-u.json:7: Member of 'data' for struct 
> 'Oops' uses reserved name 'u'
> +tests/qapi-schema/reserved-member-u.qapi:7: Member of 'data' for struct 
> 'Oops' uses reserved name 'u'
> diff --git a/tests/qapi-schema/reserved-member-u.json 
> b/tests/qapi-schema/reserved-member-u.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-member-u.json
> rename to tests/qapi-schema/reserved-member-u.qapi
> diff --git a/tests/qapi-schema/reserved-member-underscore.err 
> b/tests/qapi-schema/reserved-member-underscore.err
> index 65ff0da8ce9..6080f0d6baf 100644
> --- a/tests/qapi-schema/reserved-member-underscore.err
> +++ b/tests/qapi-schema/reserved-member-underscore.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-member-underscore.json:4: Member of 'data' for 
> struct 'Oops' uses invalid name '_oops'
> +tests/qapi-schema/reserved-member-underscore.qapi:4: Member of 'data' for 
> struct 'Oops' uses invalid name '_oops'
> diff --git a/tests/qapi-schema/reserved-member-underscore.json 
> b/tests/qapi-schema/reserved-member-underscore.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-member-underscore.json
> rename to tests/qapi-schema/reserved-member-underscore.qapi
> diff --git a/tests/qapi-schema/reserved-type-kind.err 
> b/tests/qapi-schema/reserved-type-kind.err
> index 0a38efaad8d..0d2b05f3100 100644
> --- a/tests/qapi-schema/reserved-type-kind.err
> +++ b/tests/qapi-schema/reserved-type-kind.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-type-kind.json:2: enum 'UnionKind' should not end 
> in 'Kind'
> +tests/qapi-schema/reserved-type-kind.qapi:2: enum 'UnionKind' should not end 
> in 'Kind'
> diff --git a/tests/qapi-schema/reserved-type-kind.json 
> b/tests/qapi-schema/reserved-type-kind.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-type-kind.json
> rename to tests/qapi-schema/reserved-type-kind.qapi
> diff --git a/tests/qapi-schema/reserved-type-list.err 
> b/tests/qapi-schema/reserved-type-list.err
> index 4510fa6d903..0ee5c659be6 100644
> --- a/tests/qapi-schema/reserved-type-list.err
> +++ b/tests/qapi-schema/reserved-type-list.err
> @@ -1 +1 @@
> -tests/qapi-schema/reserved-type-list.json:5: struct 'FooList' should not end 
> in 'List'
> +tests/qapi-schema/reserved-type-list.qapi:5: struct 'FooList' should not end 
> in 'List'
> diff --git a/tests/qapi-schema/reserved-type-list.json 
> b/tests/qapi-schema/reserved-type-list.qapi
> similarity index 100%
> rename from tests/qapi-schema/reserved-type-list.json
> rename to tests/qapi-schema/reserved-type-list.qapi
> diff --git a/tests/qapi-schema/returns-alternate.err 
> b/tests/qapi-schema/returns-alternate.err
> index dfbb419cac2..a79c0805984 100644
> --- a/tests/qapi-schema/returns-alternate.err
> +++ b/tests/qapi-schema/returns-alternate.err
> @@ -1 +1 @@
> -tests/qapi-schema/returns-alternate.json:3: 'returns' for command 'oops' 
> cannot use alternate type 'Alt'
> +tests/qapi-schema/returns-alternate.qapi:3: 'returns' for command 'oops' 
> cannot use alternate type 'Alt'
> diff --git a/tests/qapi-schema/returns-alternate.json 
> b/tests/qapi-schema/returns-alternate.qapi
> similarity index 100%
> rename from tests/qapi-schema/returns-alternate.json
> rename to tests/qapi-schema/returns-alternate.qapi
> diff --git a/tests/qapi-schema/returns-array-bad.err 
> b/tests/qapi-schema/returns-array-bad.err
> index 138095ccde1..54981ce3846 100644
> --- a/tests/qapi-schema/returns-array-bad.err
> +++ b/tests/qapi-schema/returns-array-bad.err
> @@ -1 +1 @@
> -tests/qapi-schema/returns-array-bad.json:2: 'returns' for command 'oops': 
> array type must contain single type name
> +tests/qapi-schema/returns-array-bad.qapi:2: 'returns' for command 'oops': 
> array type must contain single type name
> diff --git a/tests/qapi-schema/returns-array-bad.json 
> b/tests/qapi-schema/returns-array-bad.qapi
> similarity index 100%
> rename from tests/qapi-schema/returns-array-bad.json
> rename to tests/qapi-schema/returns-array-bad.qapi
> diff --git a/tests/qapi-schema/returns-dict.err 
> b/tests/qapi-schema/returns-dict.err
> index eb2d0c46615..b153bdc74c2 100644
> --- a/tests/qapi-schema/returns-dict.err
> +++ b/tests/qapi-schema/returns-dict.err
> @@ -1 +1 @@
> -tests/qapi-schema/returns-dict.json:2: 'returns' for command 'oops' should 
> be a type name
> +tests/qapi-schema/returns-dict.qapi:2: 'returns' for command 'oops' should 
> be a type name
> diff --git a/tests/qapi-schema/returns-dict.json 
> b/tests/qapi-schema/returns-dict.qapi
> similarity index 100%
> rename from tests/qapi-schema/returns-dict.json
> rename to tests/qapi-schema/returns-dict.qapi
> diff --git a/tests/qapi-schema/returns-unknown.err 
> b/tests/qapi-schema/returns-unknown.err
> index 1f43e3ac9f6..26b9af8344c 100644
> --- a/tests/qapi-schema/returns-unknown.err
> +++ b/tests/qapi-schema/returns-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/returns-unknown.json:2: 'returns' for command 'oops' uses 
> unknown type 'NoSuchType'
> +tests/qapi-schema/returns-unknown.qapi:2: 'returns' for command 'oops' uses 
> unknown type 'NoSuchType'
> diff --git a/tests/qapi-schema/returns-unknown.json 
> b/tests/qapi-schema/returns-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/returns-unknown.json
> rename to tests/qapi-schema/returns-unknown.qapi
> diff --git a/tests/qapi-schema/returns-whitelist.err 
> b/tests/qapi-schema/returns-whitelist.err
> index b2ba7a9deba..710fbb2f6f6 100644
> --- a/tests/qapi-schema/returns-whitelist.err
> +++ b/tests/qapi-schema/returns-whitelist.err
> @@ -1 +1 @@
> -tests/qapi-schema/returns-whitelist.json:14: 'returns' for command 
> 'no-way-this-will-get-whitelisted' cannot use built-in type 'int'
> +tests/qapi-schema/returns-whitelist.qapi:14: 'returns' for command 
> 'no-way-this-will-get-whitelisted' cannot use built-in type 'int'
> diff --git a/tests/qapi-schema/returns-whitelist.json 
> b/tests/qapi-schema/returns-whitelist.qapi
> similarity index 100%
> rename from tests/qapi-schema/returns-whitelist.json
> rename to tests/qapi-schema/returns-whitelist.qapi
> diff --git a/tests/qapi-schema/struct-base-clash-deep.err 
> b/tests/qapi-schema/struct-base-clash-deep.err
> index e2d7943f217..c6d7ef0a536 100644
> --- a/tests/qapi-schema/struct-base-clash-deep.err
> +++ b/tests/qapi-schema/struct-base-clash-deep.err
> @@ -1 +1 @@
> -tests/qapi-schema/struct-base-clash-deep.json:10: 'name' (member of Sub) 
> collides with 'name' (member of Base)
> +tests/qapi-schema/struct-base-clash-deep.qapi:10: 'name' (member of Sub) 
> collides with 'name' (member of Base)
> diff --git a/tests/qapi-schema/struct-base-clash-deep.json 
> b/tests/qapi-schema/struct-base-clash-deep.qapi
> similarity index 100%
> rename from tests/qapi-schema/struct-base-clash-deep.json
> rename to tests/qapi-schema/struct-base-clash-deep.qapi
> diff --git a/tests/qapi-schema/struct-base-clash.err 
> b/tests/qapi-schema/struct-base-clash.err
> index c52f33d27bf..de89c0e0b93 100644
> --- a/tests/qapi-schema/struct-base-clash.err
> +++ b/tests/qapi-schema/struct-base-clash.err
> @@ -1 +1 @@
> -tests/qapi-schema/struct-base-clash.json:5: 'name' (member of Sub) collides 
> with 'name' (member of Base)
> +tests/qapi-schema/struct-base-clash.qapi:5: 'name' (member of Sub) collides 
> with 'name' (member of Base)
> diff --git a/tests/qapi-schema/struct-base-clash.json 
> b/tests/qapi-schema/struct-base-clash.qapi
> similarity index 100%
> rename from tests/qapi-schema/struct-base-clash.json
> rename to tests/qapi-schema/struct-base-clash.qapi
> diff --git a/tests/qapi-schema/struct-data-invalid.err 
> b/tests/qapi-schema/struct-data-invalid.err
> index 6644f4c2ad2..84fc1404fa7 100644
> --- a/tests/qapi-schema/struct-data-invalid.err
> +++ b/tests/qapi-schema/struct-data-invalid.err
> @@ -1 +1 @@
> -tests/qapi-schema/struct-data-invalid.json:1: 'data' for struct 'foo' should 
> be a dictionary or type name
> +tests/qapi-schema/struct-data-invalid.qapi:1: 'data' for struct 'foo' should 
> be a dictionary or type name
> diff --git a/tests/qapi-schema/struct-data-invalid.json 
> b/tests/qapi-schema/struct-data-invalid.qapi
> similarity index 100%
> rename from tests/qapi-schema/struct-data-invalid.json
> rename to tests/qapi-schema/struct-data-invalid.qapi
> diff --git a/tests/qapi-schema/struct-member-invalid.err 
> b/tests/qapi-schema/struct-member-invalid.err
> index 69a326d450e..c94c8c6d712 100644
> --- a/tests/qapi-schema/struct-member-invalid.err
> +++ b/tests/qapi-schema/struct-member-invalid.err
> @@ -1 +1 @@
> -tests/qapi-schema/struct-member-invalid.json:1: Member 'a' of 'data' for 
> struct 'foo' should be a type name
> +tests/qapi-schema/struct-member-invalid.qapi:1: Member 'a' of 'data' for 
> struct 'foo' should be a type name
> diff --git a/tests/qapi-schema/struct-member-invalid.json 
> b/tests/qapi-schema/struct-member-invalid.qapi
> similarity index 100%
> rename from tests/qapi-schema/struct-member-invalid.json
> rename to tests/qapi-schema/struct-member-invalid.qapi
> diff --git a/tests/qapi-schema/trailing-comma-list.err 
> b/tests/qapi-schema/trailing-comma-list.err
> index 212e14ae28e..c786b67d2ff 100644
> --- a/tests/qapi-schema/trailing-comma-list.err
> +++ b/tests/qapi-schema/trailing-comma-list.err
> @@ -1 +1 @@
> -tests/qapi-schema/trailing-comma-list.json:2:36: Expected "{", "[", string, 
> boolean or "null"
> +tests/qapi-schema/trailing-comma-list.qapi:2:36: Expected "{", "[", string, 
> boolean or "null"
> diff --git a/tests/qapi-schema/trailing-comma-list.json 
> b/tests/qapi-schema/trailing-comma-list.qapi
> similarity index 100%
> rename from tests/qapi-schema/trailing-comma-list.json
> rename to tests/qapi-schema/trailing-comma-list.qapi
> diff --git a/tests/qapi-schema/trailing-comma-object.err 
> b/tests/qapi-schema/trailing-comma-object.err
> index 30bce5e1945..aff13d63986 100644
> --- a/tests/qapi-schema/trailing-comma-object.err
> +++ b/tests/qapi-schema/trailing-comma-object.err
> @@ -1 +1 @@
> -tests/qapi-schema/trailing-comma-object.json:2:38: Expected string
> +tests/qapi-schema/trailing-comma-object.qapi:2:38: Expected string
> diff --git a/tests/qapi-schema/trailing-comma-object.json 
> b/tests/qapi-schema/trailing-comma-object.qapi
> similarity index 100%
> rename from tests/qapi-schema/trailing-comma-object.json
> rename to tests/qapi-schema/trailing-comma-object.qapi
> diff --git a/tests/qapi-schema/type-bypass-bad-gen.err 
> b/tests/qapi-schema/type-bypass-bad-gen.err
> index a83c3c655de..e617f425b94 100644
> --- a/tests/qapi-schema/type-bypass-bad-gen.err
> +++ b/tests/qapi-schema/type-bypass-bad-gen.err
> @@ -1 +1 @@
> -tests/qapi-schema/type-bypass-bad-gen.json:2: 'gen' of command 'foo' should 
> only use false value
> +tests/qapi-schema/type-bypass-bad-gen.qapi:2: 'gen' of command 'foo' should 
> only use false value
> diff --git a/tests/qapi-schema/type-bypass-bad-gen.json 
> b/tests/qapi-schema/type-bypass-bad-gen.qapi
> similarity index 100%
> rename from tests/qapi-schema/type-bypass-bad-gen.json
> rename to tests/qapi-schema/type-bypass-bad-gen.qapi
> diff --git a/tests/qapi-schema/unclosed-list.err 
> b/tests/qapi-schema/unclosed-list.err
> index fb41a86abd0..3e9bd74f833 100644
> --- a/tests/qapi-schema/unclosed-list.err
> +++ b/tests/qapi-schema/unclosed-list.err
> @@ -1 +1 @@
> -tests/qapi-schema/unclosed-list.json:1:20: Expected "," or "]"
> +tests/qapi-schema/unclosed-list.qapi:1:20: Expected "," or "]"
> diff --git a/tests/qapi-schema/unclosed-list.json 
> b/tests/qapi-schema/unclosed-list.qapi
> similarity index 100%
> rename from tests/qapi-schema/unclosed-list.json
> rename to tests/qapi-schema/unclosed-list.qapi
> diff --git a/tests/qapi-schema/unclosed-object.err 
> b/tests/qapi-schema/unclosed-object.err
> index db3deedd63d..42b5ba1abb6 100644
> --- a/tests/qapi-schema/unclosed-object.err
> +++ b/tests/qapi-schema/unclosed-object.err
> @@ -1 +1 @@
> -tests/qapi-schema/unclosed-object.json:1:21: Expected "," or "}"
> +tests/qapi-schema/unclosed-object.qapi:1:21: Expected "," or "}"
> diff --git a/tests/qapi-schema/unclosed-object.json 
> b/tests/qapi-schema/unclosed-object.qapi
> similarity index 100%
> rename from tests/qapi-schema/unclosed-object.json
> rename to tests/qapi-schema/unclosed-object.qapi
> diff --git a/tests/qapi-schema/unclosed-string.err 
> b/tests/qapi-schema/unclosed-string.err
> index 12b187074e7..fbe5385d6e2 100644
> --- a/tests/qapi-schema/unclosed-string.err
> +++ b/tests/qapi-schema/unclosed-string.err
> @@ -1 +1 @@
> -tests/qapi-schema/unclosed-string.json:1:11: Missing terminating "'"
> +tests/qapi-schema/unclosed-string.qapi:1:11: Missing terminating "'"
> diff --git a/tests/qapi-schema/unclosed-string.json 
> b/tests/qapi-schema/unclosed-string.qapi
> similarity index 100%
> rename from tests/qapi-schema/unclosed-string.json
> rename to tests/qapi-schema/unclosed-string.qapi
> diff --git a/tests/qapi-schema/unicode-str.err 
> b/tests/qapi-schema/unicode-str.err
> index f621cd6448b..9301f12bd0d 100644
> --- a/tests/qapi-schema/unicode-str.err
> +++ b/tests/qapi-schema/unicode-str.err
> @@ -1 +1 @@
> -tests/qapi-schema/unicode-str.json:2: 'command' uses invalid name 'é'
> +tests/qapi-schema/unicode-str.qapi:2: 'command' uses invalid name 'é'
> diff --git a/tests/qapi-schema/unicode-str.json 
> b/tests/qapi-schema/unicode-str.qapi
> similarity index 100%
> rename from tests/qapi-schema/unicode-str.json
> rename to tests/qapi-schema/unicode-str.qapi
> diff --git a/tests/qapi-schema/union-base-empty.err 
> b/tests/qapi-schema/union-base-empty.err
> index 7695806d81a..47dd3d6ac3b 100644
> --- a/tests/qapi-schema/union-base-empty.err
> +++ b/tests/qapi-schema/union-base-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-base-empty.json:5: Discriminator 'type' is not a 
> member of base struct 'Empty'
> +tests/qapi-schema/union-base-empty.qapi:5: Discriminator 'type' is not a 
> member of base struct 'Empty'
> diff --git a/tests/qapi-schema/union-base-empty.json 
> b/tests/qapi-schema/union-base-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-base-empty.json
> rename to tests/qapi-schema/union-base-empty.qapi
> diff --git a/tests/qapi-schema/union-base-no-discriminator.err 
> b/tests/qapi-schema/union-base-no-discriminator.err
> index 8b7a24260ff..e632a4d2649 100644
> --- a/tests/qapi-schema/union-base-no-discriminator.err
> +++ b/tests/qapi-schema/union-base-no-discriminator.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-base-no-discriminator.json:11: Simple union 
> 'TestUnion' must not have a base
> +tests/qapi-schema/union-base-no-discriminator.qapi:11: Simple union 
> 'TestUnion' must not have a base
> diff --git a/tests/qapi-schema/union-base-no-discriminator.json 
> b/tests/qapi-schema/union-base-no-discriminator.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-base-no-discriminator.json
> rename to tests/qapi-schema/union-base-no-discriminator.qapi
> diff --git a/tests/qapi-schema/union-branch-case.err 
> b/tests/qapi-schema/union-branch-case.err
> index 11521901d88..8383a3394fa 100644
> --- a/tests/qapi-schema/union-branch-case.err
> +++ b/tests/qapi-schema/union-branch-case.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-branch-case.json:2: 'Branch' (branch of 
> NoWayThisWillGetWhitelisted) should not use uppercase
> +tests/qapi-schema/union-branch-case.qapi:2: 'Branch' (branch of 
> NoWayThisWillGetWhitelisted) should not use uppercase
> diff --git a/tests/qapi-schema/union-branch-case.json 
> b/tests/qapi-schema/union-branch-case.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-branch-case.json
> rename to tests/qapi-schema/union-branch-case.qapi
> diff --git a/tests/qapi-schema/union-clash-branches.err 
> b/tests/qapi-schema/union-clash-branches.err
> index e5b21135bb8..ee74c202af5 100644
> --- a/tests/qapi-schema/union-clash-branches.err
> +++ b/tests/qapi-schema/union-clash-branches.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-clash-branches.json:4: 'a_b' (branch of TestUnion) 
> collides with 'a-b' (branch of TestUnion)
> +tests/qapi-schema/union-clash-branches.qapi:4: 'a_b' (branch of TestUnion) 
> collides with 'a-b' (branch of TestUnion)
> diff --git a/tests/qapi-schema/union-clash-branches.json 
> b/tests/qapi-schema/union-clash-branches.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-clash-branches.json
> rename to tests/qapi-schema/union-clash-branches.qapi
> diff --git a/tests/qapi-schema/union-empty.err 
> b/tests/qapi-schema/union-empty.err
> index 12c20221bdf..da45ccaf497 100644
> --- a/tests/qapi-schema/union-empty.err
> +++ b/tests/qapi-schema/union-empty.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-empty.json:2: Union 'Union' cannot have empty 'data'
> +tests/qapi-schema/union-empty.qapi:2: Union 'Union' cannot have empty 'data'
> diff --git a/tests/qapi-schema/union-empty.json 
> b/tests/qapi-schema/union-empty.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-empty.json
> rename to tests/qapi-schema/union-empty.qapi
> diff --git a/tests/qapi-schema/union-invalid-base.err 
> b/tests/qapi-schema/union-invalid-base.err
> index 03d7b97a93b..7176a08136e 100644
> --- a/tests/qapi-schema/union-invalid-base.err
> +++ b/tests/qapi-schema/union-invalid-base.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-invalid-base.json:8: 'base' for union 'TestUnion' 
> cannot use built-in type 'int'
> +tests/qapi-schema/union-invalid-base.qapi:8: 'base' for union 'TestUnion' 
> cannot use built-in type 'int'
> diff --git a/tests/qapi-schema/union-invalid-base.json 
> b/tests/qapi-schema/union-invalid-base.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-invalid-base.json
> rename to tests/qapi-schema/union-invalid-base.qapi
> diff --git a/tests/qapi-schema/union-optional-branch.err 
> b/tests/qapi-schema/union-optional-branch.err
> index 3ada1334dc6..1dcb5835cc2 100644
> --- a/tests/qapi-schema/union-optional-branch.err
> +++ b/tests/qapi-schema/union-optional-branch.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-optional-branch.json:2: Member of union 'Union' does 
> not allow optional name '*a'
> +tests/qapi-schema/union-optional-branch.qapi:2: Member of union 'Union' does 
> not allow optional name '*a'
> diff --git a/tests/qapi-schema/union-optional-branch.json 
> b/tests/qapi-schema/union-optional-branch.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-optional-branch.json
> rename to tests/qapi-schema/union-optional-branch.qapi
> diff --git a/tests/qapi-schema/union-unknown.err 
> b/tests/qapi-schema/union-unknown.err
> index 54fe456f9cd..dab37db8b8f 100644
> --- a/tests/qapi-schema/union-unknown.err
> +++ b/tests/qapi-schema/union-unknown.err
> @@ -1 +1 @@
> -tests/qapi-schema/union-unknown.json:2: Member 'unknown' of union 'Union' 
> uses unknown type 'MissingType'
> +tests/qapi-schema/union-unknown.qapi:2: Member 'unknown' of union 'Union' 
> uses unknown type 'MissingType'
> diff --git a/tests/qapi-schema/union-unknown.json 
> b/tests/qapi-schema/union-unknown.qapi
> similarity index 100%
> rename from tests/qapi-schema/union-unknown.json
> rename to tests/qapi-schema/union-unknown.qapi
> diff --git a/tests/qapi-schema/unknown-escape.err 
> b/tests/qapi-schema/unknown-escape.err
> index 000e30ddf33..ad58d0eae97 100644
> --- a/tests/qapi-schema/unknown-escape.err
> +++ b/tests/qapi-schema/unknown-escape.err
> @@ -1 +1 @@
> -tests/qapi-schema/unknown-escape.json:3:21: Unknown escape \x
> +tests/qapi-schema/unknown-escape.qapi:3:21: Unknown escape \x
> diff --git a/tests/qapi-schema/unknown-escape.json 
> b/tests/qapi-schema/unknown-escape.qapi
> similarity index 100%
> rename from tests/qapi-schema/unknown-escape.json
> rename to tests/qapi-schema/unknown-escape.qapi
> diff --git a/tests/qapi-schema/unknown-expr-key.err 
> b/tests/qapi-schema/unknown-expr-key.err
> index 12f5ed5b435..5b8dee56fa0 100644
> --- a/tests/qapi-schema/unknown-expr-key.err
> +++ b/tests/qapi-schema/unknown-expr-key.err
> @@ -1 +1 @@
> -tests/qapi-schema/unknown-expr-key.json:2: Unknown key 'bogus' in struct 
> 'bar'
> +tests/qapi-schema/unknown-expr-key.qapi:2: Unknown key 'bogus' in struct 
> 'bar'
> diff --git a/tests/qapi-schema/unknown-expr-key.json 
> b/tests/qapi-schema/unknown-expr-key.qapi
> similarity index 100%
> rename from tests/qapi-schema/unknown-expr-key.json
> rename to tests/qapi-schema/unknown-expr-key.qapi
> -- 
> 2.14.3
> 
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK



reply via email to

[Prev in Thread] Current Thread [Next in Thread]