summaryrefslogtreecommitdiff
path: root/vendor/phpunit/php-code-coverage/src/StaticAnalysis
diff options
context:
space:
mode:
authorsupahgreg <supahgreg@users.noreply.github.com>2025-10-09 02:49:56 +0000
committersupahgreg <supahgreg@users.noreply.github.com>2025-10-09 03:08:30 +0000
commite41d6361221a30ca9d996cde7591111e626b7e1c (patch)
tree4572f61f37bbc76192ad60e0940c281483bc03af /vendor/phpunit/php-code-coverage/src/StaticAnalysis
parentab0aabf8548c206f3f624de5451a9b6abbde90be (diff)
Remove dev dependencies and update the rest.
Diffstat (limited to 'vendor/phpunit/php-code-coverage/src/StaticAnalysis')
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php30
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php184
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php326
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php366
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php31
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php119
-rw-r--r--vendor/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php253
7 files changed, 0 insertions, 1309 deletions
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php
deleted file mode 100644
index 00a6d8df1..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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 SebastianBergmann\CodeCoverage\Filter;
-
-final class CacheWarmer
-{
- public function warmCache(string $cacheDirectory, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode, Filter $filter): void
- {
- $analyser = new CachingFileAnalyser(
- $cacheDirectory,
- new ParsingFileAnalyser(
- $useAnnotationsForIgnoringCode,
- $ignoreDeprecatedCode
- )
- );
-
- foreach ($filter->files() as $file) {
- $analyser->process($file);
- }
- }
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php
deleted file mode 100644
index f53da078a..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php
+++ /dev/null
@@ -1,184 +0,0 @@
-<?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 file_get_contents;
-use function file_put_contents;
-use function implode;
-use function is_file;
-use function md5;
-use function serialize;
-use function unserialize;
-use SebastianBergmann\CodeCoverage\Util\Filesystem;
-use SebastianBergmann\FileIterator\Facade as FileIteratorFacade;
-
-/**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
- */
-final class CachingFileAnalyser implements FileAnalyser
-{
- /**
- * @var ?string
- */
- private static $cacheVersion;
-
- /**
- * @var FileAnalyser
- */
- private $analyser;
-
- /**
- * @var array
- */
- private $cache = [];
-
- /**
- * @var string
- */
- private $directory;
-
- public function __construct(string $directory, FileAnalyser $analyser)
- {
- Filesystem::createDirectory($directory);
-
- $this->analyser = $analyser;
- $this->directory = $directory;
- }
-
- public function classesIn(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['classesIn'];
- }
-
- public function traitsIn(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['traitsIn'];
- }
-
- public function functionsIn(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['functionsIn'];
- }
-
- /**
- * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
- */
- public function linesOfCodeFor(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['linesOfCodeFor'];
- }
-
- public function executableLinesIn(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['executableLinesIn'];
- }
-
- public function ignoredLinesFor(string $filename): array
- {
- if (!isset($this->cache[$filename])) {
- $this->process($filename);
- }
-
- return $this->cache[$filename]['ignoredLinesFor'];
- }
-
- public function process(string $filename): void
- {
- $cache = $this->read($filename);
-
- if ($cache !== false) {
- $this->cache[$filename] = $cache;
-
- return;
- }
-
- $this->cache[$filename] = [
- 'classesIn' => $this->analyser->classesIn($filename),
- 'traitsIn' => $this->analyser->traitsIn($filename),
- 'functionsIn' => $this->analyser->functionsIn($filename),
- 'linesOfCodeFor' => $this->analyser->linesOfCodeFor($filename),
- 'ignoredLinesFor' => $this->analyser->ignoredLinesFor($filename),
- 'executableLinesIn' => $this->analyser->executableLinesIn($filename),
- ];
-
- $this->write($filename, $this->cache[$filename]);
- }
-
- /**
- * @return mixed
- */
- private function read(string $filename)
- {
- $cacheFile = $this->cacheFile($filename);
-
- if (!is_file($cacheFile)) {
- return false;
- }
-
- return unserialize(
- file_get_contents($cacheFile),
- ['allowed_classes' => false]
- );
- }
-
- /**
- * @param mixed $data
- */
- private function write(string $filename, $data): void
- {
- file_put_contents(
- $this->cacheFile($filename),
- serialize($data)
- );
- }
-
- private function cacheFile(string $filename): string
- {
- return $this->directory . DIRECTORY_SEPARATOR . md5($filename . "\0" . file_get_contents($filename) . "\0" . self::cacheVersion());
- }
-
- private static function cacheVersion(): string
- {
- if (self::$cacheVersion !== null) {
- return self::$cacheVersion;
- }
-
- $buffer = [];
-
- foreach ((new FileIteratorFacade)->getFilesAsArray(__DIR__, '.php') as $file) {
- $buffer[] = $file;
- $buffer[] = file_get_contents($file);
- }
-
- self::$cacheVersion = md5(implode("\0", $buffer));
-
- return self::$cacheVersion;
- }
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php
deleted file mode 100644
index 8a2003fa8..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php
+++ /dev/null
@@ -1,326 +0,0 @@
-<?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 assert;
-use function implode;
-use function rtrim;
-use function trim;
-use PhpParser\Node;
-use PhpParser\Node\ComplexType;
-use PhpParser\Node\Identifier;
-use PhpParser\Node\IntersectionType;
-use PhpParser\Node\Name;
-use PhpParser\Node\NullableType;
-use PhpParser\Node\Stmt\Class_;
-use PhpParser\Node\Stmt\ClassMethod;
-use PhpParser\Node\Stmt\Enum_;
-use PhpParser\Node\Stmt\Function_;
-use PhpParser\Node\Stmt\Interface_;
-use PhpParser\Node\Stmt\Trait_;
-use PhpParser\Node\UnionType;
-use PhpParser\NodeTraverser;
-use PhpParser\NodeVisitorAbstract;
-use SebastianBergmann\Complexity\CyclomaticComplexityCalculatingVisitor;
-
-/**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
- */
-final class CodeUnitFindingVisitor extends NodeVisitorAbstract
-{
- /**
- * @psalm-var array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
- */
- private $classes = [];
-
- /**
- * @psalm-var array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
- */
- private $traits = [];
-
- /**
- * @psalm-var array<string,array{name: string, namespacedName: string, namespace: string, signature: string, startLine: int, endLine: int, ccn: int}>
- */
- private $functions = [];
-
- public function enterNode(Node $node): void
- {
- if ($node instanceof Class_) {
- if ($node->isAnonymous()) {
- return;
- }
-
- $this->processClass($node);
- }
-
- if ($node instanceof Trait_) {
- $this->processTrait($node);
- }
-
- if (!$node instanceof ClassMethod && !$node instanceof Function_) {
- return;
- }
-
- if ($node instanceof ClassMethod) {
- $parentNode = $node->getAttribute('parent');
-
- if ($parentNode instanceof Class_ && $parentNode->isAnonymous()) {
- return;
- }
-
- $this->processMethod($node);
-
- return;
- }
-
- $this->processFunction($node);
- }
-
- /**
- * @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
- */
- public function classes(): array
- {
- return $this->classes;
- }
-
- /**
- * @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, startLine: int, endLine: int, methods: array<string,array{methodName: string, signature: string, visibility: string, startLine: int, endLine: int, ccn: int}>}>
- */
- public function traits(): array
- {
- return $this->traits;
- }
-
- /**
- * @psalm-return array<string,array{name: string, namespacedName: string, namespace: string, signature: string, startLine: int, endLine: int, ccn: int}>
- */
- public function functions(): array
- {
- return $this->functions;
- }
-
- /**
- * @psalm-param ClassMethod|Function_ $node
- */
- private function cyclomaticComplexity(Node $node): int
- {
- assert($node instanceof ClassMethod || $node instanceof Function_);
-
- $nodes = $node->getStmts();
-
- if ($nodes === null) {
- return 0;
- }
-
- $traverser = new NodeTraverser;
-
- $cyclomaticComplexityCalculatingVisitor = new CyclomaticComplexityCalculatingVisitor;
-
- $traverser->addVisitor($cyclomaticComplexityCalculatingVisitor);
-
- /* @noinspection UnusedFunctionResultInspection */
- $traverser->traverse($nodes);
-
- return $cyclomaticComplexityCalculatingVisitor->cyclomaticComplexity();
- }
-
- /**
- * @psalm-param ClassMethod|Function_ $node
- */
- private function signature(Node $node): string
- {
- assert($node instanceof ClassMethod || $node instanceof Function_);
-
- $signature = ($node->returnsByRef() ? '&' : '') . $node->name->toString() . '(';
- $parameters = [];
-
- foreach ($node->getParams() as $parameter) {
- assert(isset($parameter->var->name));
-
- $parameterAsString = '';
-
- if ($parameter->type !== null) {
- $parameterAsString = $this->type($parameter->type) . ' ';
- }
-
- $parameterAsString .= '$' . $parameter->var->name;
-
- /* @todo Handle default values */
-
- $parameters[] = $parameterAsString;
- }
-
- $signature .= implode(', ', $parameters) . ')';
-
- $returnType = $node->getReturnType();
-
- if ($returnType !== null) {
- $signature .= ': ' . $this->type($returnType);
- }
-
- return $signature;
- }
-
- /**
- * @psalm-param Identifier|Name|ComplexType $type
- */
- private function type(Node $type): string
- {
- assert($type instanceof Identifier || $type instanceof Name || $type instanceof ComplexType);
-
- if ($type instanceof NullableType) {
- return '?' . $type->type;
- }
-
- if ($type instanceof UnionType || $type instanceof IntersectionType) {
- return $this->unionOrIntersectionAsString($type);
- }
-
- return $type->toString();
- }
-
- private function visibility(ClassMethod $node): string
- {
- if ($node->isPrivate()) {
- return 'private';
- }
-
- if ($node->isProtected()) {
- return 'protected';
- }
-
- return 'public';
- }
-
- private function processClass(Class_ $node): void
- {
- $name = $node->name->toString();
- $namespacedName = $node->namespacedName->toString();
-
- $this->classes[$namespacedName] = [
- 'name' => $name,
- 'namespacedName' => $namespacedName,
- 'namespace' => $this->namespace($namespacedName, $name),
- 'startLine' => $node->getStartLine(),
- 'endLine' => $node->getEndLine(),
- 'methods' => [],
- ];
- }
-
- private function processTrait(Trait_ $node): void
- {
- $name = $node->name->toString();
- $namespacedName = $node->namespacedName->toString();
-
- $this->traits[$namespacedName] = [
- 'name' => $name,
- 'namespacedName' => $namespacedName,
- 'namespace' => $this->namespace($namespacedName, $name),
- 'startLine' => $node->getStartLine(),
- 'endLine' => $node->getEndLine(),
- 'methods' => [],
- ];
- }
-
- private function processMethod(ClassMethod $node): void
- {
- $parentNode = $node->getAttribute('parent');
-
- if ($parentNode instanceof Interface_) {
- return;
- }
-
- assert($parentNode instanceof Class_ || $parentNode instanceof Trait_ || $parentNode instanceof Enum_);
- assert(isset($parentNode->name));
- assert(isset($parentNode->namespacedName));
- assert($parentNode->namespacedName instanceof Name);
-
- $parentName = $parentNode->name->toString();
- $parentNamespacedName = $parentNode->namespacedName->toString();
-
- if ($parentNode instanceof Class_) {
- $storage = &$this->classes;
- } else {
- $storage = &$this->traits;
- }
-
- if (!isset($storage[$parentNamespacedName])) {
- $storage[$parentNamespacedName] = [
- 'name' => $parentName,
- 'namespacedName' => $parentNamespacedName,
- 'namespace' => $this->namespace($parentNamespacedName, $parentName),
- 'startLine' => $parentNode->getStartLine(),
- 'endLine' => $parentNode->getEndLine(),
- 'methods' => [],
- ];
- }
-
- $storage[$parentNamespacedName]['methods'][$node->name->toString()] = [
- 'methodName' => $node->name->toString(),
- 'signature' => $this->signature($node),
- 'visibility' => $this->visibility($node),
- 'startLine' => $node->getStartLine(),
- 'endLine' => $node->getEndLine(),
- 'ccn' => $this->cyclomaticComplexity($node),
- ];
- }
-
- private function processFunction(Function_ $node): void
- {
- assert(isset($node->name));
- assert(isset($node->namespacedName));
- assert($node->namespacedName instanceof Name);
-
- $name = $node->name->toString();
- $namespacedName = $node->namespacedName->toString();
-
- $this->functions[$namespacedName] = [
- 'name' => $name,
- 'namespacedName' => $namespacedName,
- 'namespace' => $this->namespace($namespacedName, $name),
- 'signature' => $this->signature($node),
- 'startLine' => $node->getStartLine(),
- 'endLine' => $node->getEndLine(),
- 'ccn' => $this->cyclomaticComplexity($node),
- ];
- }
-
- private function namespace(string $namespacedName, string $name): string
- {
- return trim(rtrim($namespacedName, $name), '\\');
- }
-
- /**
- * @psalm-param UnionType|IntersectionType $type
- */
- private function unionOrIntersectionAsString(ComplexType $type): string
- {
- if ($type instanceof UnionType) {
- $separator = '|';
- } else {
- $separator = '&';
- }
-
- $types = [];
-
- foreach ($type->types as $_type) {
- if ($_type instanceof Name) {
- $types[] = $_type->toCodeString();
- } else {
- assert($_type instanceof Identifier);
-
- $types[] = $_type->toString();
- }
- }
-
- return implode($separator, $types);
- }
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php
deleted file mode 100644
index 506f27524..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php
+++ /dev/null
@@ -1,366 +0,0 @@
-<?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_diff_key;
-use function assert;
-use function count;
-use function current;
-use function end;
-use function explode;
-use function max;
-use function preg_match;
-use function preg_quote;
-use function range;
-use function reset;
-use function sprintf;
-use PhpParser\Node;
-use PhpParser\NodeVisitorAbstract;
-
-/**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
- */
-final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract
-{
- /**
- * @var int
- */
- private $nextBranch = 0;
-
- /**
- * @var string
- */
- private $source;
-
- /**
- * @var array<int, int>
- */
- private $executableLinesGroupedByBranch = [];
-
- /**
- * @var array<int, bool>
- */
- private $unsets = [];
-
- /**
- * @var array<int, string>
- */
- private $commentsToCheckForUnset = [];
-
- public function __construct(string $source)
- {
- $this->source = $source;
- }
-
- public function enterNode(Node $node): void
- {
- foreach ($node->getComments() as $comment) {
- $commentLine = $comment->getStartLine();
-
- if (!isset($this->executableLinesGroupedByBranch[$commentLine])) {
- continue;
- }
-
- foreach (explode("\n", $comment->getText()) as $text) {
- $this->commentsToCheckForUnset[$commentLine] = $text;
- $commentLine++;
- }
- }
-
- if ($node instanceof Node\Scalar\String_ ||
- $node instanceof Node\Scalar\EncapsedStringPart) {
- $startLine = $node->getStartLine() + 1;
- $endLine = $node->getEndLine() - 1;
-
- if ($startLine <= $endLine) {
- foreach (range($startLine, $endLine) as $line) {
- unset($this->executableLinesGroupedByBranch[$line]);
- }
- }
-
- return;
- }
-
- if ($node instanceof Node\Stmt\Declare_ ||
- $node instanceof Node\Stmt\DeclareDeclare ||
- $node instanceof Node\Stmt\Else_ ||
- $node instanceof Node\Stmt\EnumCase ||
- $node instanceof Node\Stmt\Finally_ ||
- $node instanceof Node\Stmt\Interface_ ||
- $node instanceof Node\Stmt\Label ||
- $node instanceof Node\Stmt\Namespace_ ||
- $node instanceof Node\Stmt\Nop ||
- $node instanceof Node\Stmt\Switch_ ||
- $node instanceof Node\Stmt\TryCatch ||
- $node instanceof Node\Stmt\Use_ ||
- $node instanceof Node\Stmt\UseUse ||
- $node instanceof Node\Expr\ConstFetch ||
- $node instanceof Node\Expr\Match_ ||
- $node instanceof Node\Expr\Variable ||
- $node instanceof Node\ComplexType ||
- $node instanceof Node\Const_ ||
- $node instanceof Node\Identifier ||
- $node instanceof Node\Name ||
- $node instanceof Node\Param ||
- $node instanceof Node\Scalar) {
- return;
- }
-
- if ($node instanceof Node\Stmt\Throw_) {
- $this->setLineBranch($node->expr->getEndLine(), $node->expr->getEndLine(), ++$this->nextBranch);
-
- return;
- }
-
- if ($node instanceof Node\Stmt\Enum_ ||
- $node instanceof Node\Stmt\Function_ ||
- $node instanceof Node\Stmt\Class_ ||
- $node instanceof Node\Stmt\ClassMethod ||
- $node instanceof Node\Expr\Closure ||
- $node instanceof Node\Stmt\Trait_) {
- $isConcreteClassLike = $node instanceof Node\Stmt\Enum_ || $node instanceof Node\Stmt\Class_ || $node instanceof Node\Stmt\Trait_;
-
- if (null !== $node->stmts) {
- foreach ($node->stmts as $stmt) {
- if ($stmt instanceof Node\Stmt\Nop) {
- continue;
- }
-
- foreach (range($stmt->getStartLine(), $stmt->getEndLine()) as $line) {
- unset($this->executableLinesGroupedByBranch[$line]);
-
- if (
- $isConcreteClassLike &&
- !$stmt instanceof Node\Stmt\ClassMethod
- ) {
- $this->unsets[$line] = true;
- }
- }
- }
- }
-
- if ($isConcreteClassLike) {
- return;
- }
-
- $hasEmptyBody = [] === $node->stmts ||
- null === $node->stmts ||
- (
- 1 === count($node->stmts) &&
- $node->stmts[0] instanceof Node\Stmt\Nop
- );
-
- if ($hasEmptyBody) {
- if ($node->getEndLine() === $node->getStartLine()) {
- return;
- }
-
- $this->setLineBranch($node->getEndLine(), $node->getEndLine(), ++$this->nextBranch);
-
- return;
- }
-
- return;
- }
-
- if ($node instanceof Node\Expr\ArrowFunction) {
- $startLine = max(
- $node->getStartLine() + 1,
- $node->expr->getStartLine()
- );
-
- $endLine = $node->expr->getEndLine();
-
- if ($endLine < $startLine) {
- return;
- }
-
- $this->setLineBranch($startLine, $endLine, ++$this->nextBranch);
-
- return;
- }
-
- if ($node instanceof Node\Expr\Ternary) {
- if (null !== $node->if &&
- $node->getStartLine() !== $node->if->getEndLine()) {
- $this->setLineBranch($node->if->getStartLine(), $node->if->getEndLine(), ++$this->nextBranch);
- }
-
- if ($node->getStartLine() !== $node->else->getEndLine()) {
- $this->setLineBranch($node->else->getStartLine(), $node->else->getEndLine(), ++$this->nextBranch);
- }
-
- return;
- }
-
- if ($node instanceof Node\Expr\BinaryOp\Coalesce) {
- if ($node->getStartLine() !== $node->getEndLine()) {
- $this->setLineBranch($node->getEndLine(), $node->getEndLine(), ++$this->nextBranch);
- }
-
- return;
- }
-
- if ($node instanceof Node\Stmt\If_ ||
- $node instanceof Node\Stmt\ElseIf_ ||
- $node instanceof Node\Stmt\Case_) {
- if (null === $node->cond) {
- return;
- }
-
- $this->setLineBranch(
- $node->cond->getStartLine(),
- $node->cond->getStartLine(),
- ++$this->nextBranch
- );
-
- return;
- }
-
- if ($node instanceof Node\Stmt\For_) {
- $startLine = null;
- $endLine = null;
-
- if ([] !== $node->init) {
- $startLine = $node->init[0]->getStartLine();
-
- end($node->init);
-
- $endLine = current($node->init)->getEndLine();
-
- reset($node->init);
- }
-
- if ([] !== $node->cond) {
- if (null === $startLine) {
- $startLine = $node->cond[0]->getStartLine();
- }
-
- end($node->cond);
-
- $endLine = current($node->cond)->getEndLine();
-
- reset($node->cond);
- }
-
- if ([] !== $node->loop) {
- if (null === $startLine) {
- $startLine = $node->loop[0]->getStartLine();
- }
-
- end($node->loop);
-
- $endLine = current($node->loop)->getEndLine();
-
- reset($node->loop);
- }
-
- if (null === $startLine || null === $endLine) {
- return;
- }
-
- $this->setLineBranch(
- $startLine,
- $endLine,
- ++$this->nextBranch
- );
-
- return;
- }
-
- if ($node instanceof Node\Stmt\Foreach_) {
- $this->setLineBranch(
- $node->expr->getStartLine(),
- $node->valueVar->getEndLine(),
- ++$this->nextBranch
- );
-
- return;
- }
-
- if ($node instanceof Node\Stmt\While_ ||
- $node instanceof Node\Stmt\Do_) {
- $this->setLineBranch(
- $node->cond->getStartLine(),
- $node->cond->getEndLine(),
- ++$this->nextBranch
- );
-
- return;
- }
-
- if ($node instanceof Node\Stmt\Catch_) {
- assert([] !== $node->types);
- $startLine = $node->types[0]->getStartLine();
- end($node->types);
- $endLine = current($node->types)->getEndLine();
-
- $this->setLineBranch(
- $startLine,
- $endLine,
- ++$this->nextBranch
- );
-
- return;
- }
-
- if ($node instanceof Node\Expr\CallLike) {
- if (isset($this->executableLinesGroupedByBranch[$node->getStartLine()])) {
- $branch = $this->executableLinesGroupedByBranch[$node->getStartLine()];
- } else {
- $branch = ++$this->nextBranch;
- }
-
- $this->setLineBranch($node->getStartLine(), $node->getEndLine(), $branch);
-
- return;
- }
-
- if (isset($this->executableLinesGroupedByBranch[$node->getStartLine()])) {
- return;
- }
-
- $this->setLineBranch($node->getStartLine(), $node->getEndLine(), ++$this->nextBranch);
- }
-
- public function afterTraverse(array $nodes): void
- {
- $lines = explode("\n", $this->source);
-
- foreach ($lines as $lineNumber => $line) {
- $lineNumber++;
-
- if (1 === preg_match('/^\s*$/', $line) ||
- (
- isset($this->commentsToCheckForUnset[$lineNumber]) &&
- 1 === preg_match(sprintf('/^\s*%s\s*$/', preg_quote($this->commentsToCheckForUnset[$lineNumber], '/')), $line)
- )) {
- unset($this->executableLinesGroupedByBranch[$lineNumber]);
- }
- }
-
- $this->executableLinesGroupedByBranch = array_diff_key(
- $this->executableLinesGroupedByBranch,
- $this->unsets
- );
- }
-
- public function executableLinesGroupedByBranch(): array
- {
- return $this->executableLinesGroupedByBranch;
- }
-
- private function setLineBranch(int $start, int $end, int $branch): void
- {
- foreach (range($start, $end) as $line) {
- $this->executableLinesGroupedByBranch[$line] = $branch;
- }
- }
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php
deleted file mode 100644
index 3dbcf68f6..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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;
-
-/**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
- */
-interface FileAnalyser
-{
- public function classesIn(string $filename): array;
-
- public function traitsIn(string $filename): array;
-
- public function functionsIn(string $filename): array;
-
- /**
- * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
- */
- public function linesOfCodeFor(string $filename): array;
-
- public function executableLinesIn(string $filename): array;
-
- public function ignoredLinesFor(string $filename): array;
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php
deleted file mode 100644
index 3c0b2373c..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php
+++ /dev/null
@@ -1,119 +0,0 @@
-<?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())
- );
- }
- }
-}
diff --git a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php b/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php
deleted file mode 100644
index e68638219..000000000
--- a/vendor/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php
+++ /dev/null
@@ -1,253 +0,0 @@
-<?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 array_unique;
-use function assert;
-use function file_get_contents;
-use function is_array;
-use function max;
-use function range;
-use function sort;
-use function sprintf;
-use function substr_count;
-use function token_get_all;
-use function trim;
-use PhpParser\Error;
-use PhpParser\Lexer;
-use PhpParser\NodeTraverser;
-use PhpParser\NodeVisitor\NameResolver;
-use PhpParser\NodeVisitor\ParentConnectingVisitor;
-use PhpParser\ParserFactory;
-use SebastianBergmann\CodeCoverage\ParserException;
-use SebastianBergmann\LinesOfCode\LineCountingVisitor;
-
-/**
- * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
- */
-final class ParsingFileAnalyser implements FileAnalyser
-{
- /**
- * @var array
- */
- private $classes = [];
-
- /**
- * @var array
- */
- private $traits = [];
-
- /**
- * @var array
- */
- private $functions = [];
-
- /**
- * @var array<string,array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}>
- */
- private $linesOfCode = [];
-
- /**
- * @var array
- */
- private $ignoredLines = [];
-
- /**
- * @var array
- */
- private $executableLines = [];
-
- /**
- * @var bool
- */
- private $useAnnotationsForIgnoringCode;
-
- /**
- * @var bool
- */
- private $ignoreDeprecatedCode;
-
- public function __construct(bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode)
- {
- $this->useAnnotationsForIgnoringCode = $useAnnotationsForIgnoringCode;
- $this->ignoreDeprecatedCode = $ignoreDeprecatedCode;
- }
-
- public function classesIn(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->classes[$filename];
- }
-
- public function traitsIn(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->traits[$filename];
- }
-
- public function functionsIn(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->functions[$filename];
- }
-
- /**
- * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
- */
- public function linesOfCodeFor(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->linesOfCode[$filename];
- }
-
- public function executableLinesIn(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->executableLines[$filename];
- }
-
- public function ignoredLinesFor(string $filename): array
- {
- $this->analyse($filename);
-
- return $this->ignoredLines[$filename];
- }
-
- /**
- * @throws ParserException
- */
- private function analyse(string $filename): void
- {
- if (isset($this->classes[$filename])) {
- return;
- }
-
- $source = file_get_contents($filename);
- $linesOfCode = max(substr_count($source, "\n") + 1, substr_count($source, "\r") + 1);
-
- if ($linesOfCode === 0 && !empty($source)) {
- $linesOfCode = 1;
- }
-
- $parser = (new ParserFactory)->create(
- ParserFactory::PREFER_PHP7,
- new Lexer
- );
-
- try {
- $nodes = $parser->parse($source);
-
- assert($nodes !== null);
-
- $traverser = new NodeTraverser;
- $codeUnitFindingVisitor = new CodeUnitFindingVisitor;
- $lineCountingVisitor = new LineCountingVisitor($linesOfCode);
- $ignoredLinesFindingVisitor = new IgnoredLinesFindingVisitor($this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode);
- $executableLinesFindingVisitor = new ExecutableLinesFindingVisitor($source);
-
- $traverser->addVisitor(new NameResolver);
- $traverser->addVisitor(new ParentConnectingVisitor);
- $traverser->addVisitor($codeUnitFindingVisitor);
- $traverser->addVisitor($lineCountingVisitor);
- $traverser->addVisitor($ignoredLinesFindingVisitor);
- $traverser->addVisitor($executableLinesFindingVisitor);
-
- /* @noinspection UnusedFunctionResultInspection */
- $traverser->traverse($nodes);
- // @codeCoverageIgnoreStart
- } catch (Error $error) {
- throw new ParserException(
- sprintf(
- 'Cannot parse %s: %s',
- $filename,
- $error->getMessage()
- ),
- $error->getCode(),
- $error
- );
- }
- // @codeCoverageIgnoreEnd
-
- $this->classes[$filename] = $codeUnitFindingVisitor->classes();
- $this->traits[$filename] = $codeUnitFindingVisitor->traits();
- $this->functions[$filename] = $codeUnitFindingVisitor->functions();
- $this->executableLines[$filename] = $executableLinesFindingVisitor->executableLinesGroupedByBranch();
- $this->ignoredLines[$filename] = [];
-
- $this->findLinesIgnoredByLineBasedAnnotations($filename, $source, $this->useAnnotationsForIgnoringCode);
-
- $this->ignoredLines[$filename] = array_unique(
- array_merge(
- $this->ignoredLines[$filename],
- $ignoredLinesFindingVisitor->ignoredLines()
- )
- );
-
- sort($this->ignoredLines[$filename]);
-
- $result = $lineCountingVisitor->result();
-
- $this->linesOfCode[$filename] = [
- 'linesOfCode' => $result->linesOfCode(),
- 'commentLinesOfCode' => $result->commentLinesOfCode(),
- 'nonCommentLinesOfCode' => $result->nonCommentLinesOfCode(),
- ];
- }
-
- private function findLinesIgnoredByLineBasedAnnotations(string $filename, string $source, bool $useAnnotationsForIgnoringCode): void
- {
- if (!$useAnnotationsForIgnoringCode) {
- return;
- }
-
- $start = false;
-
- foreach (token_get_all($source) as $token) {
- if (!is_array($token) ||
- !(T_COMMENT === $token[0] || T_DOC_COMMENT === $token[0])) {
- continue;
- }
-
- $comment = trim($token[1]);
-
- if ($comment === '// @codeCoverageIgnore' ||
- $comment === '//@codeCoverageIgnore') {
- $this->ignoredLines[$filename][] = $token[2];
-
- continue;
- }
-
- if ($comment === '// @codeCoverageIgnoreStart' ||
- $comment === '//@codeCoverageIgnoreStart') {
- $start = $token[2];
-
- continue;
- }
-
- if ($comment === '// @codeCoverageIgnoreEnd' ||
- $comment === '//@codeCoverageIgnoreEnd') {
- if (false === $start) {
- $start = $token[2];
- }
-
- $this->ignoredLines[$filename] = array_merge(
- $this->ignoredLines[$filename],
- range($start, $token[2])
- );
- }
- }
- }
-}