On Tuesday, 25 September 2018 at 14:15:32 UTC, Dominikus Dittes
Scherkl wrote:
On Tuesday, 25 September 2018 at 13:03:30 UTC, FeepingCreature
wrote:
I'm playing with a branch of DMD that would warn on unused
imports:
https://github.com/FeepingCreature/dmd/tree/feature/Issue-3507-warn-on-unused-imports
Two problems have arisen.
First:
import std.stdio;
void foo(T)() { writeln("Hello World"); }
foo.d: Warning: unused import
To be fair, it's not *wrong*: if you remove the import, the
module itself compiles just fine. In any case, it's trivial to
instead move the import into the template.
The real problem is this:
import std.format;
class TestException(T) : FormatException { }
Now I can't move the import inside the template, because it's
needed at the point of instantiation, but not inside the
template scope *per se*.
I could require the class to be written as
template TestException(T) {
import std.format;
class TestException : FormatException { }
}
but that's kind of terrible.
I've been working around this for now, with import std.format
: FormatException, but I'm not really happy with it.
Any ideas?
Doesn't the "from" idiom work?
I'm not sure if it is allowed at the template declaration
template from(string moduleName)
{
mixin("import from = " ~ moduleName ~ ";");
}
class TestException(T) from!"std.format".FormatException
: FormatException
{
}
class TestException(T) : from!"std.format".FormatException?
That should work, but it's kind of a big step. In any case, I'll
never get a weird hacky template like that through code review :)
Might as well make import an expression - class TestException(T)
: (import std.format).FormatException. In any case, it's probably
not viable to solve the problem that a warning has a false
positive by introducing a workaround in the language - imo,
that'd rather mean the warning just isn't viable.
(It's so useful, though!)
Maybe stick the info in -v or -deps?