Skip to content

Commit 0c470ea

Browse files
lucica28Albert24GG
authored andcommitted
replace libdparse in delete check (dlang-community#21)
* replace libdparse in delete check * delete comment
1 parent 7c9f8cb commit 0c470ea

File tree

2 files changed

+18
-46
lines changed

2 files changed

+18
-46
lines changed

src/dscanner/analysis/del.d

Lines changed: 15 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,74 +6,47 @@
66
module dscanner.analysis.del;
77

88
import std.stdio;
9-
import dparse.ast;
10-
import dparse.lexer;
119
import dscanner.analysis.base;
10+
import dscanner.analysis.helpers;
1211
import dsymbol.scope_;
1312

1413
/**
1514
* Checks for use of the deprecated 'delete' keyword
1615
*/
17-
final class DeleteCheck : BaseAnalyzer
16+
extern(C++) class DeleteCheck(AST) : BaseAnalyzerDmd
1817
{
19-
alias visit = BaseAnalyzer.visit;
20-
18+
// alias visit = BaseAnalyzerDmd!AST.visit;
19+
alias visit = BaseAnalyzerDmd.visit;
2120
mixin AnalyzerInfo!"delete_check";
2221

23-
this(BaseAnalyzerArguments args)
22+
extern(D) this(string fileName)
2423
{
25-
super(args);
24+
super(fileName);
2625
}
2726

28-
override void visit(const DeleteExpression d)
27+
override void visit(AST.DeleteExp d)
2928
{
30-
addErrorMessage(d.tokens[0], KEY,
31-
"Avoid using the 'delete' keyword.",
32-
[AutoFix.replacement(d.tokens[0], `destroy(`, "Replace delete with destroy()")
33-
.concat(AutoFix.insertionAfter(d.tokens[$ - 1], ")"))]);
34-
d.accept(this);
29+
addErrorMessage(cast(ulong) d.loc.linnum, cast(ulong) d.loc.charnum, "dscanner.deprecated.delete_keyword",
30+
"Avoid using the 'delete' keyword.");
31+
super.visit(d);
3532
}
36-
37-
private enum string KEY = "dscanner.deprecated.delete_keyword";
3833
}
3934

4035
unittest
4136
{
42-
import dscanner.analysis.config : Check, disabledConfig, StaticAnalysisConfig;
43-
import dscanner.analysis.helpers : assertAnalyzerWarnings, assertAutoFix;
37+
import dscanner.analysis.config : StaticAnalysisConfig, Check, disabledConfig;
38+
import dscanner.analysis.helpers : assertAnalyzerWarnings;
4439

4540
StaticAnalysisConfig sac = disabledConfig();
4641
sac.delete_check = Check.enabled;
47-
assertAnalyzerWarnings(q{
48-
void testDelete()
49-
{
50-
int[int] data = [1 : 2];
51-
delete data[1]; /+
52-
^^^^^^ [warn]: Avoid using the 'delete' keyword. +/
53-
54-
auto a = new Class();
55-
delete a; /+
56-
^^^^^^ [warn]: Avoid using the 'delete' keyword. +/
57-
}
58-
}c, sac);
59-
60-
assertAutoFix(q{
61-
void testDelete()
62-
{
63-
int[int] data = [1 : 2];
64-
delete data[1]; // fix
65-
66-
auto a = new Class();
67-
delete a; // fix
68-
}
69-
}c, q{
42+
assertAnalyzerWarningsDMD(q{
7043
void testDelete()
7144
{
7245
int[int] data = [1 : 2];
73-
destroy(data[1]); // fix
46+
delete data[1]; // [warn]: Avoid using the 'delete' keyword.
7447

7548
auto a = new Class();
76-
destroy(a); // fix
49+
delete a; // [warn]: Avoid using the 'delete' keyword.
7750
}
7851
}c, sac);
7952

src/dscanner/analysis/run.d

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -848,10 +848,6 @@ private BaseAnalyzer[] getAnalyzersForModuleAndConfig(string fileName,
848848
checks ~= new UnmodifiedFinder(args.setSkipTests(
849849
analysisConfig.could_be_immutable_check == Check.skipTests && !ut));
850850

851-
if (moduleName.shouldRun!DeleteCheck(analysisConfig))
852-
checks ~= new DeleteCheck(args.setSkipTests(
853-
analysisConfig.delete_check == Check.skipTests && !ut));
854-
855851
if (moduleName.shouldRun!DuplicateAttributeCheck(analysisConfig))
856852
checks ~= new DuplicateAttributeCheck(args.setSkipTests(
857853
analysisConfig.duplicate_attribute == Check.skipTests && !ut));
@@ -1332,6 +1328,9 @@ MessageSet analyzeDmd(string fileName, ASTBase.Module m, const char[] moduleName
13321328
if (moduleName.shouldRunDmd!(EnumArrayVisitor!ASTBase)(config))
13331329
visitors ~= new EnumArrayVisitor!ASTBase(fileName);
13341330

1331+
if (moduleName.shouldRunDmd!(DeleteCheck!ASTBase)(config))
1332+
visitors ~= new DeleteCheck!ASTBase(fileName);
1333+
13351334
foreach (visitor; visitors)
13361335
{
13371336
m.accept(visitor);

0 commit comments

Comments
 (0)