[pmd-devel] [ANNOUNCE] PMD 6.13.0 Released
A source code analyzer
Brought to you by:
adangel,
juansotuyo
|
From: Andreas D. <and...@ad...> - 2019-03-31 11:26:21
|
* Downloads: https://github.com/pmd/pmd/releases/tag/pmd_releases%2F6.13.0 * Documentation: https://pmd.github.io/pmd-6.13.0/ 31-March-2019 - 6.13.0 The PMD team is pleased to announce PMD 6.13.0. This is a minor release. Table Of Contents * New and noteworthy <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#new-and-noteworthy> o Call For Logo <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#call-for-logo> o Java 12 Support <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#java-12-support> o Quickstart Ruleset for Apex <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#quickstart-ruleset-for-apex> o PMD Designer <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#pmd-designer> o Improved Apex Support <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#improved-apex-support> o New Rules <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#new-rules> * Fixed Issues <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#fixed-issues> * API Changes <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#api-changes> o Command Line Interface <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#command-line-interface> o Deprecated API <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#deprecated-api> * External Contributions <https://sourceforge.net/p/pmd/news/2019/03/pmd-6130-released/#external-contributions> New and noteworthy Call For Logo We are still searching for a new logo for PMD for the next major release. Learn more about how to participate on github issue 1663 <https://github.com/pmd/pmd/issues/1663>. Java 12 Support This release of PMD brings support for Java 12. PMD can parse the new Switch Expressions <http://openjdk.java.net/jeps/325> and resolve the type of such an expression. Note: The Switch Expressions are a preview language feature of OpenJDK 12 and are not enabled by default. In order to analyze a project with PMD that uses these language features, you'll need to enable it via the new environment variable |PMD_JAVA_OPTS|: export PMD_JAVA_OPTS=--enable-preview ./run.sh pmd ... Quickstart Ruleset for Apex PMD provides now a quickstart ruleset for Salesforce.com Apex, which you can use as a base ruleset to get your custom ruleset started. You can reference it with |rulesets/apex/quickstart.xml|. You are strongly encouraged to create your own ruleset <https://pmd.github.io/pmd-6.12.0/pmd_userdocs_making_rulesets.html> though. The quickstart ruleset has the intention, to be useful out-of-the-box for many projects. Therefore it references only rules, that are most likely to apply everywhere. Any feedback would be greatly appreciated. PMD Designer The rule designer's codebase has been moved out of the main repository and will be developed at pmd/pmd-designer <https://github.com/pmd/pmd-designer> from now on. The maven coordinates will stay the same for the time being. The designer will still be shipped with PMD's binaries. Improved Apex Support * Many AST nodes now expose more information which makes it easier to write XPath-based rules for Apex. Here are some examples: o |Annotation[@Resolved = false()]| finds unsupported annotations. o |AnnotationParameter[@Name='RestResource'][@Value='/myurl']| gives access to annotation parameters. o |CatchBlockStatement[@ExceptionType='Exception'][@VariableName='e']| finds catch block for specific exception types. o |Field[@Type='String']| find all String fields, |Field[string-length(@Name) < 5]| finds all fields with short names and |Field[@Value='a']| find alls fields, that are initialized with a specific value. o |LiteralExpression[@String = true()]| finds all String literals. There are attributes for each type: |@Boolean|, |@Integer|, |@Double|, |@Long|, |@Decimal|, |@Null|. o |Method[@Constructor = true()]| selects all constructors. |Method[@ReturnType = 'String']| selects all methods that return a String. o The |ModifierNode| node has a couple of attributes to check for the existence of specific modifiers: |@Test|, |@TestOrTestSetup|, |@WithSharing|, |@WithoutSharing|, |@InheritedSharing|, |@WebService|, |@Global|, |@Override|. o Many nodes now expose their type. E.g. with |Parameter[@Type='Integer']| you can find all method parameters of type Integer. The same attribute |Type| exists as well for: |NewObjectExpression|, |Property|, |VariableDeclaration|. o |VariableExpression[@Image='i']| finds all variable usages of the variable "i". New Rules * The new Java rule |AvoidUncheckedExceptionsInSignatures| <https://pmd.github.io/pmd-6.13.0/pmd_rules_java_design.html#avoiduncheckedexceptionsinsignatures> (|java-design|) finds methods or constructors that declare unchecked exceptions in their |throws| clause. This forces the caller to handle the exception, even though it is a runtime exception. * The new Java rule |DetachedTestCase| <https://pmd.github.io/pmd-6.13.0/pmd_rules_java_errorprone.html#detachedtestcase> (|java-errorprone|) searches for public methods in test classes, which are not annotated with |@Test|. These methods might be test cases where the annotation has been forgotten. Because of that those test cases are never executed. * The new Java rule |WhileLoopWithLiteralBoolean| <https://pmd.github.io/pmd-6.13.0/pmd_rules_java_bestpractices.html#whileloopwithliteralboolean> (|java-bestpractices|) finds Do-While-Loops and While-Loops that can be simplified since they use simply |true| or |false| as their loop condition. * The new Apex rule |ApexAssertionsShouldIncludeMessage| <https://pmd.github.io/pmd-6.13.0/pmd_rules_apex_bestpractices.html#apexassertionsshouldincludemessage> (|apex-bestpractices|) searches for assertions in unit tests and checks, whether they use a message argument. * The new Apex rule |ApexUnitTestMethodShouldHaveIsTestAnnotation| <https://pmd.github.io/pmd-6.13.0/pmd_rules_apex_bestpractices.html#apexunittestmethodshouldhaveistestannotation> (|apex-bestpractices|) searches for methods in test classes, which are missing the |@IsTest| annotation. * The new PLSQL rule |AvoidTabCharacter| <https://pmd.github.io/pmd-6.13.0/pmd_rules_plsql_codestyle.html#avoidtabcharacter> (|plsql-codestyle|) checks, that there are no tab characters ("\t") in the source file. * The new PLSQL rule |LineLength| <https://pmd.github.io/pmd-6.13.0/pmd_rules_plsql_codestyle.html#linelength> (|plsql-codestyle|) helps to enforce a maximum line length. Fixed Issues * doc o #1721 <https://github.com/pmd/pmd/issues/1721>: [doc] Documentation provides an invalid property configuration example * java o #1537 <https://github.com/pmd/pmd/issues/1537>: [java] Java 12 support * java-bestpractices o #1701 <https://github.com/pmd/pmd/issues/1701>: [java] UseTryWithResources does not handle multiple argument close methods * java-codestyle o #1527 <https://github.com/pmd/pmd/issues/1527>: [java] UseUnderscoresInNumericLiterals false positive on floating point numbers o #1674 <https://github.com/pmd/pmd/issues/1674>: [java] documentation of CommentDefaultAccessModifier is wrong * java-errorprone o #1570 <https://github.com/pmd/pmd/issues/1570>: [java] AvoidDuplicateLiterals warning about deprecated separator property when not used * plsql o #1510 <https://github.com/pmd/pmd/issues/1510>: [plsql] Support XMLTABLE functions o #1716 <https://github.com/pmd/pmd/issues/1716>: [plsql] Support access to whole plsql code o #1731 <https://github.com/pmd/pmd/issues/1731>: [pslql] ParseException when parsing ELSIF o #1733 <https://github.com/pmd/pmd/issues/1733>: [plsql] % not supported in "TestSearch%notfound" o #1734 <https://github.com/pmd/pmd/issues/1734>: [plsql] TooManyMethods false-negative o #1735 <https://github.com/pmd/pmd/issues/1735>: [plsql] False-negatives for TO_DATE_TO_CHAR, TO_DATEWithoutDateFormat, TO_TIMESTAMPWithoutDateFormat API Changes Command Line Interface The start scripts |run.sh|, |pmd.bat| and |cpd.bat| support the new environment variable |PMD_JAVA_OPTS|. This can be used to set arbitrary JVM options for running PMD, such as memory settings (e.g. |PMD_JAVA_OPTS=-Xmx512m|) or enable preview language features (e.g. |PMD_JAVA_OPTS=--enable-preview|). The previously available variables such as |OPTS| or |HEAPSIZE| are deprecated and will be removed with PMD 7.0.0. Deprecated API * |CodeClimateRule| <https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.13.0/net/sourceforge/pmd/renderers/CodeClimateRule.html#> is deprecated in 7.0.0 because it was unused for 2 years and created an unwanted dependency. Properties "cc_categories", "cc_remediation_points_multiplier", "cc_block_highlighting" will also be removed. See #1702 <https://github.com/pmd/pmd/pull/1702> for more. * The Apex ruleset |rulesets/apex/ruleset.xml| has been deprecated and will be removed in 7.0.0. Please use the new quickstart ruleset |rulesets/apex/quickstart.xml| instead. External Contributions * #1694 <https://github.com/pmd/pmd/pull/1694>: [apex] New rules for test method and assert statements - triandicAnt <https://github.com/triandicAnt> * #1697 <https://github.com/pmd/pmd/pull/1697>: [doc] Update CPD documentation - Matías Fraga <https://github.com/matifraga> * #1704 <https://github.com/pmd/pmd/pull/1704>: [java] Added AvoidUncheckedExceptionsInSignatures Rule - Bhanu Prakash Pamidi <https://github.com/pamidi99> * #1706 <https://github.com/pmd/pmd/pull/1706>: [java] Add DetachedTestCase rule - David Burström <https://github.com/davidburstromspotify> * #1709 <https://github.com/pmd/pmd/pull/1709>: [java] Detect while loops with literal booleans conditions - David Burström <https://github.com/davidburstromspotify> * #1717 <https://github.com/pmd/pmd/pull/1717>: [java] Fix false positive in useTryWithResources when using a custom close method with multiple arguments - Rishabh Jain <https://github.com/jainrish> * #1724 <https://github.com/pmd/pmd/pull/1724>: [doc] Correct property override example - Felix W. Dekker <https://github.com/FWDekker> * #1737 <https://github.com/pmd/pmd/pull/1737>: [java] fix escaping of CommentDefaultAccessModifier documentation - itaigilo <https://github.com/itaigilo> |