diff --git a/analysis/numbers.d b/analysis/numbers.d
new file mode 100644
index 0000000..4ad2dd2
--- /dev/null
+++ b/analysis/numbers.d
@@ -0,0 +1,37 @@
+// Copyright Brian Schott (Sir Alaran) 2014.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+module analysis.numbers;
+
+import std.regex;
+import stdx.d.ast;
+import stdx.d.lexer;
+import analysis.base;
+
+/**
+ * Checks for use of the deprecated "delete" keyword
+ */
+class NumberStyleCheck : BaseAnalyzer
+{
+ alias visit = BaseAnalyzer.visit;
+
+ this(string fileName)
+ {
+ super(fileName);
+ }
+
+ override void visit(Token t)
+ {
+ if (isNumberLiteral(t.type) && (t.text.matchFirst(badBinaryRegex)
+ || t.text.matchFirst(badDecimalRegex)))
+ {
+ addErrorMessage(t.line, t.column,
+ "Use underscores to improve number constant readability");
+ }
+ }
+
+ auto badBinaryRegex = ctRegex!(`0b[01]{9,}`);
+ auto badDecimalRegex = ctRegex!(`\d{4,}`);
+}
diff --git a/analysis/run.d b/analysis/run.d
index d55a7d1..b8da31b 100644
--- a/analysis/run.d
+++ b/analysis/run.d
@@ -17,6 +17,7 @@ import analysis.enumarrayliteral;
import analysis.pokemon;
import analysis.del;
import analysis.fish;
+import analysis.numbers;
void messageFunction(string fileName, size_t line, size_t column, string message,
bool isError)
@@ -71,8 +72,12 @@ void analyze(File output, string[] fileNames, bool staticAnalyze = true)
auto fish = new FloatOperatorCheck(fileName);
fish.visit(m);
+ auto numbers = new NumberStyleCheck(fileName);
+ numbers.visit(m);
+
foreach (message; sort(chain(enums.messages, style.messages,
- pokemon.messages, del.messages, fish.messages).array))
+ pokemon.messages, del.messages, fish.messages, numbers.messages
+ ).array))
{
writeln(message);
}
diff --git a/astprinter.d b/astprinter.d
index 88cad63..9b4031a 100644
--- a/astprinter.d
+++ b/astprinter.d
@@ -59,12 +59,12 @@ class XMLPrinter : ASTVisitor
output.writeln("");
output.writeln("");
andAndExpression.left.accept(this);
- output.writeln("");
+ output.writeln("");
if (andAndExpression.right !is null)
{
output.writeln("");
andAndExpression.right.accept(this);
- output.writeln("");
+ output.writeln("");
}
output.writeln("");
}
@@ -74,12 +74,12 @@ class XMLPrinter : ASTVisitor
output.writeln("");
output.writeln("");
andExpression.left.accept(this);
- output.writeln("");
+ output.writeln("");
if (andExpression.right !is null)
{
output.writeln("");
andExpression.right.accept(this);
- output.writeln("");
+ output.writeln("");
}
output.writeln("");
}
@@ -429,14 +429,14 @@ class XMLPrinter : ASTVisitor
override void visit(EqualExpression equalExpression)
{
- output.writeln("");
+ output.writeln("");
output.writeln("");
- visit(equalExpression.left);
+ equalExpression.left.accept(this);
output.writeln("");
output.writeln("");
- visit(equalExpression.right);
+ equalExpression.right.accept(this);
output.writeln("");
- output.writeln("");
+ output.writeln("");
}
override void visit(Expression expression)
@@ -637,17 +637,17 @@ class XMLPrinter : ASTVisitor
visit(ifStatement.type);
visit(ifStatement.identifier);
}
- visit(ifStatement.expression);
+ ifStatement.expression.accept(this);
output.writeln("");
output.writeln("");
- visit(ifStatement.thenStatement);
+ ifStatement.thenStatement.accept(this);
output.writeln("");
if (ifStatement.elseStatement !is null)
{
output.writeln("");
- visit(ifStatement.elseStatement);
+ ifStatement.elseStatement.accept(this);
output.writeln("");
}
output.writeln("");
@@ -983,10 +983,10 @@ class XMLPrinter : ASTVisitor
output.writeln("");
output.writeln("");
- visit(relExpression.left);
+ relExpression.left.accept(this);
output.writeln("");
output.writeln("");
- visit(relExpression.right);
+ relExpression.right.accept(this);
output.writeln("");
output.writeln("");
}
@@ -1023,10 +1023,10 @@ class XMLPrinter : ASTVisitor
output.writeln("");
output.writeln("");
- visit(shiftExpression.left);
+ shiftExpression.left.accept(this);
output.writeln("");
output.writeln("");
- visit(shiftExpression.right);
+ shiftExpression.right.accept(this);
output.writeln("");
output.writeln("");
}
@@ -1404,11 +1404,11 @@ class XMLPrinter : ASTVisitor
{
output.writeln("", xmlEscape(unaryExpression.prefix.text),
"");
- visit(unaryExpression.unaryExpression);
+ unaryExpression.unaryExpression.accept(this);
}
if (unaryExpression.suffix != tok!"")
{
- visit(unaryExpression.unaryExpression);
+ unaryExpression.unaryExpression.accept(this);
output.writeln("", unaryExpression.suffix.text,
"");
}