This commit is contained in:
Hackerpilot 2015-04-23 19:32:57 -07:00
parent b5c9bca463
commit 7b115caf3f
17 changed files with 49 additions and 35 deletions

View File

@ -38,7 +38,8 @@ class AsmStyleCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.asm_style_check = true; sac.asm_style_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -51,8 +51,6 @@ protected:
} }
} }
import core.vararg;
void addErrorMessage(size_t line, size_t column, string key, string message) void addErrorMessage(size_t line, size_t column, string key, string message)
{ {
_messages.insert(Message(fileName, line, column, key, message)); _messages.insert(Message(fileName, line, column, key, message));

View File

@ -91,7 +91,8 @@ private:
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.constructor_check = true; sac.constructor_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -33,7 +33,8 @@ class DeleteCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.delete_check = true; sac.delete_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -156,7 +156,7 @@ class DuplicateAttributeCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.duplicate_attribute = true; sac.duplicate_attribute = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -45,7 +45,8 @@ class FloatOperatorCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.float_operator_check = true; sac.float_operator_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -52,9 +52,8 @@ S after(S)(S value, S separator)
*/ */
void assertAnalyzerWarnings(string code, const StaticAnalysisConfig config, string file=__FILE__, size_t line=__LINE__) void assertAnalyzerWarnings(string code, const StaticAnalysisConfig config, string file=__FILE__, size_t line=__LINE__)
{ {
import analysis.run; import analysis.run : ParseAllocator, parseModule;
import std.d.lexer : StringCache; import std.d.lexer : StringCache;
import std.d.parser;
StringCache cache = StringCache(StringCache.defaultBucketCount); StringCache cache = StringCache(StringCache.defaultBucketCount);
ParseAllocator p = new ParseAllocator; ParseAllocator p = new ParseAllocator;

View File

@ -79,7 +79,8 @@ class IfElseSameCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.if_else_same_check = true; sac.if_else_same_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -59,7 +59,8 @@ class LengthSubtractionCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.length_subtraction_check = true; sac.length_subtraction_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -63,7 +63,8 @@ private:
unittest unittest
{ {
import std.stdio; import std.stdio:stderr;
LineSpans l; LineSpans l;
l.addLine(5); l.addLine(5);
foreach (i; 2 .. 9) foreach (i; 2 .. 9)

View File

@ -44,7 +44,8 @@ class LogicPrecedenceCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.logical_precedence_check = true; sac.logical_precedence_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -91,7 +91,8 @@ class OpEqualsWithoutToHashCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.opequals_tohash_check = true; sac.opequals_tohash_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -84,7 +84,8 @@ class PokemonExceptionCheck : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.exception_check = true; sac.exception_check = true;
assertAnalyzerWarnings(q{ assertAnalyzerWarnings(q{

View File

@ -19,8 +19,13 @@ class BackwardsRangeCheck : BaseAnalyzer
{ {
alias visit = BaseAnalyzer.visit; alias visit = BaseAnalyzer.visit;
/// Key for this check in the report output
enum string KEY = "dscanner.bugs.backwards_slices"; enum string KEY = "dscanner.bugs.backwards_slices";
/**
* Params:
* fileName = the name of the file being analyzed
*/
this(string fileName) this(string fileName)
{ {
super(fileName); super(fileName);
@ -30,7 +35,7 @@ class BackwardsRangeCheck : BaseAnalyzer
{ {
if (foreachStatement.low !is null && foreachStatement.high !is null) if (foreachStatement.low !is null && foreachStatement.high !is null)
{ {
import std.string; import std.string : format;
state = State.left; state = State.left;
visit(foreachStatement.low); visit(foreachStatement.low);
state = State.right; state = State.right;
@ -67,7 +72,7 @@ class BackwardsRangeCheck : BaseAnalyzer
override void visit(const PrimaryExpression primary) override void visit(const PrimaryExpression primary)
{ {
import std.conv; import std.conv : to, ConvException;
if (state == State.ignore || !isNumberLiteral(primary.primary.type)) if (state == State.ignore || !isNumberLiteral(primary.primary.type))
return; return;
@ -99,7 +104,7 @@ class BackwardsRangeCheck : BaseAnalyzer
state = State.ignore; state = State.ignore;
if (hasLeft && hasRight && left > right) if (hasLeft && hasRight && left > right)
{ {
import std.string; import std.string : format;
string message = format( string message = format(
"%d is larger than %d. This slice is likely incorrect.", "%d is larger than %d. This slice is likely incorrect.",
left, right); left, right);

View File

@ -93,7 +93,8 @@ class StyleChecker : BaseAnalyzer
unittest unittest
{ {
import analysis.config; import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac; StaticAnalysisConfig sac;
sac.style_check = true; sac.style_check = true;

View File

@ -18,6 +18,10 @@ class UnusedVariableCheck : BaseAnalyzer
{ {
alias visit = BaseAnalyzer.visit; alias visit = BaseAnalyzer.visit;
/**
* Params:
* fileName = the name of the file being analyzed
*/
this(string fileName) this(string fileName)
{ {
super(fileName); super(fileName);
@ -54,18 +58,6 @@ class UnusedVariableCheck : BaseAnalyzer
popScope(); popScope();
} }
// override void visit(const Type type) {}
mixin template PartsUseVariables(NodeType)
{
override void visit(const NodeType node)
{
interestDepth++;
node.accept(this);
interestDepth--;
}
}
mixin PartsUseVariables!AliasInitializer; mixin PartsUseVariables!AliasInitializer;
mixin PartsUseVariables!ArgumentList; mixin PartsUseVariables!ArgumentList;
mixin PartsUseVariables!AssertExpression; mixin PartsUseVariables!AssertExpression;
@ -327,6 +319,16 @@ class UnusedVariableCheck : BaseAnalyzer
private: private:
mixin template PartsUseVariables(NodeType)
{
override void visit(const NodeType node)
{
interestDepth++;
node.accept(this);
interestDepth--;
}
}
void variableDeclared(string name, size_t line, size_t column, void variableDeclared(string name, size_t line, size_t column,
bool isParameter, bool isRef) bool isParameter, bool isRef)
{ {

View File

@ -378,9 +378,9 @@ options:
programName); programName);
} }
void doNothing(string, size_t, size_t, string, bool) {} private void doNothing(string, size_t, size_t, string, bool) {}
enum CONFIG_FILE_NAME = "dscanner.ini"; private enum CONFIG_FILE_NAME = "dscanner.ini";
version(linux) version = useXDG; version(linux) version = useXDG;
version(BSD) version = useXDG; version(BSD) version = useXDG;
version(FreeBSD) version = useXDG; version(FreeBSD) version = useXDG;
@ -393,8 +393,7 @@ string getConfigurationLocation()
{ {
version (useXDG) version (useXDG)
{ {
int x; import std.process : environment;
import std.process;
string configDir = environment.get("XDG_CONFIG_HOME", null); string configDir = environment.get("XDG_CONFIG_HOME", null);
if (configDir is null) if (configDir is null)
{ {