www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Iterating over modules

reply Satoshi <satoshi rikarin.org> writes:
Hi,
is there any way how to iterate over every module/submodule?

I have project like
Rikarin
Rikarin/AppKit
Rikarin/Drawing
Rikarin/Runtime
etc.

In every directory, I have package.d file where I include every 
.d file from the dir.

And the think what I want to do is to define UDA's like  Action, 
 Outlet, etc. for methods and generate runtime info for them.

I know I can use something like mixin(generate!...); in every 
file where I used that UDA's, but its not the best idea for me.
Feb 04 2016
next sibling parent Atila Neves <atila.neves gmail.com> writes:
On Thursday, 4 February 2016 at 15:45:03 UTC, Satoshi wrote:
 Hi,
 is there any way how to iterate over every module/submodule?

 I have project like
 Rikarin
 Rikarin/AppKit
 Rikarin/Drawing
 Rikarin/Runtime
 etc.

 In every directory, I have package.d file where I include every 
 .d file from the dir.

 And the think what I want to do is to define UDA's like 
  Action,  Outlet, etc. for methods and generate runtime info 
 for them.

 I know I can use something like mixin(generate!...); in every 
 file where I used that UDA's, but its not the best idea for me.
No, there isn't, and I feel your pain. The only way is to do something similar to what dtest does for unit-threaded, i.e. have a 1st run-time that reads all directories and writes the equivalent source for you, or simply write it by hand and maintain whenever you add/delete a module: https://github.com/atilaneves/dtest https://github.com/atilaneves/unit-threaded Atila
Feb 04 2016
prev sibling next sibling parent Rikki Cattermole <alphaglosined gmail.com> writes:
On 05/02/16 4:45 AM, Satoshi wrote:
 Hi,
 is there any way how to iterate over every module/submodule?

 I have project like
 Rikarin
 Rikarin/AppKit
 Rikarin/Drawing
 Rikarin/Runtime
 etc.

 In every directory, I have package.d file where I include every .d file
 from the dir.

 And the think what I want to do is to define UDA's like  Action,
  Outlet, etc. for methods and generate runtime info for them.

 I know I can use something like mixin(generate!...); in every file where
 I used that UDA's, but its not the best idea for me.
I would suggest __traits(allMembers to grab public imports, but it is bugged. There was a fix I had, but it wasn't merged :(
Feb 04 2016
prev sibling parent reply Zoadian <no no.no> writes:
On Thursday, 4 February 2016 at 15:45:03 UTC, Satoshi wrote:
 Hi,
 is there any way how to iterate over every module/submodule?

 I have project like
 Rikarin
 Rikarin/AppKit
 Rikarin/Drawing
 Rikarin/Runtime
 etc.

 In every directory, I have package.d file where I include every 
 .d file from the dir.

 And the think what I want to do is to define UDA's like 
  Action,  Outlet, etc. for methods and generate runtime info 
 for them.

 I know I can use something like mixin(generate!...); in every 
 file where I used that UDA's, but its not the best idea for me.
disclaimer: I don't know if this works. enum fileContent = import(__FILE__); parse imports and repeat this recursivly for all found imports
Feb 04 2016
parent Chris Wright <dhasenan gmail.com> writes:
On Thu, 04 Feb 2016 16:57:09 +0000, Zoadian wrote:

 enum fileContent = import(__FILE__);
 
 parse imports and repeat this recursivly for all found imports
The path for module imports is not the same as the path for file imports, so this might not do everything you want.
Feb 04 2016