Iterate all visible symbols, even from imported modules

Lodovico Giaretta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jul 18 14:19:45 PDT 2016


On Monday, 18 July 2016 at 21:12:38 UTC, Meta wrote:
> On Monday, 18 July 2016 at 13:00:16 UTC, Lodovico Giaretta 
> wrote:
>> As per title, is it possible to iterate all visible symbols of 
>> the current module and of all imported modules and packages? 
>> My aim is to find everything in scope that has a specific UDA.
>>
>> module foo;
>>
>> import std.stdio, std.array, std.algorithm;
>>
>> void bar(){}
>>
>> struct S{}
>>
>> void main()
>> {
>>     // prints ["object", "std", "bar", "S", "main"]
>>     // how do I discover that "std" is a package?
>>     writeln([__traits(allMembers, foo)]);
>>
>>
>>     // prints ["object", "core", "std", "KeepTerminator", 
>> "GCC_IO", ... ]
>>     // strange thing: it looks the same even if I remove all 
>> imports other than std.stdio
>>     writeln([__traits(allMembers, foo.std)]);
>> }
>>
>> Thank you in advance.
>
> This answer to a similar question on StackOverflow may be 
> useful:
>
> http://stackoverflow.com/questions/25555329/d-finding-all-functions-with-certain-attribute/25560800#25560800

Wow!
Looks exactly what I was looking for. I'll give this a try as 
soon as possible.
Thank you.


More information about the Digitalmars-d-learn mailing list