Skip to content

Commit

Permalink
Merge pull request #980 from kylekatarnls/feature/php-8-2
Browse files Browse the repository at this point in the history
Support PHP 8.1 and 8.2
  • Loading branch information
kylekatarnls committed Sep 9, 2022
2 parents 791596a + a308b59 commit 4b5d370
Show file tree
Hide file tree
Showing 25 changed files with 313 additions and 15 deletions.
17 changes: 17 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
phpmd-2.13.0 (2022/09)
========================

- Require pdepend/pdepend 2.12
- Added PHP 8.1 and 8.2 syntax support
See full changes list:
- https://github.com/pdepend/pdepend/releases/tag/2.12.0
- https://github.com/pdepend/pdepend/releases/tag/2.11.0
- Added #943 Static access add ignore pattern for methods
- Added #958 Add missing ruleset error message on baseline
- Added #955 Add Gitlab renderer for Gitlab CI
- Fixed #4 Typo on Superglobals rule
- Fixed #976 Avoid deprecated exceptions
- Fixed #977 Add missing github & gitlab reportfile options
- Improved #954 npath complexity documentation with example
- Improved #946 Highlight readme code examples

phpmd-2.12.0 (2022/03/24)
========================

Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"minimum-stability": "stable",
"require": {
"php": ">=5.3.9",
"pdepend/pdepend": "^2.10.3",
"pdepend/pdepend": "^2.12.1",
"ext-xml": "*",
"composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0"
},
Expand Down
8 changes: 6 additions & 2 deletions src/main/php/PHPMD/AbstractRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@

namespace PHPMD;

use PHPMD\Node\AbstractTypeNode;
use PHPMD\Node\ClassNode;
use PHPMD\Node\EnumNode;
use PHPMD\Node\InterfaceNode;
use PHPMD\Node\TraitNode;

