Closes #1486 Add rule for no-else-return - New Javascript rule

This commit is contained in:
Andreas Dangel
2016-05-20 19:42:32 +02:00
parent 03d9175cd1
commit 9f40a707e0
5 changed files with 86 additions and 0 deletions

View File

@ -71,4 +71,37 @@ if (bar) {
</example>
</rule>
<rule name="NoElseReturn"
language="ecmascript"
since="5.5.0"
message="The else block is unnecessary"
class="net.sourceforge.pmd.lang.rule.XPathRule"
externalInfoUrl="${pmd.website.baseurl}/rules/ecmascript/unnecessary.html#NoElseReturn">
<description>The else block in a if-else-construct is unnecessary if the `if` block contains a return.
Then the content of the else block can be put outside.
See also: http://eslint.org/docs/rules/no-else-return
</description>
<priority>3</priority>
<properties>
<property name="xpath"><value><![CDATA[
//IfStatement[@Else="true"][Scope[1]/ReturnStatement]
]]></value></property>
</properties>
<example><![CDATA[
// Bad:
if (x) {
return y;
} else {
return z;
}
// Good:
if (x) {
return y;
}
return z;
]]></example>
</rule>
</ruleset>

View File

@ -13,5 +13,6 @@ public class UnnecessaryRulesTest extends SimpleAggregatorTst {
public void setUp() {
addRule(RULESET, "UnnecessaryBlock");
addRule(RULESET, "UnnecessaryParentheses");
addRule(RULESET, "NoElseReturn");
}
}

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<test-data>
<test-code>
<description>Simple violation</description>
<expected-problems>1</expected-problems>
<code><![CDATA[
function foo() {
if (x) {
return y;
} else {
return z;
}
}
]]></code>
</test-code>
<test-code>
<description>Simple fix</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
function foo() {
if (x) {
return y;
}
return z;
}
]]></code>
</test-code>
<test-code>
<description>No return in if</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
function foo() {
if (x) {
x++;
} else {
return z;
}
return x;
}
]]></code>
</test-code>
</test-data>