How does one determine the UDAs of all symbols contained in a given module?

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 19 02:25:25 PDT 2017


On Wednesday, 19 July 2017 at 07:29:55 UTC, Andrew Edwards wrote:
> Given a module (somepackage.somemodule) how does one 
> programmatically determine the symbols contained therein and 
> associated UDAs?
>
> Where symbol is a variable, function, UDT, etc... is this 
> possible?
>
>     foreach (symbol; somepackage.somemodule) {
>         writeln(symbol.name, " attributes :")
>         foreach(attribute; symbol) {
>             writeln("\t", attribute);
>         }
>     }
>
> I've looked at std.traits but for the most part the 
> functionality I saw there only allowed me to grab attributes I 
> already know of from symbols I already know... for instance:
>
>     @("bold") string boldText;
>     getUDAs!(boldText, "bold");
>
> This also does not allow retrieving attributes from functions 
> with void return-type. So this wouldn't work:
>
>     @("bold") void decorateText(ref string data);
>     getUDAs!(decorateText, "bold");
>     // Error: cannot deduce function from arguments types 
> !()(void, string);
>
> What I'd like to do is open a module and evaluate each 
> variable, instance variable, member variable, function, member 
> function, etc... to see what UDAs they carry.
>
> Please provide code sample or point me toward the appropriate 
> documentation. Again, I've looked at std.traits 
> (https://dlang.org/phobos/std_traits.html) and the related 
> implementation 
> (https://github.com/dlang/phobos/blob/master/std/traits.d#L7378-L7760) but found nothing that would help me toward this end... or maybe I've missed something?
>
> Thanks,
> Andrew

You'll want to use https://dlang.org/spec/traits.html#getMember 
in conjunction with 
https://dlang.org/spec/traits.html#getAttributes.

Have a look some of the projects on github e.g. 
https://github.com/kaleidicassociates/excel-d/blob/master/source/xlld/wrap.d#L686



More information about the Digitalmars-d-learn mailing list