mirror of
https://github.com/dlang-community/D-Scanner.git
synced 2025-04-30 07:10:06 +03:00
Fix Autofix for AlwaysCurlyCheck (#148)
This commit is contained in:
parent
78590e6241
commit
b5a8ded6a9
1 changed files with 25 additions and 8 deletions
|
@ -6,7 +6,6 @@ module dscanner.analysis.always_curly;
|
||||||
|
|
||||||
import dscanner.analysis.base;
|
import dscanner.analysis.base;
|
||||||
|
|
||||||
// TODO: Fix Autofix
|
|
||||||
extern (C++) class AlwaysCurlyCheck(AST) : BaseAnalyzerDmd
|
extern (C++) class AlwaysCurlyCheck(AST) : BaseAnalyzerDmd
|
||||||
{
|
{
|
||||||
alias visit = BaseAnalyzerDmd.visit;
|
alias visit = BaseAnalyzerDmd.visit;
|
||||||
|
@ -36,16 +35,35 @@ extern (C++) class AlwaysCurlyCheck(AST) : BaseAnalyzerDmd
|
||||||
{
|
{
|
||||||
override void visit(NodeType node)
|
override void visit(NodeType node)
|
||||||
{
|
{
|
||||||
|
import dmd.hdrgen : toChars;
|
||||||
|
import std.conv : to;
|
||||||
|
import std.string : indexOf;
|
||||||
|
|
||||||
auto oldHasCurlyBraces = hasCurlyBraces;
|
auto oldHasCurlyBraces = hasCurlyBraces;
|
||||||
auto oldInCurlyStatement = inCurlyStatement;
|
auto oldInCurlyStatement = inCurlyStatement;
|
||||||
hasCurlyBraces = false;
|
hasCurlyBraces = false;
|
||||||
inCurlyStatement = true;
|
inCurlyStatement = true;
|
||||||
super.visit(node);
|
super.visit(node);
|
||||||
|
|
||||||
|
static if (is(NodeType == AST.IfStatement))
|
||||||
|
auto stmtBody = node.ifbody;
|
||||||
|
else static if (is(NodeType == AST.Catch))
|
||||||
|
auto stmtBody = node.handler;
|
||||||
|
else
|
||||||
|
auto stmtBody = node._body;
|
||||||
|
|
||||||
if (!hasCurlyBraces)
|
if (!hasCurlyBraces)
|
||||||
{
|
{
|
||||||
auto msg = nodeName ~ MESSAGE_POSTFIX;
|
auto msg = nodeName ~ MESSAGE_POSTFIX;
|
||||||
addErrorMessage(node.loc.linnum, node.loc.charnum, KEY, msg);
|
string exprStr = to!string(toChars(stmtBody));
|
||||||
|
|
||||||
|
addErrorMessage(
|
||||||
|
node.loc.linnum, node.loc.charnum, KEY, msg,
|
||||||
|
[
|
||||||
|
AutoFix.insertionAt(stmtBody.loc.fileOffset, "{ ")
|
||||||
|
.concat(AutoFix.insertionAt(stmtBody.loc.fileOffset + indexOf(exprStr, ';'), " }"))
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
hasCurlyBraces = oldHasCurlyBraces;
|
hasCurlyBraces = oldHasCurlyBraces;
|
||||||
|
@ -205,7 +223,6 @@ unittest
|
||||||
stderr.writeln("Unittest for AutoFix AlwaysCurly passed.");
|
stderr.writeln("Unittest for AutoFix AlwaysCurly passed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/+ TODO: Fix Autofix
|
|
||||||
unittest
|
unittest
|
||||||
{
|
{
|
||||||
import dscanner.analysis.config : StaticAnalysisConfig, Check, disabledConfig;
|
import dscanner.analysis.config : StaticAnalysisConfig, Check, disabledConfig;
|
||||||
|
@ -223,7 +240,7 @@ unittest
|
||||||
void test() {
|
void test() {
|
||||||
if(true) { return; } // fix:0
|
if(true) { return; } // fix:0
|
||||||
}
|
}
|
||||||
}c, sac);
|
}c, sac, true);
|
||||||
|
|
||||||
assertAutoFix(q{
|
assertAutoFix(q{
|
||||||
void test() {
|
void test() {
|
||||||
|
@ -233,7 +250,7 @@ unittest
|
||||||
void test() {
|
void test() {
|
||||||
foreach(_; 0 .. 10 ) { return; } // fix:0
|
foreach(_; 0 .. 10 ) { return; } // fix:0
|
||||||
}
|
}
|
||||||
}c, sac);
|
}c, sac, true);
|
||||||
|
|
||||||
assertAutoFix(q{
|
assertAutoFix(q{
|
||||||
void test() {
|
void test() {
|
||||||
|
@ -243,7 +260,7 @@ unittest
|
||||||
void test() {
|
void test() {
|
||||||
for(int i = 0; i < 10; ++i) { return; } // fix:0
|
for(int i = 0; i < 10; ++i) { return; } // fix:0
|
||||||
}
|
}
|
||||||
}c, sac);
|
}c, sac, true);
|
||||||
|
|
||||||
assertAutoFix(q{
|
assertAutoFix(q{
|
||||||
void test() {
|
void test() {
|
||||||
|
@ -253,8 +270,8 @@ unittest
|
||||||
void test() {
|
void test() {
|
||||||
do { return; } while(true) // fix:0
|
do { return; } while(true) // fix:0
|
||||||
}
|
}
|
||||||
}c, sac);
|
}c, sac, true);
|
||||||
|
|
||||||
|
|
||||||
stderr.writeln("Unittest for AutoFix AlwaysCurly passed.");
|
stderr.writeln("Unittest for AutoFix AlwaysCurly passed.");
|
||||||
}+/
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue