Open p0nce opened 1 year ago
I think we could go with something like reserving underscore prefixed keys to be always comments - thoughts @Geod24 ?
On the other hand we could also start supporting regular JS-style comments. However right now there are most likely development apps reading dub.json files manually to look for certain keys, so we wouldn't want to break those. To properly read what the DUB recipe does you should rather use dub describe
or at least dub convert
, but both of those are still way too slow, taking up possibly several hundred milliseconds - so it's not feasible to expect users to use them in all cases right now.
Personally I think JS-style comments would be the most intuitive and easy to understand form inside JSON files. However I think the slowness of dub convert
and dub describe
is what I would consider a blocker for this feature. (as well as, of course, the dub registry also needing to support it)
both of those are still way too slow, taking up possibly several hundred milliseconds - so it's not feasible to expect users to use them in all cases right now.
Yes, that's indeed what happens here, in addition. The comments here are intended for people copying the recipe from examples. (btw the newer DUB is amazing with the builtin schema and colors!)
I think underscores (or some other prefix) makes sense as a stopgap measure. As a long term solution, either JSON5 or YAML ? :)
Can we add comment
to the list? This is probably very common, and changing those to _comment
is silly.
I would also want a "comment" key to be accepted. :) this can be nice semantic information for displaying dub.json also eventually
One of the issue I have with comment
is that it can only be used once. The new dub parser will issue a warning on duplicated keys and fall back to the old parser (which does not check fields).
So if I have more than one comment in a json, i have to call them _comment1
, _comment2
etc? I hope not...
I need to see, the error currently comes from the YAML parser, it's not something we control. But no, we're just going to flat out ignore _
fields.
Wouldn't it be possible to also flat out ignore comment
fields?
Personally I can live with _comment
, it's also a solution if someone really wants to extend dub.json format for their build (a bad idea, I learned)
Why not use just dub.sdl
- it is much more readable and support comments? :)
Many reasons:
I think at some point Dub started using a YAML parser for dub.json
. YAML is a superset of JSON so existing files "just work".
But this also means you can now just use YAML syntax, including comments. Right?
Well YAML is not a superset, since multiple keys with same name do not parse.
The problem is we have a build tool (necessary to do Universal Builds on macOS and much other stuff) that read some keys from dub.json
. It does it using std.json
parser. dub describe
was too slow for this. I can't be the only one that implements dub.json based tooling.
This changes pushed me to have the build tool include the (relatively complicated and less maintained) sdlang-d
parser, so we will be able to move to SDLang (and not by choice). Comments are not a big issue, but still the repercussion of the decision to go SDLang instead of not doing anything never quite stops. I'm not quite ready to add a third parser.
I think Dub should be the only software parsing Dub configuration files. Trying to do it any other way is where the problems start. If we start saying "we can't change dub.sdl/dub.json because it will break p0nce's parser", it will be the start of the end of days :)
If it can't use dub describe
, perhaps your tool could use Dub as a library. Would that work? If not then I think Dub should be refactored to allow this.
there are a bunch of tools that parse dub.json, although the recommended approach to parse the dub.json file (and dub.sdl) is by parsing the output of dub convert --format=json
, which also works with json input. However the problem with this is that it's super slow since it does all the dub startup stuff.
Editors like IntelliJ parse and build a tree that you can modify for JSON files, including for dub.json.
We shouldn't be introducing a new syntax feature for documented file formats like JSON.
OK, but therefore we should not have made Dub use a YAML parser for dub.json
, right?
@CyberShadow first of all, that's a bit much, it was said when SDLang was introduced that JSON would always be supported.
And that you could use comments with "comment"
key. And now, valid JSON is rejected :) so break of given word.
Anyway, because the issue is small, I think a good way would just be an escape hatch like "_comment1"
in the YAML parser.
(The first thing users do when they come to a D framework is duplicate an example and keep the path-based dependencies. So the example break. The comments are here to make them understand how to use ~>
instead.)
I'm a bit wary for frequently duplicated keys, like "versions". Need to test that. (EDIT: it's better now, multiple "versions" was silently failing in the first place)
EDIT: Other than that, the new YAML parser does manages the schema internally! It is well worth it.
Former DUB doesn't warn on multiple "versions" keys, but the new DUB does. And the new one is more correct, since the second key would silently erase the first in former DUB. So this dupe key case was much improved by the move to single-keys.
"versions": ["a"],
"versions": ["b"],
New message:
Warning Error was: dub.internal.dyaml.composer.ComposerException@source\dub\internal\dyaml\composer.d(370): Key 'versions' appears multiple times in mapping (first: file C:\Users\guill\Desktop\Dplug\examples\distort\dub.json,line 13,column 5)
System information
Bug Description
DUB complains about non-existent keys in the schema, even those called
"comment"
. But those JSON comments are there to avoid mistakes for the users of the project.How to reproduce?
Build this project => https://github.com/AuburnSounds/Dplug/tree/master/examples/ms-encode who has a "comment-stuff" key. Keys named just "comment" could be in the schema, and ignored.
Expected Behavior
A special way to write comment in dub.json, like we were advised to do. I don't want to go
.sdl
, it would disrupt users more.Logs