dub icon indicating copy to clipboard operation
dub copied to clipboard

Use configy library to parse dub.json file

Open Geod24 opened this issue 3 years ago • 23 comments

Over the last few years, I've been working on a project that had growing configuration needs. We started by manually parsing YAML files and using dyaml, then one day, when the application was sizeable, all the manual work was turned into a library.

The goal was simple: Using a declarative approach (using D native value types, so no classes) and minimizing YAML dependency. This project was separated in its own library, configy.

One of the major advantages of Configy is that it produces good error messages, even with user-defined types. User-defined types with a fromString, string ctor, etc... can throw Exceptions, which the library then catches and wrap in an Exception that contains context information. It also contains a "strict mode" which will warn users if they use a key that isn't valid. I understand that the original intent of not erroring out on keys to preserve forward compatibility, but experience has shown that's causing more trouble than it's worth. Plus, we have ToolchainRequirements now.

Geod24 avatar Jun 20 '22 21:06 Geod24

There's an unexpected (at least for me) amount of adjustments to configy in the second commit (de7a2b4197aef1af88bc400620272f2dbd958ba6). Not a deal breaker, of course, but I would prefer if you could split that commit into several, each with more information about why each change was needed and why it can't be upstreamed.

PetarKirov avatar Jun 21 '22 06:06 PetarKirov

Also, I understand that adding Yaml support via this library was easy, but I think it's better to do it in a follow up change, and add support for SDL before that, in this PR.


Aside question: can configy be used to generate both CLI --help text and html documentation? For example, here's how Yarn does it:

  • https://github.com/yarnpkg/berry/blob/master/packages/yarnpkg-core/sources/Configuration.ts
  • https://github.com/yarnpkg/berry/blob/master/packages/gatsby/src/utils/schemaUtils.tsx
  • https://github.com/yarnpkg/berry/blob/master/packages/gatsby/src/pages/configuration/yarnrc.js

PetarKirov avatar Jun 21 '22 06:06 PetarKirov

Interesting. Does this mean support for package.yaml files in the future?

Herringway avatar Jun 21 '22 06:06 Herringway

There's an unexpected (at least for me) amount of adjustments to configy in the second commit

There's actually 3 adjustments in that commit:

  • Improve support for Converter: Previously a converter would just accept a YAML Node. This wasn't great for 2 reasons: 1) recursion was impossible (configy purposedly only expose a way to parse the top level), and because error reporting was suboptimal (e.g. the path to the field was lost). This has been improved, to a point it works with dub, but not to a point I am satisfied with it. I'm still experimenting with a few approach. The feature itself will be upstreamed. In addition to the Converter improvement, fromYAML is also supported.

  • One core design of the library is that one struct definition should lead to one possible format. In practice, with fromYAML, you can work around that, but I tried to stay clear of being "too smart". However some part of the recipe (dependencies I believe, maybe other parts) support a dual approach, where one can write "dependencies": [ { "name": "vibe-d" } ] or "dependencies": { "vibe-d": { } ]. To support both, I had to change the way the @Key UDA was handled. That is not something I want to upstream.

  • Suffixes. The most fundamental principle in configy is that field names are static. But that's not the case for dub.json, since it uses suffices (e.g. lflags-x86). Generating all possible combination was not a reasonable approach (I toyed with it, but meh), so I hacked support for it in Configy. That is definitely not something I want to upstream.

Geod24 avatar Jun 21 '22 10:06 Geod24

Interesting. Does this mean support for package.yaml files in the future?

It would be at most 10 lines of code to do so, but that is not on the roadmap for now. The plan is simply to improve UX by providing better error messages. Going for dub.json was an experiment which turned out quite well. Those changes could be made to dub.selections.json and dub.settings.json too.

Geod24 avatar Jun 21 '22 10:06 Geod24

Aside question: can configy be used to generate both CLI --help text and html documentation?

