From 2f0743449ddd5ba948defb277836be4c34f15497 Mon Sep 17 00:00:00 2001
From: Basile Burg <basile.b@gmx.com>
Date: Tue, 2 May 2017 21:16:34 +0200
Subject: [PATCH] ddoc insertion, add support for templated enums

---
 dastworx/src/ddoc_template.d | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/dastworx/src/ddoc_template.d b/dastworx/src/ddoc_template.d
index c39a560a..cbe5ff31 100644
--- a/dastworx/src/ddoc_template.d
+++ b/dastworx/src/ddoc_template.d
@@ -68,7 +68,7 @@ public:
                         if (p.name.text != "")
                             writeln(" ", c1, "     ", p.name.text, " = <description>");
                         else
-                            writeln(" ",c1, "     __param", i, " = <description>");
+                            writeln(" ", c1, "     __param", i, " = <description>");
                     }
                 }
             }
@@ -108,9 +108,21 @@ public:
         visitTemplateOrAggregate(decl);
     }
 
+    override void visit(const(AutoDeclarationPart) decl)
+    {
+        if (decl.templateParameters)
+            visitTemplateOrAggregate(decl);
+    }
+
     private void visitTemplateOrAggregate(T)(const(T) decl)
     {
-        if (decl.name.line == _caretline)
+        size_t line;
+        static if (__traits(hasMember, T, "name"))
+            line = decl.name.line;
+        else
+            line = decl.identifier.line;
+
+        if (_caretline == line)
         {
             writeln("/", c2, "\n ", c1, " <short description> \n ", c1, " \n ", c1, " <detailed description>\n ", c1);
 
@@ -138,7 +150,7 @@ public:
             writeln(" ", c1, "/");
 
         }
-        else if (decl.name.line > _caretline)
+        else if (line > _caretline)
             return;
         decl.accept(this);
     }
@@ -195,3 +207,10 @@ unittest
     }.parseAndVisit(2);
 }
 
+unittest
+{
+    q{ module a;
+       enum trait(alias Variable) = whatever;
+    }.parseAndVisit(2);
+}
+