From: Markus Armbruster <armbru@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: "Eduardo Habkost" <ehabkost@redhat.com>,
qemu-block@nongnu.org, "Juan Quintela" <quintela@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
qemu-devel@nongnu.org, "Yuval Shaia" <yuval.shaia.ml@gmail.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Andrea Bolognani" <abologna@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"John Snow" <jsnow@redhat.com>,
"Michael Roth" <mdroth@linux.vnet.ibm.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
"Stefan Berger" <stefanb@linux.ibm.com>
Subject: Re: [PATCH] schemas: Add vim modeline
Date: Thu, 30 Jul 2020 13:51:10 +0200 [thread overview]
Message-ID: <87k0ylz0ep.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <20200730093732.GB3477223@redhat.com> ("Daniel P. =?utf-8?Q?B?= =?utf-8?Q?errang=C3=A9=22's?= message of "Thu, 30 Jul 2020 10:37:32 +0100")
Daniel P. Berrangé <berrange@redhat.com> writes:
> On Thu, Jul 30, 2020 at 11:07:26AM +0200, Markus Armbruster wrote:
>> Andrea Bolognani <abologna@redhat.com> writes:
>>
>> > The various schemas included in QEMU use a JSON-based format which
>> > is, however, strictly speaking not valid JSON.
>> >
>> > As a consequence, when vim tries to apply syntax highlight rules
>> > for JSON (as guessed from the file name), the result is an unreadable
>> > mess which mostly consist of red markers pointing out supposed errors
>> > in, well, pretty much everything.
>> >
>> > Using Python syntax highlighting produces much better results, and
>> > in fact these files already start with specially-formatted comments
>> > that instruct Emacs to process them as if they were Python files.
>> >
>> > This commit adds the equivalent special comments for vim.
>> >
>> > Signed-off-by: Andrea Bolognani <abologna@redhat.com>
>
> Given that we already have emacs mode-lines, I see no reason to
> not also have vim mode-lines, so regardless of the deeper discussion
> I think this is patch is fine to merge in the short term
>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
>
>
>> Naming QAPI schema files .json even though their contents isn't was a
>> mistake. Correcting it would be a pain. If we correct it, then the
>> sooner the better.
>>
>> Renaming them to .py gives decent editor support out of the box. Their
>> contents isn't quite Python, though: true vs. True, false vs. False. Do
>> we care? Only a few dozen occurences; they could be adjusted.
>>
>> Renaming them to .qapi would perhaps be less confusing, for the price of
>> "out of the box".
>
> IMHO, the critical rule is that if you a pick a particular file extension
> associated with an existing language, you absolutely MUST BE compliant
> with that language.
Can't argue with that :)
> We fail at compliance with both JSON and Python because we're actually
> using our own DSL (domain specific language).
>
> IOW if we're going to stick with our current file format, then we should
> be naming them .qapi. We can still use an editor mode line if we want to
> claim we're approximately equiv to another language, but we can't be
> surprised if editors get upset.
>
>
> The bigger question is whether having our own DSL is justified ?
>
> I'm *really* sceptical that it is.
To be precise: our own DSL *syntax*. Semantics is a separate question
to be skeptical about.
> We can't use JSON because it lacks comments. So we invented our own
> psuedo-JSON parser that supported comments, and used ' instead of "
> for some reason. We also needed to be able to parse a sequence of
> multiple JSON documents in one file. We should have just picked a
> different language because JSON clearly didn't do what we eneeded.
JSON is a exceptionally poor choice for a DSL, or even a configuration
language.
Correcting our mistake involves a flag day and a re-learn. We need to
weigh costs against benefits.
The QAPI schema language has two layers:
* JSON, with a lexical and a syntactical sub-layer (both in parser.py)
* QAPI, with a context-free and a context-dependend sub-layer (in
expr.py and schema.py, respectively)
Replacing the JSON layer is possible as long as the replacement is
sufficiently expressive (not a tall order).
> You suggest naming them .py. If we do that, we must declare that they
> are literally Python code
Agree.
> modify them so that we can load the
> files straight into the python intepretor as code, and not parse
> them as data. I feel unhappy about treating data as code though.
Stress on *can* load. Doesn't mean we should.
Ancient prior art: Lisp programs routinely use s-expressions as
configuration file syntax. They don't load them as code, they read them
as data.
With Python, it's ast.parse(), I think.
> While JSON doesn't do what we need, its second-cousin YAML is a more
> flexible format. Taking one example
>
> ---
> ##
> # @ImageInfoSpecificQCow2:
> #
> # @compat: compatibility level
> #
> # ...snip...
> #
> # Since: 1.7
> ##
> struct: ImageInfoSpecificQCow2
> data:
> compat: str
> "*data-file": str
> "*data-file-raw": bool
> "*lazy-refcounts": bool
> "*corrupt": bool
> refcount-bits: int
> "*encrypt": ImageInfoSpecificQCow2Encryption
> "*bitmaps":
> - Qcow2BitmapInfo
> compression-type: Qcow2CompressionType
>
>
> Then we could use a regular off the shelf YAML parser in python.
>
> The uglyiness with quotes is due to the use of "*". Slightly less ugly
> if we simply declare that quotes are always used, even where they're
> not strictly required.
StrictYAML insists on quotes.
I hate having to quote identifiers. There's a reason we don't write
'int'
'main'('int', 'argc', 'char' *'argv'[])
{
'printf'("hello world\n");
return 0;
}
> struct: ImageInfoSpecificQCow2
> data:
> "compat": "str"
> "*data-file": "str"
> "*data-file-raw": "bool"
> "*lazy-refcounts": "bool"
> "*corrupt": "bool"
> "refcount-bits": "int"
> "*encrypt": "ImageInfoSpecificQCow2Encryption"
> "*bitmaps":
> - "Qcow2BitmapInfo"
> "compression-type": "Qcow2CompressionType"
>
> With the use of "---" to denote the start of document, we have no trouble
> parsing our files which would actually be a concatenation of multiple
> documents. The python YAML library provides the easy yaml.load_all()
> method.
Required reading on YAML:
https://www.arp242.net/yaml-config.html
Some of the criticism there doesn't matter for our use case.
next prev parent reply other threads:[~2020-07-30 11:52 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-29 18:50 [PATCH] schemas: Add vim modeline Andrea Bolognani
2020-07-30 9:07 ` Markus Armbruster
2020-07-30 9:37 ` Daniel P. Berrangé
2020-07-30 11:51 ` Markus Armbruster [this message]
2020-07-30 13:24 ` Daniel P. Berrangé
2020-07-31 6:45 ` John Snow
2020-07-31 9:21 ` Markus Armbruster
2020-07-31 9:32 ` Daniel P. Berrangé
2020-07-31 12:55 ` Markus Armbruster
2020-07-31 15:07 ` Daniel P. Berrangé
2020-07-31 15:26 ` John Snow
2020-07-31 15:44 ` Daniel P. Berrangé
2020-08-03 7:28 ` Markus Armbruster
2020-08-03 8:41 ` Paolo Bonzini
2020-08-03 11:24 ` Markus Armbruster
2020-08-03 11:36 ` Daniel P. Berrangé
2020-08-03 12:16 ` Paolo Bonzini
2020-08-03 12:23 ` Daniel P. Berrangé
2020-08-03 12:33 ` Paolo Bonzini
2020-08-03 12:43 ` Daniel P. Berrangé
2020-08-03 15:48 ` Markus Armbruster
2020-08-03 21:02 ` Nir Soffer
2020-07-31 16:35 ` Paolo Bonzini
2020-07-31 16:41 ` Dr. David Alan Gilbert
2020-07-31 17:20 ` Daniel P. Berrangé
2020-07-31 17:47 ` Paolo Bonzini
2020-08-03 9:44 ` Daniel P. Berrangé
2020-07-31 17:53 ` John Snow
2020-07-31 18:01 ` Paolo Bonzini
2020-08-03 7:45 ` Markus Armbruster
2020-07-31 16:28 ` cleanups with long-term benefits (was Re: [PATCH] schemas: Add vim modeline) Paolo Bonzini
2020-07-31 17:05 ` Daniel P. Berrangé
2020-07-31 17:16 ` Paolo Bonzini
2020-07-31 17:27 ` Daniel P. Berrangé
2020-07-31 17:42 ` Paolo Bonzini
2020-08-03 9:27 ` Daniel P. Berrangé
2020-08-03 8:18 ` Markus Armbruster
2020-08-03 8:42 ` Paolo Bonzini
2020-08-03 11:28 ` Markus Armbruster
2020-08-03 12:01 ` Paolo Bonzini
2020-08-03 16:03 ` Markus Armbruster
2020-08-03 16:36 ` Kevin Wolf
2020-08-04 7:28 ` Markus Armbruster
2020-08-03 17:19 ` Paolo Bonzini
2020-08-04 8:03 ` Markus Armbruster
2020-08-04 18:24 ` John Snow
2020-08-05 7:36 ` Markus Armbruster
2020-08-05 8:25 ` Paolo Bonzini
2020-08-05 8:39 ` Dr. David Alan Gilbert
2020-08-05 8:49 ` Paolo Bonzini
2020-08-05 9:05 ` Daniel P. Berrangé
2020-08-05 9:11 ` cleanups with long-term benefits Cornelia Huck
2020-08-05 10:08 ` Daniel P. Berrangé
2020-08-05 10:24 ` Cornelia Huck
2020-08-05 16:23 ` Kevin Wolf
2020-08-05 16:46 ` Eduardo Habkost
2020-08-06 5:44 ` Markus Armbruster
2020-08-05 8:47 ` Cornelia Huck
2020-08-05 8:56 ` cleanups with long-term benefits (was Re: [PATCH] schemas: Add vim modeline) Markus Armbruster
2020-08-05 10:15 ` Alex Bennée
2020-08-05 16:04 ` John Snow
2020-08-06 4:58 ` Markus Armbruster
2020-08-05 8:42 ` Markus Armbruster
2020-08-03 18:10 ` John Snow
2020-08-03 18:16 ` Paolo Bonzini
2020-08-03 18:19 ` John Snow
2020-08-03 19:54 ` Nir Soffer
2020-08-03 20:48 ` John Snow
2020-08-03 9:50 ` Daniel P. Berrangé
2020-08-03 11:32 ` Markus Armbruster
2020-07-31 16:39 ` [PATCH] schemas: Add vim modeline Kevin Wolf
2020-07-30 15:11 ` Eric Blake
2020-07-30 20:53 ` John Snow
2020-07-30 20:56 ` John Snow
2020-07-31 7:15 ` Kevin Wolf
2020-07-31 8:48 ` Daniel P. Berrangé
2020-07-31 9:01 ` Markus Armbruster
2020-07-31 11:26 ` Kevin Wolf
2020-08-03 8:51 ` Markus Armbruster
2020-07-31 23:12 ` Nir Soffer
2020-08-03 12:16 ` Paolo Bonzini
2020-08-04 7:28 ` Markus Armbruster
2020-08-04 8:29 ` Alex Bennée
2020-09-07 13:54 ` Markus Armbruster
2020-07-30 13:14 ` Markus Armbruster
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=87k0ylz0ep.fsf@dusky.pond.sub.org \
--to=armbru@redhat.com \
--cc=abologna@redhat.com \
--cc=berrange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jasowang@redhat.com \
--cc=jsnow@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=stefanb@linux.ibm.com \
--cc=yuval.shaia.ml@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).