CLI: No. Configy is not an argument parsing library, just a config parsing one. There's a tiny bit of argument parsing because of it's heritage from Agora, but that's minimal and can be removed. I had in mind to integrate it with argparse though, which takes a similar approach, but for argument parsing.

HTML documentation: That's definitely on the menu. Currently there is no good way to get documentation for a symbol, but that's something that has been discussed, and I'm considering looking into it myself. If that was added, configy could have a simple way to generate all relevant documentation with just one function call.

Geod24 avatar Jun 21 '22 10:06 Geod24

Note that this is a draft for multiple reasons:

  • Gauge interest. Personally I think this would be wonderful to have, but I've felt that way about other features in the past and met strong resistance, so I needed to measure;
  • Give people the opportunity to test it, if they wanted;
  • Give a basis for me to explain all the bug fixes I'm about to do;

Regarding 3, I noticed a few things when I started to implement this:

  • https://github.com/dlang/dub/pull/2279 : Not technically required, but when I added support for it in Configy, I took out the hyphen. Then tested, and realized the hyphen was expected, for no valid reason;
  • https://github.com/dlang/dub/pull/2266 : This allowed me to have only one place to handle the same logic;
  • https://github.com/dlang/dub/pull/2276 : Noticed a difference between the JSON and YAML parser, so fixed it;
  • https://github.com/dlang/dub/pull/2277 : Likewise, too much logic in the parser is not compatible with Configy;

