category.plsql.codestyle.xml Maven / Gradle / Ivy
<?xml version="1.0" encoding="UTF-8"?> <ruleset name="Code Style" xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd"> <description> Rules which enforce a specific coding style. </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" language="plsql" since="6.9.0" message="Please check the formatting/indentation" class="net.sourceforge.pmd.lang.plsql.rule.codestyle.CodeFormatRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_plsql_codestyle.html#codeformat"> <description> This rule verifies that the PLSQL code is properly formatted. The following checks are executed: SQL Queries: * The selected columns must be each on a new line * The keywords (BULK COLLECT INTO, FROM) start on a new line and are indented by one level * UNION should be on the same indentation level as SELECT * Each JOIN is on a new line. If there are more than one JOIN conditions, then each condition should be on a separate line. Parameter definitions for procedures: * Each parameter should be on a new line * Variable names as well as their types should be aligned Variable declarations: * Each variable should be on a new line * Variable names as well as their types should be aligned Calling a procedure: * If there are more than 3 parameters * then named parameters should be used * and each parameter should be on a new line </description> <priority>3</priority> <example><![CDATA[ BEGIN -- select columns each on a separate line SELECT cmer_id ,version ,cmp_id BULK COLLECT INTO v_cmer_ids ,v_versions ,v_cmp_ids FROM cmer; -- each parameter on a new line PROCEDURE create_prospect( company_info_in IN prospects.company_info%TYPE -- Organization ,firstname_in IN persons.firstname%TYPE -- FirstName ,lastname_in IN persons.lastname%TYPE -- LastName ); -- more than three parameters, each parameter on a separate line webcrm_marketing.prospect_ins( cmp_id_in => NULL ,company_info_in => company_info_in ,firstname_in => firstname_in ,lastname_in => lastname_in ,slt_code_in => NULL ); END; ]]></example> </rule> <rule name="MisplacedPragma" language="plsql" since="5.5.2" message="Pragma should be used only inside the declaration block before 'BEGIN'." class="net.sourceforge.pmd.lang.rule.xpath.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_plsql_codestyle.html#misplacedpragma"> <description> Oracle states that the PRAQMA AUTONOMOUS_TRANSACTION must be in the declaration block, but the code does not complain, when being compiled on the 11g DB. https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/static.htm#BABIIHBJ </description> <priority>3</priority> <properties> <property name="xpath"> <value> <![CDATA[ //ProgramUnit/Pragma ]]> </value> </property> </properties> <example> <![CDATA[ create or replace package inline_pragma_error is end; / create or replace package body inline_pragma_error is procedure do_transaction(p_input_token in varchar(200)) is PRAGMA AUTONOMOUS_TRANSACTION; /* this is correct place for PRAGMA */ begin PRAGMA AUTONOMOUS_TRANSACTION; /* this is the wrong place for PRAGMA -> violation */ /* do something */ COMMIT; end do_transaction; end inline_pragma_error; / ]]> </example> </rule> <rule name="ForLoopNaming" language="plsql" since="6.7.0" message="Use meaningful names for loop variables" class="net.sourceforge.pmd.lang.rule.xpath.XPathRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_plsql_codestyle.html#forloopnaming"> <description> In case you have loops please name the loop variables more meaningful. </description> <priority>3</priority> <properties> <property name="xpath"> <value> <![CDATA[ //CursorForLoopStatement[ $allowSimpleLoops = false() or (Statement//CursorForLoopStatement or ancestor::CursorForLoopStatement) ] /ForIndex[not(matches(@Image, $cursorPattern))] | //ForStatement[ $allowSimpleLoops = false() or (Statement//ForStatement or ancestor::ForStatement) ] /ForIndex[not(matches(@Image, $indexPattern))] ]]> </value> </property> <property name="allowSimpleLoops" type="Boolean" description="Ignore simple loops, that are not nested" value="false" /> <property name="cursorPattern" type="Regex" description="The pattern used for the cursor loop variable" value="[a-zA-Z_0-9]{5,}" /> <property name="indexPattern" type="Regex" description="The pattern used for the index loop variable" value="[a-zA-Z_0-9]{5,}" /> </properties> <example> <![CDATA[ -- good example BEGIN FOR company IN (SELECT * FROM companies) LOOP FOR contact IN (SELECT * FROM contacts) LOOP FOR party IN (SELECT * FROM parties) LOOP NULL; END LOOP; END LOOP; END LOOP; END; / -- bad example BEGIN FOR c1 IN (SELECT * FROM companies) LOOP FOR c2 IN (SELECT * FROM contacts) LOOP FOR c3 IN (SELECT * FROM parties) LOOP NULL; END LOOP; END LOOP; END LOOP; END; / ]]> </example> </rule> <rule name="LineLength" language="plsql" since="6.13.0" message="The line is too long." class="net.sourceforge.pmd.lang.plsql.rule.codestyle.LineLengthRule" externalInfoUrl="${pmd.website.baseurl}/pmd_rules_plsql_codestyle.html#linelength"> <description> This rule checks for long lines. Please note that comments are not ignored. This rule is the PMD equivalent of checkstyle's [LineLength](http://checkstyle.sourceforge.net/config_sizes.html#LineLength) check. </description> <priority>3</priority> </rule> </ruleset>