How to get all modules in a package at CT?
mw
m at g.c
Thu Oct 5 18:40:36 UTC 2023
On Saturday, 24 November 2018 at 15:21:57 UTC, Anonymouse wrote:
> 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.
How to list unknown sub-modules? (and not walking the source tree
dir). Is there a compile time solution to this problem?
Thanks.
More information about the Digitalmars-d-learn
mailing list