Now for the things left to do:

  • There is a direct JSON dependency here: https://github.com/dlang/dub/blob/79e312d042f66a0ea56879f13c2167bc66d35146/source/dub/packagesuppliers/packagesupplier.d#L46 IMO this has to go
  • When doing dub build in dub itself, dub rescans and parse all the packages in its cache no less than 3 times (all packages, meaning also the ones it doesn't need).

Geod24 avatar Jun 21 '22 11:06 Geod24

  • Gauge interest. Personally I think this would be wonderful to have, but I've felt that way about other features in the past and met strong resistance, so I needed to measure;

I am solidly against adding external dependencies to dub.

However, I think it is a great PR to discover possible improvements!

rikkimax avatar Jun 21 '22 11:06 rikkimax

I am solidly against adding external dependencies to dub.

If we vendor dependencies (like I did with configy itself), that problem is gone, isn't it ?

Geod24 avatar Jun 21 '22 11:06 Geod24

I am solidly against adding external dependencies to dub.

If we vendor dependencies (like I did with configy itself), that problem is gone, isn't it ?

Only if it is in this repository. Outside you still have to get at it in some form.

This wouldn't be unique, there is the vibecompat folder for instance which originates from vibe.d.

rikkimax avatar Jun 21 '22 11:06 rikkimax

Only if it is in this repository.

That's what I meant by vendoring. But I think that's distracting from the aim of this PR: Do we want to move in that direction, weed out the Json dependency and have better error reporting on all our config files ? How we handle the dependency is second to the question of "do we go ahead with an approach?".

Geod24 avatar Jun 21 '22 11:06 Geod24

Right, d-yaml is not -dip1000 compatible...

Geod24 avatar Jun 21 '22 16:06 Geod24

source/dyaml/constructor.d(484): Error: `@safe` function `dyaml.constructor.constructOrderedMap` cannot call `@system` function `std.container.rbtree.redBlackTree!(Node).redBlackTree`
/usr/include/dmd/phobos/std/container/rbtree.d(1978):        `std.container.rbtree.redBlackTree!(Node).redBlackTree` is declared here
source/dyaml/constructor.d(490): Error: `@safe` function `dyaml.constructor.constructOrderedMap` cannot call `@system` function `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(Node).stableInsert`
/usr/include/dmd/phobos/std/container/rbtree.d(1264):        `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(Node).stableInsert` is declared here
source/dyaml/constructor.d(603): Error: `@safe` function `dyaml.constructor.constructMap` cannot call `@system` function `std.container.rbtree.redBlackTree!(Node).redBlackTree`
/usr/include/dmd/phobos/std/container/rbtree.d(1978):        `std.container.rbtree.redBlackTree!(Node).redBlackTree` is declared here
source/dyaml/constructor.d(608): Error: `@safe` function `dyaml.constructor.constructMap` cannot call `@system` function `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(Node).stableInsert`
/usr/include/dmd/phobos/std/container/rbtree.d(1264):        `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(Node).stableInsert` is declared here
source/dyaml/node.d(2486): Error: `@safe` function `dyaml.node.merge` cannot call `@system` function `dyaml.node.merge.canFind!(Pair[], Pair).canFind`
/usr/include/dmd/phobos/std/algorithm/searching.d(2535):        `dyaml.node.merge.canFind!(Pair[], Pair).canFind` is declared here
source/dyaml/representer.d(427): Error: `@safe` function `dyaml.representer.representPairs.hasDuplicates` cannot call `@system` function `std.container.rbtree.redBlackTree!(Node).redBlackTree`
/usr/include/dmd/phobos/std/container/rbtree.d(1978):        `std.container.rbtree.redBlackTree!(Node).redBlackTree` is declared here
source/dyaml/representer.d(431): Error: `@safe` function `dyaml.representer.representPairs.hasDuplicates` cannot call `@system` function `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(const(Node)).stableInsert`
/usr/include/dmd/phobos/std/container/rbtree.d(1264):        `std.container.rbtree.RedBlackTree!(Node, "a < b", false).RedBlackTree.stableInsert!(const(Node)).stableInsert` is declared here

Geod24 avatar Jun 21 '22 16:06 Geod24

@WebFreak001 : I've added a little unittest to show what errors look like. Obviously not the final form for testing, but it demonstrate our ability to easily check error messages for a given recipe. Here is what the two current tests will print:

image

The "Invalid SemVer format" has been annoying me for years.

Geod24 avatar Jun 21 '22 17:06 Geod24

For those interested in the first step, the libraries are being added in https://github.com/dlang/dub/pull/2310 and it can read dub.selections.json, which is an easier target than dub.json.

Geod24 avatar Jul 21 '22 11:07 Geod24

are the new errors/warnings gonna abort builds or only show some diagnostics for the user?

WebFreak001 avatar Jul 28 '22 13:07 WebFreak001

are the new errors/warnings gonna abort builds or only show some diagnostics for the user?

Anything in validate will abort the build. I'm trying to think of a deprecation mechanism, for example to enforce that users use path or version in dependencies, not both.

Anything else (unused fields) will just trigger a warning. However, because of https://github.com/dlang/dub/issues/2338 , it means building any random package could potentially trigger a lot of unrelated warnings depending on your .dub/packages/ content.

For example, dub doesn't depend on dud. When I built dub using this, I got 3 warnings because of a typo in dud's dub.json (fixed in https://github.com/symmetryinvestments/dud/pull/46). So I think that before this can be merged, I'm going to have to tackle #2338 . Which should also improve build time.

Geod24 avatar Jul 28 '22 13:07 Geod24

Rebased on top of https://github.com/dlang/dub/pull/2343 but still needs work as noted above.

Geod24 avatar Jul 28 '22 16:07 Geod24

shouldn't we hide errors in packages that are installed in the user's packages directory?

e.g. right now I get this message 3x:

/home/webfreak/.dub/packages/dud-1.1.1/dud/testdata/dub.json(3:1): excludeSourceFiles: Key is not a valid member of this section. There are 54 valid keys: name, version, description, homepage, authors, copyright, license, -ddoxFilterArgs, -ddoxTool, configurations, buildTypes, toolchainRequirements, subPackages, dependencies, dependencyBuildSettings, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions

WebFreak001 avatar Aug 03 '22 09:08 WebFreak001

@WebFreak001 : You probably need to pull, I fixed that yesterday.

Geod24 avatar Aug 03 '22 09:08 Geod24

Found a way to make it work without lazy loading, which I think is better anyway. Also fixed the documentation issue.

Geod24 avatar Aug 11 '22 00:08 Geod24

@WebFreak001 : Green / ready for another round of review.

Geod24 avatar Aug 12 '22 01:08 Geod24

Ah there's a minor issue with dflags, will fix soon.

Geod24 avatar Aug 12 '22 01:08 Geod24

Wow. Looks like this is ready to go.

Geod24 avatar Aug 22 '22 20:08 Geod24

first of all I checked which packages break now on DUB:

PKG prettyprint:	dub.json
PKG uim-server:	dub.json
PKG leveldb:	dub.json
PKG dash:	dub.json
PKG dxx:	tool/test/dub.json
PKG dxx:	tool/resources/templates/targets/plugin/dub.json
PKG dxx:	tool/resources/templates/targets/library/dub.json
PKG dxx:	tool/resources/templates/targets/host/dub.json
PKG dxx:	tool/resources/templates/targets/shell/dub.json
PKG dxx:	tool/resources/templates/model/application/dub.json
PKG dplug:	tools/presetbank/dub.json
PKG multihash:	dub.json
PKG rcdata:	dub.json
PKG belleglade:	example/dub.json
PKG shplib_d:	dub.json
PKG d-leveldb-comparator:	dub.json
PKG qte5:	dub.json
PKG d-leveldb:	dub.json
PKG bin2d:	dub.json

there are 14 individual packages breaking somehow. I just randomly looked at a few, but it looks like the new configy thing does not like duplicate keys. Instead of throwing an exception, we should only warn (this is with StrictMode.warn)

Additionally these are the regular warnings generated by StrictMode.warn, which are fine:


     Warning PKG ffmpeg-d:	dub.json(11:4): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(31:3): configurations[3].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(43:3): configurations[4].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(55:3): configurations[5].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(67:3): configurations[6].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(79:3): configurations[7].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(91:3): configurations[8].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(103:3): configurations[9].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(115:3): configurations[10].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(127:3): configurations[11].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG poodinis:	dub.json(139:3): configurations[12].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG iup:	dub.json(17:1): comment-lflags-posix-x86_64: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG scheme-d:	examples/repl/dub.json(3:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG botan:	dub.json(8:4): sourceFolders: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG xlsx:	dub.json(12:1): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG kdtl:	dub.json(6:2): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG nloptd:	dub.json(15:3): configurations[0].version: Key is not a valid member of this section. Did you mean: versions, versionFilters
     Warning PKG nloptd:	dub.json(20:3): configurations[1].version: Key is not a valid member of this section. Did you mean: versions, versionFilters
     Warning PKG dopenvg:	dub.json(5:1): email: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dopenvg:	demo_DvisualizationWT/dub.json(5:1): email: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dopenvg:	demo/dub.json(5:1): email: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG jaypha-inet:	dub.json(8:2): srcPaths: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG commonmark-d:	dub.json(4:4): comment-targetType: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG mathed:	dub.json(16:12): configurations[1].build: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dud:	testdata/dub.json(3:1): excludeSourceFiles: Key is not a valid member of this section. Did you mean: excludedSourceFiles
     Warning PKG dud:	pkgdescription/testfiles/conflicting_platform_json/dub.json(3:1): configuration-posix: Key is not a valid member of this section. Did you mean: configurations
     Warning PKG d-opts:	dub.json(1:2): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG de_window:	dub.json(26:3): subPackages[1].dependencies-linux: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG easyff-d:	dub.json(5:4): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG d_hdf5:	dub.json(7:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/changecachesize/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/changecachesize/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/cat/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/cat/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/stat/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/stat/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/jam/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/jam/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/diff/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/diff/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/jamtest/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/jamtest/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/importtest/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/importtest/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/import/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/import/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/dump/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/dump/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/ls/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/ls/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	tools/notyetfinished/binread/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	tools/notyetfinished/binread/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/read/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/read/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/select/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/select/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/alloc/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/alloc/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/rdwt/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/rdwt/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/attribute/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/attribute/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/write/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/write/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/tbit/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/tbit/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/chunk/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/chunk/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/stringatt/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/stringatt/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/compound/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/compound/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/tstring/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/tstring/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/group/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/group/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/extendwrite/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/extendwrite/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/extlink/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/extlink/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/gtraverse/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/gtraverse/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/tcpxcmpd/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/tcpxcmpd/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/ref2reg/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/ref2reg/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/unlimadd/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/unlimadd/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/reference/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/reference/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/groupvisit/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/groupvisit/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/giterate/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/giterate/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/traits/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/traits/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/sharedmesg/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/sharedmesg/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/drivers/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/drivers/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/transform/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/transform/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/notyetported/table/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/notyetported/table/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/szip/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/szip/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/myiterator/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/myiterator/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/subset/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/subset/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/checksum/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/checksum/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG d_hdf5:	examples/chunkread/dub.json(3:1): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions
     Warning PKG d_hdf5:	examples/chunkread/dub.json(6:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG tsv-utils:	dub.json(8:4): #: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG awebview:	dub.json(21:8): configurations[0]._sourceFiles-windows-x86: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG awebview:	dub.json(22:8): configurations[0]._sourceFiles-linux-x86: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG awebview:	dub.json(23:8): configurations[0]._sourceFiles-posix-x86_64: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG opensc:	dub.json(9:1): comment1-sourceFiles-windows-x86_64: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG opensc:	dub.json(10:1): comment2-sourceFiles-windows-x86_64: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG fuse-d:	dub.json(10:1): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG d-openai-gym:	dub.json(10:12): configurations[0].mainSouceFile: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG wayland:	examples/simple_egl/dub.json(20:3): dependencies[derelict-gles].comment: Key is not a valid member of this section. There are 45 valid keys: version, path, repository, optional, default, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG opencl:	dub.json(16:3): configurations[0].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG opencl:	dub.json(22:3): configurations[1].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG opencl:	dub.json(29:3): configurations[2].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG opencl:	dub.json(36:3): configurations[3].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG glue-dejector:	dub.json(15:1): _versions: Key is not a valid member of this section. Did you mean: version, versions, versionFilters
     Warning PKG cushion:	doc/dub.json(8:1): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG xcb-d:	dub.json(2:1): outputTarget: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dpq2:	dub.json(39:3): subPackages[0].sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG dpq2:	dub.json(50:3): subPackages[1].sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG dpq2:	dub.json(63:3): subPackages[2].sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG dexcel:	dub.json(10:1): __lflags: Key is not a valid member of this section. Did you mean: lflags
     Warning PKG karasunum:	dub.json(7:1): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG bancho-irc:	dub.json(9:1): uncomment for documentation generation: -ddoxTool: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG wayland-client-d:	dub.json(7:4): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG fpdf:	dub.json(8:2): srcPaths: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG bearlibterminal:	dub.json(16:1): copyFile-osx: Key is not a valid member of this section. Did you mean: copyFiles
     Warning PKG dubproxy:	dub.json(5:1): type: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	wrapper/dub.json(9:1): comment-libs-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	wrapper/dub.json(13:1): alternative_libname_if_no_dev_package_installed: libs-linux: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	wrapper/dub.json(14:1): alternative_libname_if_no_dev_package_installed: libs-osx: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	wrapper/dub.json(15:1): alternative_nonstandard_liblocation: lflags-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	deimos/dub.json(3:1): comment-libs-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	deimos/dub.json(7:1): alternative_libname_if_no_dev_package_installed: libs-linux: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	deimos/dub.json(8:1): alternative_libname_if_no_dev_package_installed: libs-osx: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tasn1:	deimos/dub.json(9:1): alternative_nonstandard_liblocation: lflags-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dext:	dub.json(11:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG dxx:	app/dub.json(24:4): dependencies-posix: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG dxx:	examples/advanced/dub.json(11:4): debugs: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dxx:	examples/plugin/dub.json(11:4): debugs: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG libnlopt:	dub.json(21:3): configurations[0].version: Key is not a valid member of this section. Did you mean: versions, versionFilters
     Warning PKG libnlopt:	dub.json(26:3): configurations[1].version: Key is not a valid member of this section. Did you mean: versions, versionFilters
     Warning PKG logd-html:	dub.json(2:1): target-type: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG gamut:	dub.json(27:12): configurations[3].comment: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dlua:	dub.json(7:2): targetTypes: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG fcgi-loop:	dub.json(6:2): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG cucumber-d:	examples/httpbin/dub.json(7:1): exculudedSourcePaths: Key is not a valid member of this section. Did you mean: excludedSourceFiles
     Warning PKG adr-terminalemulator:	dub.json(8:3): configurations[0].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG adr-terminalemulator:	dub.json(15:3): configurations[0].dFlags-windows: Key is not a valid member of this section. Did you mean: dflags
     Warning PKG adr-terminalemulator:	dub.json(31:3): configurations[1].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG adr-terminalemulator:	dub.json(51:3): configurations[2].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG adr-terminalemulator:	dub.json(68:3): configurations[3].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG adr-terminalemulator:	dub.json(74:3): configurations[3].dFlags-windows: Key is not a valid member of this section. Did you mean: dflags
     Warning PKG adr-terminalemulator:	dub.json(92:3): configurations[4].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG json:	dub.json(11:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG concepts:	dub.json(8:4): type: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dlangui:	dub.json(56:12): configurations[0].dependencies-posix: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG dlangui:	dub.json(81:12): configurations[3].dependencies-posix: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG ensure:	dub.json(14:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG workermanager:	dub.json(8:2): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG ws:	dub.json(7:1): targetFileName: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG zconfig:	dub.json(13:12): configurations[0].excludeSourceFiles: Key is not a valid member of this section. Did you mean: excludedSourceFiles
     Warning PKG dplug:	dub.json(50:12): subPackages[0].dependencies-osx: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG dplug:	dub.json(284:12): subPackages[19].dependencies-osx: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG dplug:	dub.json(288:12): subPackages[19].dependencies-linux: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG dplug:	tests/using-runtime/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	tests/using-runtime/dub.json(21:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/simple-mono-synth/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/simple-mono-synth/dub.json(17:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/clipit/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/clipit/dub.json(18:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/clipit/dub.json(37:4): comment: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/arpejoe/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/arpejoe/dub.json(17:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/distort/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/distort/dub.json(18:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/distort/dub.json(40:4): comment: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/poly-alias-synth/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/poly-alias-synth/dub.json(17:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/ms-encode/dub.json(1:4): $schema: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dplug:	examples/ms-encode/dub.json(17:4): comment-WARNING-READ-THIS-IS-IMPORTANT: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG memutils:	dub.json(6:1): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG optional:	dub.json(22:12): configurations[2].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG optional:	dub.json(29:12): configurations[3].buildType: Key is not a valid member of this section. Did you mean: buildOptions
     Warning PKG poodinis-proper-d-injector:	dub.json(26:3): configurations[2].description: Key is not a valid member of this section. There are 42 valid keys: name, platforms, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG cruddyorm:	dub.json(13:2): type: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG jaypha-base:	dub.json(7:2): srcPaths: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG w4d:	dub.json(6:4): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG g4d:	dub.json(8:4): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	wrapper/dub.json(10:1): version_identifiers_possible_one_of: Key is not a valid member of this section. Did you mean: version, versions, versionFilters
     Warning PKG sodium:	wrapper/dub.json(15:1): alternative_libname_if_no_dev_package_installed:_libs-linux: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	wrapper/dub.json(16:1): alternative_libname_if_no_dev_package_installed:_libs-osx: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	wrapper/dub.json(17:1): alternative_nonstandard_liblocation:_lflags-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	deimos/dub.json(3:1): version_identifiers_possible_one_of: Key is not a valid member of this section. Did you mean: version, versions, versionFilters
     Warning PKG sodium:	deimos/dub.json(8:1): alternative_libname_if_no_dev_package_installed: libs-linux: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	deimos/dub.json(9:1): alternative_libname_if_no_dev_package_installed: libs-osx: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sodium:	deimos/dub.json(10:1): alternative_nonstandard_liblocation:_lflags-posix: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG riverd-x11:	dub.json(12:1): platforms: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG d-profile-viewer:	dub.json(7:1): versons: Key is not a valid member of this section. Did you mean: version, versions, versionFilters
     Warning PKG cblas:	examples/gemmTest/dub.json(5:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG commando:	dub.json(11:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG commando:	examples/find/dub.json(17:4): sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG zug-tap:	examples/run_with_dub/dub.json(17:3): subPackages[0].sourcePath: Key is not a valid member of this section. Did you mean: sourceFiles, sourcePaths
     Warning PKG storageclassutils:	dub.json(5:4): soucePaths: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG karasux:	dub.json(8:1): target: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG rocksdb:	dub.json(8:2): libraries: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dinu:	dub.json(4:1): targetFileName: Key is not a valid member of this section. Did you mean: targetType, targetPath, targetName
     Warning PKG dinu:	dub.json(13:1): includePaths: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG tanya:	dub.json(18:1): dependencies-linux: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG tanya:	middle/dub.json(10:1): dependencies-linux: Key is not a valid member of this section. Did you mean: dependencies
     Warning PKG libmemcached:	dub.json(9:2): lib: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG subscribed:	dub.json(7:2): type: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG bindbc-icu:	testcases/betterc-build/dub.json(4:1): x-dflags: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG sqlite3:	dub.json(8:1): hompage: Key is not a valid member of this section. Did you mean: homepage
     Warning PKG glue-d:	indexer/dub.json(20:1): todo: Key is not a valid member of this section. There are 53 valid keys: name, description, homepage, authors, copyright, license, toolchainRequirements, configurations, buildTypes, -ddoxFilterArgs, -ddoxTool, subPackages, version, dependencies, systemDependencies, targetType, targetPath, targetName, workingDirectory, mainSourceFile, subConfigurations, dflags, lflags, libs, sourceFiles, sourcePaths, excludedSourceFiles, injectSourceFiles, copyFiles, extraDependencyFiles, versions, debugVersions, versionFilters, debugVersionFilters, importPaths, stringImportPaths, preGenerateCommands, postGenerateCommands, preBuildCommands, postBuildCommands, preRunCommands, postRunCommands, environments, buildEnvironments, runEnvironments, preGenerateEnvironments, postGenerateEnvironments, preBuildEnvironments, postBuildEnvironments, preRunEnvironments, postRunEnvironments, buildRequirements, buildOptions
     Warning PKG dco:	dub.json(13:1): buildrequirements: Key is not a valid member of this section. Did you mean: buildRequirements
     Warning PKG elfhook:	dub.json(4:4): buildType: Key is not a valid member of this section. Did you mean: buildTypes, buildOptions

The special $schema variable is used in a bunch of projects, we should probably allow that one to be in dub.json. (configures the editor with some JSON schema)

The reason why the warnings here are important is that the public API changed so that people using DUB as a library without changing their code now get exceptions when the JSON has invalid keys, which it previously just allowed. I think it might be a good idea to make new overloads taking in a required StrictMode parameter and deprecating the ones without one (and make them use StrictMode.ignore)

Additionally quite a lot of packages used some kind of non-standard commenting, like "comment": "..." or "comment-...": "...", maybe we should support those as well if we change the default behavior to throw.

Some packages (e.g. dplug being an important one in the D ecosystem) currently contain dependencies-* platform specifiers, which aren't supported yet, but in the parser were before just read and acknoledged and merged into regular dependencies. For all the build settings JSON keys we should probably rather print out a warning that they don't support platform specifiers yet, but also keep the values, like was done before. Right now configy instead discards them.

IMO this is a blocker for this PR, because things like dependencies-* at least happened 9 times in DUB packages published, but might have occurred much more often in non-public projects. This could in the worst case be causing silent breakage as optional dependencies are simply not being pulled in, altering how the built program will run.

gonna do code review tomorrow.

WebFreak001 avatar Aug 22 '22 23:08 WebFreak001

This is amazing data, thanks !

A few things:

first of all I checked which packages break now on DUB:

prettyprint seems fine with my build, so does uim-server. dxxx has some issues. leveldb doesn't build:

geod24@geod24-symmetry ~/.dub/packages/leveldb-1.16.0/leveldb % ~/projects/dlang/dub/bin/dub build
Error Main package must not have target type "sourceLibrary". Cannot build.
2 geod24@geod24-symmetry ~/.dub/packages/leveldb-1.16.0/leveldb % dub build
Main package must not have target type "sourceLibrary". Cannot build.

dash takes forever but parsing dub.json works, e.g.:

source/dash/utility/data/yaml.d(4,15): Error: unable to read module `yaml`
source/dash/utility/data/yaml.d(4,15):        Expected 'yaml.d' or 'yaml/package.d' in one of the following import paths:

I just randomly looked at a few, but it looks like the new configy thing does not like duplicate keys. Instead of throwing an exception, we should only warn (this is with StrictMode.warn)

It wouldn't surprise me, but randomly looking at them, I didn't encounter the problem. Can you point me to one package with the issue ?

The reason why the warnings here are important is that the public API changed so that people using DUB as a library without changing their code now get exceptions when the JSON has invalid keys, which it previously just allowed. I think it might be a good idea to make new overloads taking in a required StrictMode parameter and deprecating the ones without one (and make them use StrictMode.ignore)

Good point, will change.

The special $schema variable is used in a bunch of projects, we should probably allow that one to be in dub.json. (configures the editor with some JSON schema)

Can you point me to one use so I can add a test for it ?

Additionally quite a lot of packages used some kind of non-standard commenting [...]

I'm on the fence on this. Anything we come up with will be quite arbitrary.

Some packages (e.g. dplug being an important one in the D ecosystem) currently contain dependencies-* platform specifiers, which aren't supported yet, but in the parser were before just read and acknoledged and merged into regular dependencies.

Wait what ? How does that work ? And does it work with master ? I'll dig in the parsing code...

IMO this is a blocker for this PR [...]

Yep. Looking into it.

Geod24 avatar Aug 23 '22 00:08 Geod24

prettyprint seems fine with my build, so does uim-server.

Trying just dub build in the prettyprint source code with your commit e6a35055 I get:

$ ~/dev/dub/bin/dub build
Error Duplicate key found in mapping
file /tmp/prettyprint/dub.json,line 42,column 3

$ dub build
Fetching unit-threaded 2.0.4 (getting selected version)...
Performing "debug" build using /usr/bin/dmd for x86_64.
prettyprint 1.0.8: building configuration "library"...

with uim-server I get:

$ ~/dev/dub/bin/dub build
Error Duplicate key found in mapping
file /tmp/uim-server/dub.json,line 21,column 2

$ dub build
Failed to find any versions for package uim-bootstrap-vue, referenced by uim-server 0.19.6-commit.1.gf1f1726

for the dub binary I simply ran dub build without any flags inside your dub repository

WebFreak001 avatar Aug 23 '22 08:08 WebFreak001

How do you reckon we should approach this? I'm thinking of using Configy and falling back to old JSON parsing if any Exception is thrown. But the behavior needs to be the same for a correctly parsed file, so that is dependent on figuring out dependencies-*...

Geod24 avatar Aug 23 '22 10:08 Geod24

platform specifications are only supported on build settings, so I would suggest we should just allow them everywhere there, but print a warning when it's not implemented

WebFreak001 avatar Aug 23 '22 10:08 WebFreak001

platform specifications are only supported on build settings, so I would suggest we should just allow them everywhere there, but print a warning when it's not implemented

That would force us to turn everything into an associative array though.

Geod24 avatar Aug 23 '22 11:08 Geod24