Spaces:
Runtime error
Runtime error
video-generater / vendor /phpunit /php-code-coverage /src /StaticAnalysis /IgnoredLinesFindingVisitor.php
| declare(strict_types=1); | |
| /* | |
| * This file is part of phpunit/php-code-coverage. | |
| * | |
| * (c) Sebastian Bergmann <sebastian@phpunit.de> | |
| * | |
| * For the full copyright and license information, please view the LICENSE | |
| * file that was distributed with this source code. | |
| */ | |
| namespace SebastianBergmann\CodeCoverage\StaticAnalysis; | |
| use function array_merge; | |
| use function assert; | |
| use function range; | |
| use function strpos; | |
| use PhpParser\Node; | |
| use PhpParser\Node\Attribute; | |
| use PhpParser\Node\Stmt\Class_; | |
| use PhpParser\Node\Stmt\ClassMethod; | |
| use PhpParser\Node\Stmt\Function_; | |
| use PhpParser\Node\Stmt\Interface_; | |
| use PhpParser\Node\Stmt\Trait_; | |
| use PhpParser\NodeVisitorAbstract; | |
| /** | |
| * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage | |
| */ | |
| final class IgnoredLinesFindingVisitor extends NodeVisitorAbstract | |
| { | |
| /** | |
| * @psalm-var list<int> | |
| */ | |
| private $ignoredLines = []; | |
| /** | |
| * @var bool | |
| */ | |
| private $useAnnotationsForIgnoringCode; | |
| /** | |
| * @var bool | |
| */ | |
| private $ignoreDeprecated; | |
| public function __construct(bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecated) | |
| { | |
| $this->useAnnotationsForIgnoringCode = $useAnnotationsForIgnoringCode; | |
| $this->ignoreDeprecated = $ignoreDeprecated; | |
| } | |
| public function enterNode(Node $node): void | |
| { | |
| if (!$node instanceof Class_ && | |
| !$node instanceof Trait_ && | |
| !$node instanceof Interface_ && | |
| !$node instanceof ClassMethod && | |
| !$node instanceof Function_ && | |
| !$node instanceof Attribute) { | |
| return; | |
| } | |
| if ($node instanceof Class_ && $node->isAnonymous()) { | |
| return; | |
| } | |
| if ($node instanceof Class_ || | |
| $node instanceof Trait_ || | |
| $node instanceof Interface_ || | |
| $node instanceof Attribute) { | |
| $this->ignoredLines[] = $node->getStartLine(); | |
| assert($node->name !== null); | |
| // Workaround for https://github.com/nikic/PHP-Parser/issues/886 | |
| $this->ignoredLines[] = $node->name->getStartLine(); | |
| } | |
| if (!$this->useAnnotationsForIgnoringCode) { | |
| return; | |
| } | |
| if ($node instanceof Interface_) { | |
| return; | |
| } | |
| $this->processDocComment($node); | |
| } | |
| /** | |
| * @psalm-return list<int> | |
| */ | |
| public function ignoredLines(): array | |
| { | |
| return $this->ignoredLines; | |
| } | |
| private function processDocComment(Node $node): void | |
| { | |
| $docComment = $node->getDocComment(); | |
| if ($docComment === null) { | |
| return; | |
| } | |
| if (strpos($docComment->getText(), '@codeCoverageIgnore') !== false) { | |
| $this->ignoredLines = array_merge( | |
| $this->ignoredLines, | |
| range($node->getStartLine(), $node->getEndLine()) | |
| ); | |
| } | |
| if ($this->ignoreDeprecated && strpos($docComment->getText(), '@deprecated') !== false) { | |
| $this->ignoredLines = array_merge( | |
| $this->ignoredLines, | |
| range($node->getStartLine(), $node->getEndLine()) | |
| ); | |
| } | |
| } | |
| } | |