[plsql] Add new sample rule AvoidTabCharacter
This commit is contained in:

committed by
Andreas Dangel

parent
9f80002250
commit
d1414bccb8
@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.sourceforge.pmd.lang.plsql.rule.codestyle;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StringReader;
|
||||||
|
|
||||||
|
import net.sourceforge.pmd.lang.plsql.ast.ASTInput;
|
||||||
|
import net.sourceforge.pmd.lang.plsql.rule.AbstractPLSQLRule;
|
||||||
|
|
||||||
|
public class AvoidTabCharacterRule extends AbstractPLSQLRule {
|
||||||
|
|
||||||
|
public AvoidTabCharacterRule() {
|
||||||
|
addRuleChainVisit(ASTInput.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object visit(ASTInput node, Object data) {
|
||||||
|
try (BufferedReader in = new BufferedReader(new StringReader(node.getSourcecode()))) {
|
||||||
|
String line;
|
||||||
|
int lineNumber = 0;
|
||||||
|
while ((line = in.readLine()) != null) {
|
||||||
|
lineNumber++;
|
||||||
|
if (line.indexOf('\t') != -1) {
|
||||||
|
addViolationWithMessage(data, null, "Tab characters are not allowed. Use spaces for intendation",
|
||||||
|
lineNumber, lineNumber);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException("Error while executing rule AvoidTabCharacter", e);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
@ -9,6 +9,24 @@
|
|||||||
Rules which enforce a specific coding style.
|
Rules which enforce a specific coding style.
|
||||||
</description>
|
</description>
|
||||||
|
|
||||||
|
<rule name="AvoidTabCharacter"
|
||||||
|
language="plsql"
|
||||||
|
since="6.13.0"
|
||||||
|
message="Avoid tab characters for indentation. Use spaces instead."
|
||||||
|
class="net.sourceforge.pmd.lang.plsql.rule.codestyle.AvoidTabCharacterRule"
|
||||||
|
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_plsql_codestyle.html#avoidtabcharacter">
|
||||||
|
<description>
|
||||||
|
This rule checks, that there are no tab characters (`\t`) in the source file.
|
||||||
|
It reports only the first occurrence per file.
|
||||||
|
|
||||||
|
Using tab characters for indentation is not recommended, since this requires that every developer
|
||||||
|
uses the same tab with in their editor.
|
||||||
|
|
||||||
|
This rule is the PMD equivalent of checkstyle's [FileTabCharacter](http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter) check.
|
||||||
|
</description>
|
||||||
|
<priority>3</priority>
|
||||||
|
</rule>
|
||||||
|
|
||||||
<rule name="CodeFormat"
|
<rule name="CodeFormat"
|
||||||
language="plsql"
|
language="plsql"
|
||||||
since="6.9.0"
|
since="6.9.0"
|
||||||
|
@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.sourceforge.pmd.lang.plsql.rule.codestyle;
|
||||||
|
|
||||||
|
import net.sourceforge.pmd.testframework.PmdRuleTst;
|
||||||
|
|
||||||
|
public class AvoidTabCharacterTest extends PmdRuleTst {
|
||||||
|
// no additional unit tests
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<test-data
|
||||||
|
xmlns="http://pmd.sourceforge.net/rule-tests"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>Using tabs - only the first tab character is reported</description>
|
||||||
|
<expected-problems>1</expected-problems>
|
||||||
|
<expected-linenumbers>2</expected-linenumbers>
|
||||||
|
<code><![CDATA[
|
||||||
|
BEGIN
|
||||||
|
SELECT cmer_id
|
||||||
|
,version
|
||||||
|
,cmp_id
|
||||||
|
BULK COLLECT INTO v_cmer_ids
|
||||||
|
,v_versions
|
||||||
|
,v_cmp_ids
|
||||||
|
FROM cmer;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
]]></code>
|
||||||
|
<source-type>plsql</source-type>
|
||||||
|
</test-code>
|
||||||
|
|
||||||
|
<test-code>
|
||||||
|
<description>No tabs</description>
|
||||||
|
<expected-problems>0</expected-problems>
|
||||||
|
<code><![CDATA[
|
||||||
|
BEGIN
|
||||||
|
SELECT cmer_id
|
||||||
|
,version
|
||||||
|
,cmp_id
|
||||||
|
BULK COLLECT INTO v_cmer_ids
|
||||||
|
,v_versions
|
||||||
|
,v_cmp_ids
|
||||||
|
FROM cmer;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
]]></code>
|
||||||
|
<source-type>plsql</source-type>
|
||||||
|
</test-code>
|
||||||
|
</test-data>
|
Reference in New Issue
Block a user