Update dsymbol and dparse
This commit is contained in:
parent
762dee0482
commit
896d7da6f4
2
dsymbol
2
dsymbol
|
@ -1 +1 @@
|
||||||
Subproject commit 50d813eda2b2068cc3e681fec19ddbaef92cccf1
|
Subproject commit 021df81dd8e23da2b76e8cb9c1b27a3c15efb5e7
|
6
dub.json
6
dub.json
|
@ -7,9 +7,9 @@
|
||||||
"targetType": "executable",
|
"targetType": "executable",
|
||||||
"versions": ["built_with_dub"],
|
"versions": ["built_with_dub"],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"libdparse": "0.7.0-alpha.15",
|
"libdparse": "0.7.0-beta.1",
|
||||||
"dsymbol": "0.2.0-alpha.10",
|
"dsymbol": "0.2.0-beta.1",
|
||||||
"inifiled": ">=0.0.6",
|
"inifiled": ">=0.0.6",
|
||||||
"emsi_containers": "0.5.0"
|
"emsi_containers": "0.5.2"
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1e811d2b5da79ae44dd79b68d1379f67d1250cb9
|
Subproject commit bbc9916182dc5c13950b25b48b2a6df944d52ab7
|
|
@ -12,6 +12,7 @@ import dparse.lexer;
|
||||||
import analysis.base;
|
import analysis.base;
|
||||||
import analysis.helpers;
|
import analysis.helpers;
|
||||||
import dsymbol.scope_;
|
import dsymbol.scope_;
|
||||||
|
import std.algorithm : map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The following code should be killed with fire:
|
* The following code should be killed with fire:
|
||||||
|
@ -56,7 +57,7 @@ class BuiltinPropertyNameCheck : BaseAnalyzer
|
||||||
override void visit(const AutoDeclaration ad)
|
override void visit(const AutoDeclaration ad)
|
||||||
{
|
{
|
||||||
if (depth > 0)
|
if (depth > 0)
|
||||||
foreach (i; ad.identifiers)
|
foreach (i; ad.parts.map!(a => a.identifier))
|
||||||
{
|
{
|
||||||
if (isBuiltinProperty(i.text))
|
if (isBuiltinProperty(i.text))
|
||||||
addErrorMessage(i.line, i.column, KEY, generateErrorMessage(i.text));
|
addErrorMessage(i.line, i.column, KEY, generateErrorMessage(i.text));
|
||||||
|
|
|
@ -8,7 +8,7 @@ module analysis.enumarrayliteral;
|
||||||
import dparse.ast;
|
import dparse.ast;
|
||||||
import dparse.lexer;
|
import dparse.lexer;
|
||||||
import analysis.base;
|
import analysis.base;
|
||||||
import std.algorithm : canFind;
|
import std.algorithm : canFind, map;
|
||||||
import dsymbol.scope_ : Scope;
|
import dsymbol.scope_ : Scope;
|
||||||
|
|
||||||
void doNothing(string, size_t, size_t, string, bool)
|
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"))
|
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;
|
continue;
|
||||||
if (initializer.nonVoidInitializer is null)
|
if (part.initializer.nonVoidInitializer is null)
|
||||||
continue;
|
continue;
|
||||||
if (initializer.nonVoidInitializer.arrayInitializer is null)
|
if (part.initializer.nonVoidInitializer.arrayInitializer is null)
|
||||||
continue;
|
continue;
|
||||||
addErrorMessage(autoDec.identifiers[i].line, autoDec.identifiers[i].column,
|
addErrorMessage(part.identifier.line, part.identifier.column,
|
||||||
"dscanner.performance.enum_array_literal",
|
"dscanner.performance.enum_array_literal",
|
||||||
"This enum may lead to unnecessary allocation at run-time."
|
"This enum may lead to unnecessary allocation at run-time."
|
||||||
~ " Use 'static immutable "
|
~ " Use 'static immutable "
|
||||||
~ autoDec.identifiers[i].text ~ " = [ ...' instead.");
|
~ part.identifier.text ~ " = [ ...' instead.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
autoDec.accept(this);
|
autoDec.accept(this);
|
||||||
|
|
|
@ -98,9 +98,9 @@ class UndocumentedDeclarationCheck : BaseAnalyzer
|
||||||
return;
|
return;
|
||||||
if (variable.autoDeclaration !is null)
|
if (variable.autoDeclaration !is null)
|
||||||
{
|
{
|
||||||
addMessage(variable.autoDeclaration.identifiers[0].line,
|
addMessage(variable.autoDeclaration.parts[0].identifier.line,
|
||||||
variable.autoDeclaration.identifiers[0].column,
|
variable.autoDeclaration.parts[0].identifier.column,
|
||||||
variable.autoDeclaration.identifiers[0].text);
|
variable.autoDeclaration.parts[0].identifier.text);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
foreach (dec; variable.declarators)
|
foreach (dec; variable.declarators)
|
||||||
|
|
|
@ -73,11 +73,12 @@ class UnmodifiedFinder : BaseAnalyzer
|
||||||
&& (!autoDeclaration.storageClasses.canFind!(a => a.token == tok!"const"
|
&& (!autoDeclaration.storageClasses.canFind!(a => a.token == tok!"const"
|
||||||
|| a.token == tok!"enum" || a.token == tok!"immutable")))
|
|| 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;
|
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);
|
autoDeclaration.accept(this);
|
||||||
|
|
|
@ -10,6 +10,7 @@ import analysis.base;
|
||||||
import std.container;
|
import std.container;
|
||||||
import std.regex : Regex, regex, matchAll;
|
import std.regex : Regex, regex, matchAll;
|
||||||
import dsymbol.scope_ : Scope;
|
import dsymbol.scope_ : Scope;
|
||||||
|
import std.algorithm : map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks for unused variables.
|
* Checks for unused variables.
|
||||||
|
@ -259,7 +260,7 @@ class UnusedVariableCheck : BaseAnalyzer
|
||||||
|
|
||||||
override void visit(const AutoDeclaration autoDeclaration)
|
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);
|
this.variableDeclared(t.text, t.line, t.column, false, false);
|
||||||
autoDeclaration.accept(this);
|
autoDeclaration.accept(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,17 +165,22 @@ class XMLPrinter : ASTVisitor
|
||||||
visit(sc);
|
visit(sc);
|
||||||
output.writeln("</storageClasses>");
|
output.writeln("</storageClasses>");
|
||||||
|
|
||||||
for (size_t i = 0; i < autoDec.identifiers.length; i++)
|
foreach (part; autoDec.parts)
|
||||||
{
|
visit(part);
|
||||||
output.writeln("<item>");
|
|
||||||
output.writeln("<name line=\"", autoDec.identifiers[i].line, "\">",
|
|
||||||
autoDec.identifiers[i].text, "</name>");
|
|
||||||
visit(autoDec.initializers[i]);
|
|
||||||
output.writeln("</item>");
|
|
||||||
}
|
|
||||||
output.writeln("</autoDeclaration>");
|
output.writeln("</autoDeclaration>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override void visit(const AutoDeclarationPart part)
|
||||||
|
{
|
||||||
|
output.writeln("<autoDeclarationPart>");
|
||||||
|
|
||||||
|
output.writeln("<item>");
|
||||||
|
output.writeln("<name line=\"", part.identifier.line, "\">", part.identifier.text, "</name>");
|
||||||
|
visit(part.initializer);
|
||||||
|
output.writeln("</item>");
|
||||||
|
output.writeln("</autoDeclarationPart>");
|
||||||
|
}
|
||||||
|
|
||||||
override void visit(const BreakStatement breakStatement)
|
override void visit(const BreakStatement breakStatement)
|
||||||
{
|
{
|
||||||
if (breakStatement.label.type == tok!"")
|
if (breakStatement.label.type == tok!"")
|
||||||
|
|
|
@ -213,7 +213,7 @@ final class CTagsPrinter : ASTVisitor
|
||||||
|
|
||||||
override void visit(const AutoDeclaration dec)
|
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,
|
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));
|
fileName, i.line, i.line, context.c, context.access));
|
||||||
|
|
|
@ -234,9 +234,9 @@ final class EtagsPrinter : ASTVisitor
|
||||||
|
|
||||||
override void visit(const AutoDeclaration dec)
|
override void visit(const AutoDeclaration dec)
|
||||||
{
|
{
|
||||||
foreach (i; dec.identifiers)
|
foreach (part; dec.parts)
|
||||||
{
|
{
|
||||||
maketag(i);
|
maketag(part.identifier);
|
||||||
}
|
}
|
||||||
dec.accept(this);
|
dec.accept(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -102,10 +102,10 @@ class FinderVisitor : ASTVisitor
|
||||||
|
|
||||||
override void visit(const AutoDeclaration ad)
|
override void visit(const AutoDeclaration ad)
|
||||||
{
|
{
|
||||||
foreach (id; ad.identifiers)
|
foreach (part; ad.parts)
|
||||||
{
|
{
|
||||||
if (id.text == symbolName)
|
if (part.identifier.text == symbolName)
|
||||||
output.writefln("%s(%d:%d)", fileName, id.line, id.column);
|
output.writefln("%s(%d:%d)", fileName, part.identifier.line, part.identifier.column);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue