Is there a way to setup checkstyle to prevent leading, multiple or trailing empty lines in method bodies:
e.g.
private void a() {
-
int a = 1;
doStu
Can use it:
<module name="Regexp">
<property name="message" value="Blank line at start of block is not allowed"/>
<property name="format" value="\{\s*$^\s*$"/>
<property name="ignoreComments" value="true"/>
<property name="illegalPattern" value="true"/>
</module>
<module name="Regexp">
<property name="message" value="Blank line at end of block is not allowed"/>
<property name="format" value="^\s*$^\s*\}"/>
<property name="ignoreComments" value="true"/>
<property name="illegalPattern" value="true"/>
</module>
To enforce no blank lines at the beginning and end of any block, you can use multi-line regular expression checks:
<module name="RegexpMultiline">
<property name="message" value="Blank line at start of block should be removed" />
<property name="format" value="(?<=\{\s{0,99}$)^$" />
<property name="fileExtensions" value="groovy,java" />
</module>
<module name="RegexpMultiline">
<property name="message" value="Blank line at end of block should be removed" />
<property name="format" value="(?<!\{\s{0,99}$)^$(?=^\s{0,99}\})" />
<property name="fileExtensions" value="groovy,java" />
</module>
"^$" signifies the blank line.
To prevent leading empty lines in method bodies, you can use:
<module name="RegexpMultiline">
<property name="message" value="Blank line at start of method should be removed"/>
<property name="format" value="\(.*\)\s*\{\s*\n\s*\n"/>
</module>
We can find method by parentheses.
To prevent multiple empty lines you can use the EmptyLineSeparator check. Its primary purpose is to ensure that there is an empty line between members in a file, but it also has a allowMultipleEmptyLines
property which you can set to "false" to disallow them.
There is however currently a bug with the check that means it doesn't correctly detect multiple empty lines between methods where there is a comment (including JavaDoc) between the methods. I am working on a fix for this at the moment.
As for checking for new lines at the beginning or end of a block, I think the RegexpMultiline
check would be the only option as mentioned in Pankaj's answer.