ruleset: MoveVariableInsideIf: enabled for 4-tweaks and above

This commit is contained in:
Paul Campbell 2017-05-28 19:56:43 +01:00
parent 6072613b44
commit 4a0ee1de46
6 changed files with 120 additions and 0 deletions

View file

@ -181,6 +181,7 @@ Rule|Level|Source|Enabled|Suppressible
[MissingSwitchDefault](#missingswitchdefault)|tweaks|checkstyle|Yes|
[ModifiedControlVariable](#modifiedcontrolvariable)|tweaks|checkstyle|Yes|
[ModifierOrder](#modifierorder)|naming|checkstyle|Yes|
[MoveVariableInsideIfCheck](#movevariableinsideifcheck)|tweaks|sevntu|Yes|
[MultipleStringLiterals](#multiplestringliterals)|naming|checkstyle|Yes|
[MultipleVariableDeclarations](#multiplevariabledeclarations)|naming|checkstyle|Yes|
[MutableException](#mutableexception)|tweaks|checkstyle|Yes|
@ -2333,6 +2334,29 @@ if (getProperty() && property) {}
#### [MapIterationInForEachLoop](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/MapIterationInForEachLoopCheck.html)
Checks for unoptimised iterations over `Map`s. Check use of `map.values()`, `map.keySet()` and `map.entrySet()` against the use of the iterator produced to verify if another could be better.
#### [MoveVariableInsideIfCheck](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/MoveVariableInsideIfCheck.html)
Checks if a variable is declared outside an `if` block that is only used within that block.
Valid:
````
if (condition) {
String variable = input.substring(1);
return method(variable);
}
return "";
````
Invalid:
````
String variable = input.substring(1);
if (condition) {
return method(variable);
}
return "";
````
Example: [MoveVariableInsideIf.java](https://github.com/kemitix/kemitix-checkstyle-ruleset/blob/master/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java)
#### [NameConventionForJunit4TestClasses](http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/NameConventionForJunit4TestClassesCheck.html)
Checks the names of JUnit test classes. Classes checked are those that have at least one method annotated with `Test` or `org.junit.Test`.

View file

@ -1498,3 +1498,10 @@ rules:
source: SEVNTU
uri: http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/WhitespaceBeforeArrayInitializerCheck.html
reason: "TODO: enable"
-
name: MoveVariableInsideIfCheck
parent: TREEWALKER
level: TWEAKS
enabled: true
source: SEVNTU
uri: http://sevntu-checkstyle.github.io/sevntu.checkstyle/apidocs/com/github/sevntu/checkstyle/checks/coding/MoveVariableInsideIfCheck.html

View file

@ -0,0 +1,22 @@
Checks if a variable is declared outside an `if` block that is only used within that block.
Valid:
````
if (condition) {
String variable = input.substring(1);
return method(variable);
}
return "";
````
Invalid:
````
String variable = input.substring(1);
if (condition) {
return method(variable);
}
return "";
````
Example: [MoveVariableInsideIf.java](https://github.com/kemitix/kemitix-checkstyle-ruleset/blob/master/regressions/src/main/java/net/kemitix/checkstyle/regressions/MoveVariableInsideIf.java)

View file

@ -0,0 +1,65 @@
/**
* The MIT License (MIT)
*
* Copyright (c) 2017 Paul Campbell
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies
* or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package net.kemitix.checkstyle.regressions;
/**
* Regression demo for {@code MoveVariableInsideIfCheck}.
*
* @author Paul Campbell (pcampbell@kemitix.net)
*/
class MoveVariableInsideIf {
private String input = "1";
private boolean condition;
private String method(final String variable) {
return "value";
}
/**
* Fails if not suppressed.
*
* @return value
*/
@SuppressWarnings("movevariableinsideif")
String invalid() {
String variable = input.substring(1);
if (condition) {
return method(variable);
}
return "";
}
/**
* Rewrite {@link #invalid()} as this to pass.
*
* @return value
*/
String valid() {
if (condition) {
String variable = input.substring(1);
return method(variable);
}
return "";
}
}

View file

@ -175,6 +175,7 @@
<module name="UniformEnumConstantName"/>
<module name="UselessSingleCatch"/>
<module name="UselessSuperCtorCall"/>
<module name="MoveVariableInsideIfCheck"/>
</module><!-- /TreeWalker -->

View file

@ -228,6 +228,7 @@
<module name="UniformEnumConstantName"/>
<module name="UselessSingleCatch"/>
<module name="UselessSuperCtorCall"/>
<module name="MoveVariableInsideIfCheck"/>
</module><!-- /TreeWalker -->