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
{
import analysis.config;
import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac;
sac.asm_style_check = true;
assertAnalyzerWarnings(q{

View File

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

View File

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

View File

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

View File

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

View File

@ -45,7 +45,8 @@ class FloatOperatorCheck : BaseAnalyzer
unittest
{
import analysis.config;
import analysis.config : StaticAnalysisConfig;
StaticAnalysisConfig sac;
sac.float_operator_check = true;
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__)
{
import analysis.run;
import analysis.run : ParseAllocator, parseModule;
import std.d.lexer : StringCache;
import std.d.parser;
StringCache cache = StringCache(StringCache.defaultBucketCount);
ParseAllocator p = new ParseAllocator;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,6 +18,10 @@ class UnusedVariableCheck : BaseAnalyzer
{
alias visit = BaseAnalyzer.visit;
/**
* Params:
* fileName = the name of the file being analyzed
*/
this(string fileName)
{
super(fileName);
@ -54,18 +58,6 @@ class UnusedVariableCheck : BaseAnalyzer
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!ArgumentList;
mixin PartsUseVariables!AssertExpression;
@ -327,6 +319,16 @@ class UnusedVariableCheck : BaseAnalyzer
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,
bool isParameter, bool isRef)
{

View File

@ -378,9 +378,9 @@ options:
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(BSD) version = useXDG;
version(FreeBSD) version = useXDG;
@ -393,8 +393,7 @@ string getConfigurationLocation()
{
version (useXDG)
{
int x;
import std.process;
import std.process : environment;
string configDir = environment.get("XDG_CONFIG_HOME", null);
if (configDir is null)
{