Skip to content

Commit

Permalink
Merge pull request #809 from phpmd/feature/issue-808-supress-warnings
Browse files Browse the repository at this point in the history
Fix #808 Ignore rule path for supression annotation
  • Loading branch information
tvbeek committed Aug 3, 2020
2 parents d6b3b1e + 281bee5 commit d3234c5
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/main/php/PHPMD/Node/Annotation.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,10 @@ private function isSuppressed(Rule $rule)
{
if (in_array($this->value, array('PHPMD', 'PMD'))) {
return true;
} elseif (preg_match('/^(PH)?PMD\.' . $rule->getName() . '/', $this->value)) {
} elseif (preg_match(
'/^(PH)?PMD\.' . preg_replace('/^.*\/([^\/]*)$/', '$1', $rule->getName()) . '/',
$this->value
)) {
return true;
}

Expand Down
29 changes: 29 additions & 0 deletions src/test/php/PHPMD/Node/ClassNodeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
use PDepend\Source\AST\ASTMethod;
use PDepend\Source\AST\ASTNamespace;
use PHPMD\AbstractTest;
use PHPMD\Rule\Design\CouplingBetweenObjects;

/**
* Test case for the class node implementation.
Expand Down Expand Up @@ -62,6 +63,34 @@ public function testHasSuppressWarningsAnnotationForReturnsTrue()
$this->assertTrue($node->hasSuppressWarningsAnnotationFor($rule));
}

/**
* testHasSuppressWarningsWithRuleNameContainingSlashes
*
* @return void
*/
public function testHasSuppressWarningsWithRuleNameContainingSlashes()
{
$class = new ASTClass(null);
$class->setComment('/** @SuppressWarnings(PMD.CouplingBetweenObjects) */');

$rule = new CouplingBetweenObjects();
$rule->setName('rulesets/design.xml/CouplingBetweenObjects');

$node = new ClassNode($class);

$this->assertTrue($node->hasSuppressWarningsAnnotationFor($rule));

$class = new ASTClass(null);
$class->setComment('/** @SuppressWarnings(PMD.TooManyFields) */');

$rule = new CouplingBetweenObjects();
$rule->setName('rulesets/design.xml/CouplingBetweenObjects');

$node = new ClassNode($class);

$this->assertFalse($node->hasSuppressWarningsAnnotationFor($rule));
}

/**
* testGetFullQualifiedNameReturnsExpectedValue
*
Expand Down

0 comments on commit d3234c5

Please sign in to comment.