On Saturday, 24 November 2018 at 08:44:19 UTC, Domain wrote:
I have a package named command, and many modules inside it, such as command.build, command.pack, command.help... I want to get all these modules at compile time so that I know what command is available.

If you just want static if expressions of whether *known* modules are available or not, then test if __traits(identifier, package.module) compiles.

---

// Two-step workaround for https://issues.dlang.org/show_bug.cgi?id=19409 enum hasBuild = __traits(compiles, __traits(identifier, command.build)); enum hasPack = __traits(compiles, __traits(identifier, command.pack)); enum hasHelp = __traits(compiles, __traits(identifier, command.help));

static if (hasBuild) { /* ... */ }
static if (hasPack) { /* ... */ }
static if (hasHelp) { /* ... */ }

---

__traits(compiles, { import package.module; }) mostly works, but I ran into problems when the module was available and merely did not compile.

If you want to iterate the package for modules imported in it, I'm not sure. __traits(allMembers, package) will list names of imported packages but not which modules.

Reply via email to