diff --git a/libdparse b/libdparse index a059356..b579192 160000 --- a/libdparse +++ b/libdparse @@ -1 +1 @@ -Subproject commit a059356c94e949625417ea98c9c1c59186fa285f +Subproject commit b5791923695c755aae9cf313555fd20c5b0993d9 diff --git a/src/analysis/comma_expression.d b/src/analysis/comma_expression.d index d628ec7..5ce999d 100644 --- a/src/analysis/comma_expression.d +++ b/src/analysis/comma_expression.d @@ -24,7 +24,7 @@ class CommaExpressionCheck : BaseAnalyzer override void visit(const Expression ex) { - if (ex.items.length > 1) + if (ex.items.length > 1 && interest > 0) { addErrorMessage(ex.line, ex.column, KEY, "Avoid using the comma expression."); @@ -32,5 +32,19 @@ class CommaExpressionCheck : BaseAnalyzer ex.accept(this); } + override void visit(const AssignExpression ex) + { + ++interest; + ex.accept(this); + --interest; + } + + invariant + { + assert(interest >= 0); + } + + int interest; + private enum KEY = "dscanner.suspicious.comma_expression"; } diff --git a/src/analysis/ifelsesame.d b/src/analysis/ifelsesame.d index 8d11e95..2940133 100644 --- a/src/analysis/ifelsesame.d +++ b/src/analysis/ifelsesame.d @@ -40,7 +40,7 @@ class IfElseSameCheck : BaseAnalyzer override void visit(const AssignExpression assignExpression) { - const AssignExpression e = cast(const AssignExpression) assignExpression.assignExpression; + auto e = cast(const AssignExpression) (cast(const Expression) assignExpression.expression).items[$ - 1]; if (e !is null && assignExpression.operator == tok!"=" && e.ternaryExpression == assignExpression.ternaryExpression) { diff --git a/src/analysis/unmodified.d b/src/analysis/unmodified.d index f53bcfc..7a06cc5 100644 --- a/src/analysis/unmodified.d +++ b/src/analysis/unmodified.d @@ -93,7 +93,7 @@ class UnmodifiedFinder:BaseAnalyzer assignExpression.ternaryExpression.accept(this); guaranteeUse--; interest--; - assignExpression.assignExpression.accept(this); + assignExpression.expression.accept(this); } else assignExpression.accept(this); diff --git a/src/analysis/unused.d b/src/analysis/unused.d index 654e75d..51d164d 100644 --- a/src/analysis/unused.d +++ b/src/analysis/unused.d @@ -154,17 +154,17 @@ class UnusedVariableCheck : BaseAnalyzer override void visit(const AssignExpression assignExp) { assignExp.ternaryExpression.accept(this); - if (assignExp.assignExpression !is null) + if (assignExp.expression !is null) { interestDepth++; - assignExp.assignExpression.accept(this); + assignExp.expression.accept(this); interestDepth--; } } override void visit(const TemplateDeclaration templateDeclaration) { - auto inAgg = inAggregateScope; + immutable inAgg = inAggregateScope; inAggregateScope = true; templateDeclaration.accept(this); inAggregateScope = inAgg; diff --git a/src/astprinter.d b/src/astprinter.d index 94dfa78..c6d53ee 100644 --- a/src/astprinter.d +++ b/src/astprinter.d @@ -113,13 +113,13 @@ class XMLPrinter : ASTVisitor override void visit(const AssignExpression assignExpression) { - if (assignExpression.assignExpression is null) - output.writeln(""); + if (assignExpression.expression is null) + output.writeln(""); else - output.writeln(""); assignExpression.accept(this); - output.writeln(""); + output.writeln(""); } override void visit(const AtAttribute atAttribute)