From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: qemu-devel@nongnu.org, alex.williamson@redhat.com,
andrew@codeconstruct.com.au, andrew@daynix.com,
arei.gonglei@huawei.com, berto@igalia.com,
borntraeger@linux.ibm.com, clg@kaod.org, david@redhat.com,
den@openvz.org, eblake@redhat.com, eduardo@habkost.net,
farman@linux.ibm.com, farosas@suse.de, hreitz@redhat.com,
idryomov@gmail.com, iii@linux.ibm.com, jamin_lin@aspeedtech.com,
jasowang@redhat.com, joel@jms.id.au, jsnow@redhat.com,
kwolf@redhat.com, leetroy@gmail.com, marcandre.lureau@redhat.com,
marcel.apfelbaum@gmail.com, michael.roth@amd.com, mst@redhat.com,
mtosatti@redhat.com, nsg@linux.ibm.com, pasic@linux.ibm.com,
pbonzini@redhat.com, peter.maydell@linaro.org, peterx@redhat.com,
philmd@linaro.org, pizhenwei@bytedance.com, pl@dlhnet.de,
richard.henderson@linaro.org, stefanha@redhat.com,
steven_lee@aspeedtech.com, thuth@redhat.com,
vsementsov@yandex-team.ru, wangyanan55@huawei.com,
yuri.benditovich@daynix.com, zhao1.liu@intel.com,
qemu-block@nongnu.org, qemu-arm@nongnu.org,
qemu-s390x@nongnu.org, kvm@vger.kernel.org
Subject: Re: [PATCH 01/18] qapi: Smarter camel_to_upper() to reduce need for 'prefix'
Date: Tue, 30 Jul 2024 10:13:25 +0100 [thread overview]
Message-ID: <ZqiutRoQuAsrllfj@redhat.com> (raw)
In-Reply-To: <20240730081032.1246748-2-armbru@redhat.com>
On Tue, Jul 30, 2024 at 10:10:15AM +0200, Markus Armbruster wrote:
> camel_to_upper() converts its argument from camel case to upper case
> with '_' between words. Used for generated enumeration constant
> prefixes.
>
> When some of the words are spelled all caps, where exactly to insert
> '_' is guesswork. camel_to_upper()'s guesses are bad enough in places
> to make people override them with a 'prefix' in the schema.
>
> Rewrite it to guess better:
>
> 1. Insert '_' after a non-upper case character followed by an upper
> case character:
>
> OneTwo -> ONE_TWO
> One2Three -> ONE2_THREE
>
> 2. Insert '_' before the last upper case character followed by a
> non-upper case character:
>
> ACRONYMWord -> ACRONYM_Word
>
> Except at the beginning (as in OneTwo above), or when there is
> already one:
>
> AbCd -> AB_CD
>
> This changes the default enumeration constant prefix for a number of
> enums. Generated enumeration constants change only where the default
> is not overridden with 'prefix'.
>
> The following enumerations without a 'prefix' change:
>
> enum old camel_to_upper()
> new camel_to_upper()
> ------------------------------------------------------------------
> DisplayGLMode DISPLAYGL_MODE
> DISPLAY_GL_MODE
> EbpfProgramID EBPF_PROGRAMID
> EBPF_PROGRAM_ID
> HmatLBDataType HMATLB_DATA_TYPE
> HMAT_LB_DATA_TYPE
> HmatLBMemoryHierarchy HMATLB_MEMORY_HIERARCHY
> HMAT_LB_MEMORY_HIERARCHY
> MultiFDCompression MULTIFD_COMPRESSION
> MULTI_FD_COMPRESSION
> OffAutoPCIBAR OFF_AUTOPCIBAR
> OFF_AUTO_PCIBAR
> QCryptoBlockFormat Q_CRYPTO_BLOCK_FORMAT
> QCRYPTO_BLOCK_FORMAT
> QCryptoBlockLUKSKeyslotState Q_CRYPTO_BLOCKLUKS_KEYSLOT_STATE
> QCRYPTO_BLOCK_LUKS_KEYSLOT_STATE
> QKeyCode Q_KEY_CODE
> QKEY_CODE
> XDbgBlockGraphNodeType X_DBG_BLOCK_GRAPH_NODE_TYPE
> XDBG_BLOCK_GRAPH_NODE_TYPE
> TestUnionEnumA TEST_UNION_ENUMA
> TEST_UNION_ENUM_A
>
> Add a 'prefix' so generated code doesn't change now. Subsequent
> commits will remove most of them again. Two will remain:
> MULTIFD_COMPRESSION, because migration code generally spells "multifd"
> that way, and Q_KEY_CODE, because that one is baked into
> subprojects/keycodemapdb/tools/keymap-gen.
>
> The following enumerations with a 'prefix' change so that the prefix
> is now superfluous:
>
> enum old camel_to_upper()
> new camel_to_upper() [equal to prefix]
> ------------------------------------------------------------------
> BlkdebugIOType BLKDEBUGIO_TYPE
> BLKDEBUG_IO_TYPE
> QCryptoTLSCredsEndpoint Q_CRYPTOTLS_CREDS_ENDPOINT
> QCRYPTO_TLS_CREDS_ENDPOINT
> QCryptoSecretFormat Q_CRYPTO_SECRET_FORMAT
> QCRYPTO_SECRET_FORMAT
> QCryptoCipherMode Q_CRYPTO_CIPHER_MODE
> QCRYPTO_CIPHER_MODE
> QCryptodevBackendType Q_CRYPTODEV_BACKEND_TYPE
> QCRYPTODEV_BACKEND_TYPE
> QType [builtin] Q_TYPE
> QTYPE
>
> Drop these prefixes.
>
> The following enumerations with a 'prefix' change without making the
> 'prefix' superfluous:
>
> enum old camel_to_upper()
> new camel_to_upper() [equal to prefix]
> prefix
> ------------------------------------------------------------------
> CpuS390Entitlement CPUS390_ENTITLEMENT
> CPU_S390_ENTITLEMENT
> S390_CPU_ENTITLEMENT
> CpuS390Polarization CPUS390_POLARIZATION
> CPU_S390_POLARIZATION
> S390_CPU_POLARIZATION
> CpuS390State CPUS390_STATE
> CPU_S390_STATE
> S390_CPU_STATE
> QAuthZListFormat Q_AUTHZ_LIST_FORMAT
> QAUTH_Z_LIST_FORMAT
> QAUTHZ_LIST_FORMAT
> QAuthZListPolicy Q_AUTHZ_LIST_POLICY
> QAUTH_Z_LIST_POLICY
> QAUTHZ_LIST_POLICY
> QCryptoAkCipherAlgorithm Q_CRYPTO_AK_CIPHER_ALGORITHM
> QCRYPTO_AK_CIPHER_ALGORITHM
> QCRYPTO_AKCIPHER_ALG
> QCryptoAkCipherKeyType Q_CRYPTO_AK_CIPHER_KEY_TYPE
> QCRYPTO_AK_CIPHER_KEY_TYPE
> QCRYPTO_AKCIPHER_KEY_TYPE
> QCryptoCipherAlgorithm Q_CRYPTO_CIPHER_ALGORITHM
> QCRYPTO_CIPHER_ALGORITHM
> QCRYPTO_CIPHER_ALG
> QCryptoHashAlgorithm Q_CRYPTO_HASH_ALGORITHM
> QCRYPTO_HASH_ALGORITHM
> QCRYPTO_HASH_ALG
> QCryptoIVGenAlgorithm Q_CRYPTOIV_GEN_ALGORITHM
> QCRYPTO_IV_GEN_ALGORITHM
> QCRYPTO_IVGEN_ALG
> QCryptoRSAPaddingAlgorithm Q_CRYPTORSA_PADDING_ALGORITHM
> QCRYPTO_RSA_PADDING_ALGORITHM
> QCRYPTO_RSA_PADDING_ALG
> QCryptodevBackendAlgType Q_CRYPTODEV_BACKEND_ALG_TYPE
> QCRYPTODEV_BACKEND_ALG_TYPE
> QCRYPTODEV_BACKEND_ALG
> QCryptodevBackendServiceType Q_CRYPTODEV_BACKEND_SERVICE_TYPE
> QCRYPTODEV_BACKEND_SERVICE_TYPE
> QCRYPTODEV_BACKEND_SERVICE
>
> Subsequent commits will tweak things to remove most of these prefixes.
> Only QAUTHZ_LIST_FORMAT and QAUTHZ_LIST_POLICY will remain.
IIUC from above those two result in
QAUTH_Z_LIST_FORMAT
QAUTH_Z_LIST_POLICY
Is it possible to add a 3rd rule
* Single uppercase letter folds into the previous word
or are there valid cases where we have a single uppercase
that we want to preserve ?
It sure would be nice to eliminate the 'prefix' concept,
that we've clearly over-used, if we can kill the only 2
remaining examples.
>
> Signed-off-by: Markus Armbruster <armbru@redhat.com>
> ---
> qapi/block-core.json | 3 +-
> qapi/common.json | 1 +
> qapi/crypto.json | 6 ++--
> qapi/cryptodev.json | 1 -
> qapi/ebpf.json | 1 +
> qapi/machine.json | 1 +
> qapi/migration.json | 1 +
> qapi/ui.json | 2 ++
> scripts/qapi/common.py | 42 ++++++++++++++----------
> scripts/qapi/schema.py | 2 +-
> tests/qapi-schema/alternate-array.out | 1 -
> tests/qapi-schema/comments.out | 1 -
> tests/qapi-schema/doc-good.out | 1 -
> tests/qapi-schema/empty.out | 1 -
> tests/qapi-schema/include-repetition.out | 1 -
> tests/qapi-schema/include-simple.out | 1 -
> tests/qapi-schema/indented-expr.out | 1 -
> tests/qapi-schema/qapi-schema-test.json | 1 +
> tests/qapi-schema/qapi-schema-test.out | 2 +-
> 19 files changed, 37 insertions(+), 33 deletions(-)
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2024-07-30 9:14 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-30 8:10 [PATCH 00/18] qapi: Reduce use of 'prefix' Markus Armbruster
2024-07-30 8:10 ` [PATCH 01/18] qapi: Smarter camel_to_upper() to reduce need for 'prefix' Markus Armbruster
2024-07-30 9:13 ` Daniel P. Berrangé [this message]
2024-07-30 12:22 ` Markus Armbruster
2024-07-30 13:33 ` Avihai Horon
2024-07-31 5:12 ` Markus Armbruster
2024-07-31 5:59 ` Avihai Horon
2024-07-31 6:37 ` Markus Armbruster
2024-07-31 9:43 ` Kevin Wolf
2024-08-09 9:03 ` Markus Armbruster
2024-07-30 8:10 ` [PATCH 02/18] tests/qapi-schema: Drop temporary 'prefix' Markus Armbruster
2024-08-12 10:04 ` Thomas Huth
2024-07-30 8:10 ` [PATCH 03/18] qapi/block-core: " Markus Armbruster
2024-07-30 8:10 ` [PATCH 04/18] qapi/common: " Markus Armbruster
2024-07-30 15:07 ` Cédric Le Goater
2024-07-30 8:10 ` [PATCH 05/18] qapi/crypto: " Markus Armbruster
2024-07-30 8:57 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 06/18] qapi/ebpf: " Markus Armbruster
2024-07-30 8:10 ` [PATCH 07/18] qapi/machine: " Markus Armbruster
2024-07-30 9:28 ` Zhao Liu
2024-07-30 8:10 ` [PATCH 08/18] qapi/ui: " Markus Armbruster
2024-07-30 8:10 ` [PATCH 09/18] qapi/machine: Rename CpuS390* to S390Cpu, and drop 'prefix' Markus Armbruster
2024-07-30 9:08 ` Daniel P. Berrangé
2024-07-30 9:26 ` Zhao Liu
2024-08-09 7:10 ` Markus Armbruster
2024-08-12 10:09 ` Thomas Huth
2024-07-30 8:10 ` [PATCH 10/18] qapi/crypto: Drop unwanted 'prefix' Markus Armbruster
2024-07-30 8:58 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 11/18] qapi/crypto: Rename QCryptoHashAlgorithm to *Algo, and drop prefix Markus Armbruster
2024-07-30 9:01 ` Daniel P. Berrangé
2024-07-30 9:01 ` Daniel P. Berrangé
2024-07-30 12:26 ` Markus Armbruster
2024-07-31 9:46 ` Daniel P. Berrangé
2024-07-31 9:46 ` Daniel P. Berrangé
2024-08-02 14:27 ` Markus Armbruster
2024-07-30 8:10 ` [PATCH 12/18] qapi/crypto: Rename QCryptoCipherAlgorithm " Markus Armbruster
2024-07-30 9:02 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 13/18] qapi/crypto: Rename QCryptoIVGenAlgorithm " Markus Armbruster
2024-07-30 9:03 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 14/18] qapi/crypto: Rename QCryptoAkCipherAlgorithm " Markus Armbruster
2024-07-30 9:03 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 15/18] qapi/crypto: Rename QCryptoRSAPaddingAlgorithm " Markus Armbruster
2024-07-30 9:04 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 16/18] qapi/crypto: Rename QCryptoAFAlg to QCryptoAFAlgo Markus Armbruster
2024-07-30 9:05 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 17/18] qapi/cryptodev: Drop unwanted 'prefix' Markus Armbruster
2024-07-30 9:06 ` Daniel P. Berrangé
2024-07-30 8:10 ` [PATCH 18/18] qapi/cryptodev: Rename QCryptodevBackendAlgType to *Algo, and drop prefix Markus Armbruster
2024-07-30 9:06 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZqiutRoQuAsrllfj@redhat.com \
--to=berrange@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=andrew@codeconstruct.com.au \
--cc=andrew@daynix.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=berto@igalia.com \
--cc=borntraeger@linux.ibm.com \
--cc=clg@kaod.org \
--cc=david@redhat.com \
--cc=den@openvz.org \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=farman@linux.ibm.com \
--cc=farosas@suse.de \
--cc=hreitz@redhat.com \
--cc=idryomov@gmail.com \
--cc=iii@linux.ibm.com \
--cc=jamin_lin@aspeedtech.com \
--cc=jasowang@redhat.com \
--cc=joel@jms.id.au \
--cc=jsnow@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kwolf@redhat.com \
--cc=leetroy@gmail.com \
--cc=marcandre.lureau@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=nsg@linux.ibm.com \
--cc=pasic@linux.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=pizhenwei@bytedance.com \
--cc=pl@dlhnet.de \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=stefanha@redhat.com \
--cc=steven_lee@aspeedtech.com \
--cc=thuth@redhat.com \
--cc=vsementsov@yandex-team.ru \
--cc=wangyanan55@huawei.com \
--cc=yuri.benditovich@daynix.com \
--cc=zhao1.liu@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.