diff --git a/dsymbol b/dsymbol index 50d813e..021df81 160000 --- a/dsymbol +++ b/dsymbol @@ -1 +1 @@ -Subproject commit 50d813eda2b2068cc3e681fec19ddbaef92cccf1 +Subproject commit 021df81dd8e23da2b76e8cb9c1b27a3c15efb5e7 diff --git a/dub.json b/dub.json index aaf5fe5..0e3f899 100644 --- a/dub.json +++ b/dub.json @@ -7,9 +7,9 @@ "targetType": "executable", "versions": ["built_with_dub"], "dependencies": { - "libdparse": "0.7.0-alpha.15", - "dsymbol": "0.2.0-alpha.10", + "libdparse": "0.7.0-beta.1", + "dsymbol": "0.2.0-beta.1", "inifiled": ">=0.0.6", - "emsi_containers": "0.5.0" + "emsi_containers": "0.5.2" }, } diff --git a/libdparse b/libdparse index 1e811d2..bbc9916 160000 --- a/libdparse +++ b/libdparse @@ -1 +1 @@ -Subproject commit 1e811d2b5da79ae44dd79b68d1379f67d1250cb9 +Subproject commit bbc9916182dc5c13950b25b48b2a6df944d52ab7 diff --git a/src/analysis/builtin_property_names.d b/src/analysis/builtin_property_names.d index 792f07d..1cfec82 100644 --- a/src/analysis/builtin_property_names.d +++ b/src/analysis/builtin_property_names.d @@ -12,6 +12,7 @@ import dparse.lexer; import analysis.base; import analysis.helpers; import dsymbol.scope_; +import std.algorithm : map; /** * The following code should be killed with fire: @@ -56,7 +57,7 @@ class BuiltinPropertyNameCheck : BaseAnalyzer override void visit(const AutoDeclaration ad) { if (depth > 0) - foreach (i; ad.identifiers) + foreach (i; ad.parts.map!(a => a.identifier)) { if (isBuiltinProperty(i.text)) addErrorMessage(i.line, i.column, KEY, generateErrorMessage(i.text)); diff --git a/src/analysis/enumarrayliteral.d b/src/analysis/enumarrayliteral.d index 87dc13f..e31a660 100644 --- a/src/analysis/enumarrayliteral.d +++ b/src/analysis/enumarrayliteral.d @@ -8,7 +8,7 @@ module analysis.enumarrayliteral; import dparse.ast; import dparse.lexer; import analysis.base; -import std.algorithm : canFind; +import std.algorithm : canFind, map; import dsymbol.scope_ : Scope; void doNothing(string, size_t, size_t, string, bool) @@ -35,19 +35,19 @@ class EnumArrayLiteralCheck : BaseAnalyzer { if (autoDec.storageClasses.canFind!(a => a.token == tok!"enum")) { - foreach (i, initializer; autoDec.initializers) + foreach (part; autoDec.parts) { - if (initializer is null) + if (part.initializer is null) continue; - if (initializer.nonVoidInitializer is null) + if (part.initializer.nonVoidInitializer is null) continue; - if (initializer.nonVoidInitializer.arrayInitializer is null) + if (part.initializer.nonVoidInitializer.arrayInitializer is null) continue; - addErrorMessage(autoDec.identifiers[i].line, autoDec.identifiers[i].column, + addErrorMessage(part.identifier.line, part.identifier.column, "dscanner.performance.enum_array_literal", "This enum may lead to unnecessary allocation at run-time." ~ " Use 'static immutable " - ~ autoDec.identifiers[i].text ~ " = [ ...' instead."); + ~ part.identifier.text ~ " = [ ...' instead."); } } autoDec.accept(this); diff --git a/src/analysis/undocumented.d b/src/analysis/undocumented.d index ca10b37..6b901df 100644 --- a/src/analysis/undocumented.d +++ b/src/analysis/undocumented.d @@ -98,9 +98,9 @@ class UndocumentedDeclarationCheck : BaseAnalyzer return; if (variable.autoDeclaration !is null) { - addMessage(variable.autoDeclaration.identifiers[0].line, - variable.autoDeclaration.identifiers[0].column, - variable.autoDeclaration.identifiers[0].text); + addMessage(variable.autoDeclaration.parts[0].identifier.line, + variable.autoDeclaration.parts[0].identifier.column, + variable.autoDeclaration.parts[0].identifier.text); return; } foreach (dec; variable.declarators) diff --git a/src/analysis/unmodified.d b/src/analysis/unmodified.d index aa36144..fe9005d 100644 --- a/src/analysis/unmodified.d +++ b/src/analysis/unmodified.d @@ -73,11 +73,12 @@ class UnmodifiedFinder : BaseAnalyzer && (!autoDeclaration.storageClasses.canFind!(a => a.token == tok!"const" || a.token == tok!"enum" || a.token == tok!"immutable"))) { - foreach (size_t i, id; autoDeclaration.identifiers) + foreach (part; autoDeclaration.parts) { - if (initializedFromCast(autoDeclaration.initializers[i])) + if (initializedFromCast(part.initializer)) continue; - tree[$ - 1].insert(new VariableInfo(id.text, id.line, id.column)); + tree[$ - 1].insert(new VariableInfo(part.identifier.text, + part.identifier.line, part.identifier.column)); } } autoDeclaration.accept(this); diff --git a/src/analysis/unused.d b/src/analysis/unused.d index d170dc4..fe3fb15 100644 --- a/src/analysis/unused.d +++ b/src/analysis/unused.d @@ -10,6 +10,7 @@ import analysis.base; import std.container; import std.regex : Regex, regex, matchAll; import dsymbol.scope_ : Scope; +import std.algorithm : map; /** * Checks for unused variables. @@ -259,7 +260,7 @@ class UnusedVariableCheck : BaseAnalyzer override void visit(const AutoDeclaration autoDeclaration) { - foreach (t; autoDeclaration.identifiers) + foreach (t; autoDeclaration.parts.map!(a => a.identifier)) this.variableDeclared(t.text, t.line, t.column, false, false); autoDeclaration.accept(this); } diff --git a/src/astprinter.d b/src/astprinter.d index e0d309d..9253c9d 100644 --- a/src/astprinter.d +++ b/src/astprinter.d @@ -165,17 +165,22 @@ class XMLPrinter : ASTVisitor visit(sc); output.writeln(""); - for (size_t i = 0; i < autoDec.identifiers.length; i++) - { - output.writeln(""); - output.writeln("", - autoDec.identifiers[i].text, ""); - visit(autoDec.initializers[i]); - output.writeln(""); - } + foreach (part; autoDec.parts) + visit(part); output.writeln(""); } + override void visit(const AutoDeclarationPart part) + { + output.writeln(""); + + output.writeln(""); + output.writeln("", part.identifier.text, ""); + visit(part.initializer); + output.writeln(""); + output.writeln(""); + } + override void visit(const BreakStatement breakStatement) { if (breakStatement.label.type == tok!"") diff --git a/src/ctags.d b/src/ctags.d index 39c0364..3d00708 100644 --- a/src/ctags.d +++ b/src/ctags.d @@ -213,7 +213,7 @@ final class CTagsPrinter : ASTVisitor override void visit(const AutoDeclaration dec) { - foreach (i; dec.identifiers) + foreach (i; dec.parts.map!(a => a.identifier)) { tagLines.insert("%s\t%s\t%d;\"\tv\tline:%d%s%s\n".format(i.text, fileName, i.line, i.line, context.c, context.access)); diff --git a/src/etags.d b/src/etags.d index f8b462a..91fea50 100644 --- a/src/etags.d +++ b/src/etags.d @@ -234,9 +234,9 @@ final class EtagsPrinter : ASTVisitor override void visit(const AutoDeclaration dec) { - foreach (i; dec.identifiers) + foreach (part; dec.parts) { - maketag(i); + maketag(part.identifier); } dec.accept(this); } diff --git a/src/symbol_finder.d b/src/symbol_finder.d index 8d48368..0d759a7 100644 --- a/src/symbol_finder.d +++ b/src/symbol_finder.d @@ -102,10 +102,10 @@ class FinderVisitor : ASTVisitor override void visit(const AutoDeclaration ad) { - foreach (id; ad.identifiers) + foreach (part; ad.parts) { - if (id.text == symbolName) - output.writefln("%s(%d:%d)", fileName, id.line, id.column); + if (part.identifier.text == symbolName) + output.writefln("%s(%d:%d)", fileName, part.identifier.line, part.identifier.column); } }