Import all?

Jonathan M Davis jmdavisProg at gmx.com
Thu Jul 18 00:16:19 PDT 2013


On Thursday, July 18, 2013 08:45:25 JS wrote:
> On Wednesday, 17 July 2013 at 17:51:15 UTC, Jonathan M Davis
> 
> wrote:
> > On Wednesday, July 17, 2013 11:34:56 JS wrote:
> >> Is is possible to import all modules using something import
> >> a.b.*;?
> >> 
> >> I'd like to partition some modules up into smaller pieces to
> >> simplify modification(reduce scrolling) but, of course, this
> >> increases the number of imports drastically.
> > 
> > This has been implemented in git master:
> > 
> > http://wiki.dlang.org/DIP37
> > 
> > - Jonathan M Davis
> 
> Thanks, I've updated the compiler to 2.063.2 and made my
> hierarchy like
> 
> lib/package.d
> lib/mod.d
> lib/dir1/package.d
> lib/dir1/a.d
> lib/dir1/b.d
> lib/dir2/package.d
> lib/dir2/c.d
> 
> each package.d file publically imports all sub packages(by
> chaining package imports and importing same directory modules):
> 
> lib/package.d:
> module Package;
> public import mod.d;
> public import dir1.Package;
> public import dir2.Package;
> 
> lib/dir1/package.d;
> module dir1.Package;
> public import dir1.a;
> public import dir2.b;
> 
> 
> etc....
> 
> This should allow me to import any resolution I need. e.g., if I
> want the whole library I just import lib/package.d.
> 
> 
> When I do this dmd can't find my module files.
> 
> I have only included the root dir(lib) in sc.ini, hopefully I do
> not need to include every single subdirectory in lib for it to
> work ;/ ? (this would be better to be auto generated)

Normally, nothing like that has any business in sc.ini. sc.ini is supposed to 
be for the standard stuff, not your personal stuff. You should be passing it to 
the compiler using the appropriate compiler flags (-I in this case IIRC). Now, 
you obviously _can_ stick it all in your sc.ini file you want to, but I believe 
that that would generally be considered bad practice.

As for your actual files, you're making several mistakes.

1. It's not module Package. Not only is it generally considered bad practice 
to use any uppercase letters in a module or package name, but the module name 
for a package.d file does not include package. So, for instance, if 
std.datetime were a package with std/datetime/package.d in it, then that 
package.d file would have module std.datetime; at the top.

2. Maybe it's just a typo, but you have some imports which end with .d, which 
isn't legal.

3. A top-level package.d won't work. There's no name to give it to import and 
no name to give its module declaration. Also, I don't believe that the top 
level is considered a package in the first place. I believe that the only 
reason the package modifer works on the top level is the fact that package is 
outright broken right now ( http://d.puremagic.com/issues/show_bug.cgi?id=143 
) and is pretty much treated as public. Once that's been fixed, any attempt at 
using package at the top level will fail.

I might be missing something else, but I think that your main problem is how 
you name the module declarations in your package.d files.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list