/**
* This is the abstract base class for pmd rules.
Expand Down Expand Up @@ -399,9 +403,9 @@ protected function addViolation(
/**
* Apply the current rule on each method of a class node.
*
* @param ClassNode $node class node containing methods.
* @param ClassNode|InterfaceNode|TraitNode|EnumNode $node class node containing methods.
*/
protected function applyOnClassMethods(ClassNode $node)
protected function applyOnClassMethods(AbstractTypeNode $node)
{
foreach ($node->getMethods() as $method) {
if ($method->hasSuppressWarningsAnnotationFor($this)) {
Expand Down
41 changes: 41 additions & 0 deletions src/main/php/PHPMD/Node/EnumNode.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
/**
* This file is part of PHP Mess Detector.
*
* Copyright (c) Manuel Pichler <mapi@phpmd.org>.
* All rights reserved.
*
* Licensed under BSD License
* For full copyright and license information, please see the LICENSE file.
* Redistributions of files must retain the above copyright notice.
*
* @author Manuel Pichler <mapi@phpmd.org>
* @copyright Manuel Pichler. All rights reserved.
* @license https://opensource.org/licenses/bsd-license.php BSD License
* @link http://phpmd.org/
*/

namespace PHPMD\Node;

use PDepend\Source\AST\ASTEnum;

/**
* Wrapper around PHP_Depend's enum objects.
*/
class EnumNode extends AbstractTypeNode
{
/**
* The type of this enum.
*/
const CLAZZ = __CLASS__;

/**
* Constructs a new class wrapper node.
*
* @param \PDepend\Source\AST\ASTEnum $node
*/
public function __construct(ASTEnum $node)
{
parent::__construct($node);
}
}
5 changes: 5 additions & 0 deletions src/main/php/PHPMD/Node/MethodNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

namespace PHPMD\Node;

use PDepend\Source\AST\ASTEnum;
use PDepend\Source\AST\ASTMethod;
use PDepend\Source\AST\ASTClass;
use PDepend\Source\AST\ASTTrait;
Expand Down Expand Up @@ -122,6 +123,10 @@ public function getParentType()
return new ClassNode($parentNode);
}

if ($parentNode instanceof ASTEnum) {
return new EnumNode($parentNode);
}

return new InterfaceNode($parentNode);
}

Expand Down
36 changes: 36 additions & 0 deletions src/main/php/PHPMD/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

use PDepend\Engine;
use PDepend\Report\CodeAwareGenerator;
use PDepend\Source\AST\ASTEnum;
use PDepend\Source\AST\ASTTrait;
use PDepend\Source\ASTVisitor\AbstractASTVisitor;
use PDepend\Metrics\Analyzer;
use PDepend\Source\AST\ASTClass;
Expand All @@ -27,9 +29,11 @@
use PDepend\Source\AST\ASTFunction;
use PDepend\Source\AST\ASTArtifactList;
use PHPMD\Node\ClassNode;
use PHPMD\Node\EnumNode;
use PHPMD\Node\FunctionNode;
use PHPMD\Node\InterfaceNode;
use PHPMD\Node\MethodNode;
use PHPMD\Node\TraitNode;

/**
* Simple wrapper around the php depend engine.
Expand Down Expand Up @@ -188,6 +192,38 @@ public function visitClass(ASTClass $node)
parent::visitClass($node);
}

/**
* Visits a trait node.
*
* @param \PDepend\Source\AST\ASTTrait $node
* @return void
*/
public function visitTrait(ASTTrait $node)
{
if (!$node->isUserDefined()) {
return;
}

$this->apply(new TraitNode($node));
parent::visitTrait($node);
}

/**
* Visits a enum node.
*
* @param \PDepend\Source\AST\ASTEnum $node
* @return void
*/
public function visitEnum(ASTEnum $node)
{
if (!$node->isUserDefined()) {
return;
}

$this->apply(new EnumNode($node));
parent::visitEnum($node);
}

/**
* Visits a function node.
*
Expand Down
4 changes: 3 additions & 1 deletion src/main/php/PHPMD/Rule/Controversial/CamelCaseClassName.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,17 @@
use PHPMD\AbstractNode;
use PHPMD\AbstractRule;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\EnumAware;
use PHPMD\Rule\InterfaceAware;
use PHPMD\Rule\TraitAware;

/**
* This rule class detects classes not named in CamelCase.
*
* @author Francis Besset <francis.besset@gmail.com>
* @since 1.1.0
*/
class CamelCaseClassName extends AbstractRule implements ClassAware, InterfaceAware
class CamelCaseClassName extends AbstractRule implements ClassAware, InterfaceAware, TraitAware, EnumAware
{
/**
* This method checks if a class is not named in CamelCase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@
use PHPMD\AbstractNode;
use PHPMD\AbstractRule;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\TraitAware;

/**
* This rule class detects properties not named in camelCase.
*
* @author Francis Besset <francis.besset@gmail.com>
* @since 1.1.0
*/
class CamelCasePropertyName extends AbstractRule implements ClassAware
class CamelCasePropertyName extends AbstractRule implements ClassAware, TraitAware
{
/**
* This method checks if a property is not named in camelCase
Expand Down
8 changes: 6 additions & 2 deletions src/main/php/PHPMD/Rule/Design/CountInLoopExpression.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,11 @@
use PHPMD\AbstractRule;
use PHPMD\Node\ASTNode;
use PHPMD\Node\ClassNode;
use PHPMD\Node\EnumNode;
use PHPMD\Node\TraitNode;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\EnumAware;
use PHPMD\Rule\TraitAware;

/**
* Count In Loop Expression Rule
Expand All @@ -37,7 +41,7 @@
*
* @author Kamil Szymanski <kamilszymanski@gmail.com>
*/
class CountInLoopExpression extends AbstractRule implements ClassAware
class CountInLoopExpression extends AbstractRule implements ClassAware, TraitAware, EnumAware
{
/**
* List of functions to search against
Expand Down Expand Up @@ -68,7 +72,7 @@ class CountInLoopExpression extends AbstractRule implements ClassAware
*/
public function apply(AbstractNode $node)
{
if ($node instanceof ClassNode) {
if ($node instanceof ClassNode || $node instanceof TraitNode || $node instanceof EnumNode) {
return $this->applyOnClassMethods($node);
}

Expand Down
25 changes: 25 additions & 0 deletions src/main/php/PHPMD/Rule/EnumAware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php
/**
* This file is part of PHP Mess Detector.
*
* Copyright (c) Manuel Pichler <mapi@phpmd.org>.
* All rights reserved.
*
* Licensed under BSD License
* For full copyright and license information, please see the LICENSE file.
* Redistributions of files must retain the above copyright notice.
*
* @author Manuel Pichler <mapi@phpmd.org>
* @copyright Manuel Pichler. All rights reserved.
* @license https://opensource.org/licenses/bsd-license.php BSD License
* @link http://phpmd.org/
*/

namespace PHPMD\Rule;

/**
* This interface is used to mark a rule implementation as enum aware.
*/
interface EnumAware
{
}
2 changes: 1 addition & 1 deletion src/main/php/PHPMD/Rule/ExcessivePublicCount.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* This rule checks the number of public methods and fields in a given class.
* Then it compares the number of public members against a configured threshold.
*/
class ExcessivePublicCount extends AbstractRule implements ClassAware
class ExcessivePublicCount extends AbstractRule implements ClassAware, TraitAware
{
/**
* This method checks the number of public fields and methods in the given
Expand Down
4 changes: 3 additions & 1 deletion src/main/php/PHPMD/Rule/Naming/ConstantNamingConventions.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
use PHPMD\AbstractNode;
use PHPMD\AbstractRule;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\EnumAware;
use PHPMD\Rule\InterfaceAware;
use PHPMD\Rule\TraitAware;

/**
* This rule detects class/interface constants that do not follow the upper
* case convention.
*/
class ConstantNamingConventions extends AbstractRule implements ClassAware, InterfaceAware
class ConstantNamingConventions extends AbstractRule implements ClassAware, InterfaceAware, TraitAware, EnumAware
{
/**
* Extracts all constant declarations from the given node and tests that
Expand Down
4 changes: 3 additions & 1 deletion src/main/php/PHPMD/Rule/Naming/LongClassName.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
use PHPMD\AbstractNode;
use PHPMD\AbstractRule;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\EnumAware;
use PHPMD\Rule\InterfaceAware;
use PHPMD\Rule\TraitAware;
use PHPMD\Utility\Strings;

/**
* This rule checks if an interface or class name exceeds the configured length excluding certain configured suffixes
*/
class LongClassName extends AbstractRule implements ClassAware, InterfaceAware
class LongClassName extends AbstractRule implements ClassAware, InterfaceAware, TraitAware, EnumAware
{
/**
* Temporary cache of configured suffixes to subtract
Expand Down
3 changes: 2 additions & 1 deletion src/main/php/PHPMD/Rule/Naming/LongVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\FunctionAware;
use PHPMD\Rule\MethodAware;
use PHPMD\Rule\TraitAware;
use PHPMD\Utility\Strings;

/**
* This rule class will detect variables, parameters and properties with really
* long names.
*/
class LongVariable extends AbstractRule implements ClassAware, MethodAware, FunctionAware
class LongVariable extends AbstractRule implements ClassAware, MethodAware, FunctionAware, TraitAware
{
/**
* Temporary cache of configured suffixes to subtract
Expand Down
4 changes: 3 additions & 1 deletion src/main/php/PHPMD/Rule/Naming/ShortClassName.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,15 @@
use PHPMD\AbstractNode;
use PHPMD\AbstractRule;
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\EnumAware;
use PHPMD\Rule\InterfaceAware;
use PHPMD\Rule\TraitAware;
use PHPMD\Utility\Strings;

/**
* This rule will detect classes and interfaces with names that are too short.
*/
class ShortClassName extends AbstractRule implements ClassAware, InterfaceAware
class ShortClassName extends AbstractRule implements ClassAware, InterfaceAware, TraitAware, EnumAware
{
/**
* Temporary cache of configured exceptions. Have name as key
Expand Down
3 changes: 2 additions & 1 deletion src/main/php/PHPMD/Rule/Naming/ShortVariable.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,13 @@
use PHPMD\Rule\ClassAware;
use PHPMD\Rule\FunctionAware;
use PHPMD\Rule\MethodAware;
use PHPMD\Rule\TraitAware;

/**
* This rule class will detect variables, parameters and properties with short
* names.
*/
class ShortVariable extends AbstractRule implements ClassAware, MethodAware, FunctionAware
class ShortVariable extends AbstractRule implements ClassAware, MethodAware, FunctionAware, TraitAware
{
/**
* Temporary map holding variables that were already processed in the
Expand Down
25 changes: 25 additions & 0 deletions src/main/php/PHPMD/Rule/TraitAware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php
/**
* This file is part of PHP Mess Detector.
*
* Copyright (c) Manuel Pichler <mapi@phpmd.org>.
* All rights reserved.
*
* Licensed under BSD License
* For full copyright and license information, please see the LICENSE file.
* Redistributions of files must retain the above copyright notice.
*
* @author Manuel Pichler <mapi@phpmd.org>
* @copyright Manuel Pichler. All rights reserved.
* @license https://opensource.org/licenses/bsd-license.php BSD License
* @link http://phpmd.org/
*/

namespace PHPMD\Rule;

/**
* This interface is used to mark a rule implementation as trait aware.
*/
interface TraitAware
{
}
Loading

0 comments on commit 4b5d370

Please sign in to comment.