diff --git a/libdparse b/libdparse index b64fb8c..e8d87d6 160000 --- a/libdparse +++ b/libdparse @@ -1 +1 @@ -Subproject commit b64fb8c91efa17a895567403969d4fc87adaa42a +Subproject commit e8d87d6791890176ce5077f1c079d0453d45f02a diff --git a/src/astprinter.d b/src/astprinter.d index 89411c3..6828b92 100644 --- a/src/astprinter.d +++ b/src/astprinter.d @@ -194,7 +194,7 @@ class XMLPrinter : ASTVisitor override void visit(const ClassDeclaration classDec) { output.writeln(""); - output.writeln("", classDec.name.text, ""); + writeName(classDec.name.text); writeDdoc(classDec.comment); classDec.accept(this); output.writeln(""); @@ -263,7 +263,7 @@ class XMLPrinter : ASTVisitor override void visit(const Declarator declarator) { output.writeln(""); - output.writeln("", declarator.name.text, ""); + writeName(declarator.name.text); writeDdoc(declarator.comment); declarator.accept(this); output.writeln(""); @@ -282,11 +282,23 @@ class XMLPrinter : ASTVisitor output.writeln(""); writeDdoc(enumDec.comment); if (enumDec.name.type == tok!"identifier") - output.writeln("", enumDec.name.text, ""); + writeName(enumDec.name.text); enumDec.accept(this); output.writeln(""); } + override void visit(const AnonymousEnumMember enumMember) + { + output.writeln(""); + writeDdoc(enumMember.comment); + if (enumMember.type !is null) + visit(enumMember.type); + output.write("", enumMember.name.text, ""); + if (enumMember.assignExpression !is null) + visit(enumMember.assignExpression); + output.writeln(""); + } + override void visit(const EnumMember enumMem) { output.writeln(""); @@ -378,7 +390,7 @@ class XMLPrinter : ASTVisitor override void visit(const FunctionDeclaration functionDec) { output.writeln(""); - output.writeln("", functionDec.name.text, ""); + writeName(functionDec.name.text); writeDdoc(functionDec.comment); if (functionDec.hasAuto) output.writeln(""); @@ -510,7 +522,7 @@ class XMLPrinter : ASTVisitor override void visit(const InterfaceDeclaration interfaceDec) { output.writeln(""); - output.writeln("", interfaceDec.name.text, ""); + writeName(interfaceDec.name.text); writeDdoc(interfaceDec.comment); interfaceDec.accept(this); output.writeln(""); @@ -635,7 +647,7 @@ class XMLPrinter : ASTVisitor { output.writeln(""); if (param.name.type == tok!"identifier") - output.writeln("", param.name.text, ""); + writeName(param.name.text); foreach (attribute; param.parameterAttributes) { output.writeln("", str(attribute), ""); @@ -732,7 +744,7 @@ class XMLPrinter : ASTVisitor override void visit(const StructDeclaration structDec) { output.writeln(""); - output.writeln("", structDec.name.text, ""); + writeName(structDec.name.text); writeDdoc(structDec.comment); structDec.accept(this); output.writeln(""); @@ -778,7 +790,7 @@ class XMLPrinter : ASTVisitor writeDdoc(templateDeclaration.comment); output.writeln(""); - output.writeln("", templateDeclaration.name.text, ""); + writeName(templateDeclaration.name.text); visit(templateDeclaration.templateParameters); if (templateDeclaration.constraint !is null) visit(templateDeclaration.constraint); @@ -910,7 +922,7 @@ class XMLPrinter : ASTVisitor { output.writeln(""); if (unionDeclaration.name != tok!"") - output.writeln("", unionDeclaration.name.text, ""); + writeName(unionDeclaration.name.text); if (unionDeclaration.templateParameters !is null) visit(unionDeclaration.templateParameters); if (unionDeclaration.constraint !is null) @@ -952,6 +964,7 @@ class XMLPrinter : ASTVisitor override void visit(const AliasInitializer aliasInitializer) { mixin (tagAndAccept!"aliasInitializer"); } override void visit(const AliasThisDeclaration aliasThisDeclaration) { mixin (tagAndAccept!"aliasThisDeclaration"); } + override void visit(const AnonymousEnumDeclaration anonymousEnumDeclaration) { mixin (tagAndAccept!"anonymousEnumDeclaration"); } override void visit(const ArgumentList argumentList) { mixin (tagAndAccept!"argumentList"); } override void visit(const Arguments arguments) { mixin (tagAndAccept!"arguments"); } override void visit(const ArrayInitializer arrayInitializer) { mixin (tagAndAccept!"arrayInitializer"); } @@ -1083,6 +1096,11 @@ class XMLPrinter : ASTVisitor '\"' : """, '\'' : "'"]); } + private void writeName(string name) + { + output.write("", name, ""); + } + private void writeDdoc(string comment) { if (comment is null) return; diff --git a/src/ctags.d b/src/ctags.d index 5ea435b..0968b5f 100644 --- a/src/ctags.d +++ b/src/ctags.d @@ -119,11 +119,6 @@ class CTagsPrinter : ASTVisitor override void visit(const EnumDeclaration dec) { - if (dec.name == tok!"") - { - dec.accept(this); - return; - } tagLines ~= "%s\t%s\t%d;\"\tg%s\n".format(dec.name.text, fileName, dec.name.line, context); auto c = context; @@ -147,6 +142,12 @@ class CTagsPrinter : ASTVisitor context = c; } + override void visit(const AnonymousEnumMember mem) + { + tagLines ~= "%s\t%s\t%d;\"\te%s\n".format(mem.name.text, fileName, + mem.name.line, context); + } + override void visit(const EnumMember mem) { tagLines ~= "%s\t%s\t%d;\"\te%s\n".format(mem.name.text, fileName, diff --git a/src/outliner.d b/src/outliner.d index 2cb5529..1c97cb6 100644 --- a/src/outliner.d +++ b/src/outliner.d @@ -38,6 +38,21 @@ class Outliner : ASTVisitor finish(); } + override void visit(const AnonymousEnumMember enumMem) + { + printIndentation(); + if (enumMem.type !is null) + { + auto app = appender!(char[])(); + auto f = new Formatter!(typeof(app))(app); + f.format(enumMem.type); + output.writeln("enum ", app.data, " ", enumMem.name.text, " : ", enumMem.name.line); + } + else + output.writeln("enum ", enumMem.name.text, " : ", enumMem.name.line); + finish(); + } + override void visit(const EnumMember enumMem) { printIndentation(); @@ -127,11 +142,7 @@ class Outliner : ASTVisitor auto f = new Formatter!(typeof(app))(app); f.format(variableDeclaration.type); } - app.put(" "); - app.put(d.name.text); - app.put(" : "); - app.put(to!string(d.name.line)); - output.writeln(app.data); + output.writeln(app.data, " ", d.name.text, " : ", d.name.line); } finish(); } diff --git a/src/symbol_finder.d b/src/symbol_finder.d index 32ef86b..4af1ff1 100644 --- a/src/symbol_finder.d +++ b/src/symbol_finder.d @@ -54,12 +54,16 @@ class FinderVisitor : ASTVisitor override void visit(const EnumDeclaration dec) { - if (dec.name == tok!"") - dec.accept(this); - else if (dec.name.text == symbolName) + if (dec.name.text == symbolName) output.writefln("%s(%d:%d)", fileName, dec.name.line, dec.name.column); } + override void visit(const AnonymousEnumMember member) + { + if (member.name.text == symbolName) + output.writefln("%s(%d:%d)", fileName, member.name.line, member.name.column); + } + override void visit(const EnumMember member) { if (member.name.text == symbolName)