digitalmars.D.bugs - [Issue 19590] New: Impossible to iterate imported packages with
- d-bugmail puremagic.com (35/35) Jan 15 2019 https://issues.dlang.org/show_bug.cgi?id=19590
https://issues.dlang.org/show_bug.cgi?id=19590 Issue ID: 19590 Summary: Impossible to iterate imported packages with allMembers. Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: default_357-line yahoo.de Repro: module foo; import std.stdio; import std.string; // This will indicate the existence of a package "std". pragma(msg, __traits(allMembers, foo).stringof); // This, however, will not indicate two modules "stdio" and "string", but rather some other symbols, whose source is unclear. pragma(msg, __traits(allMembers, std).stringof); Furthermore, even if this worked it would not give an avenue to explore imports by *other* packages, since, for instance, "std.stdio.std" is not a legitimate symbol even if std.stdio was imported. For this reason, I believe that allMembers should never return packages, only complete modules. In other words, __traits(allMembers, foo) should return "std.stdio" and "std.string". Complication: what about renamed imports, such as import std.stdio : print = writefln;? They don't show up either, and it's not clear how they *should* show up. Make them appear as a member "print" of the current module, and it becomes difficult to determine their source module. A possible solution may be traits such as isImport and getDeclaredIdentifier. --
Jan 15 2019